Fonction de connexion à SQL SERVER

Fonction de connexion à SQL SERVER - VB/VBA/VBS - Programmation

Marsh Posté le 04-05-2005 à 11:54:27    

Bonjour,
 
je vais commencer directement par mon code :
 
 
Voici ma fonction de connexion à SQL SERVER :

Code :
  1. Public Function Connexion() As Boolean
  2.                     Public Server As String
  3.                     Dim BDD As String
  4.                     Dim User As String
  5.                     Dim Password As String
  6.                     Dim CoBase As Connection
  7.                    
  8.                                         ' Paramètres de la base de données
  9.                     Server = "MILOUSE"
  10.                     BDD = "bibliotheque_vb"
  11.                     User = "***"
  12.                     Password = "***"
  13.                          
  14.                     ' Ecriture de la connexion
  15.                     Set CoBase = New Connection
  16.                     With CoBase
  17.                         .ConnectionTimeout = 25
  18.                         .Provider = "SQLOLEDB.1"
  19.                         .Properties("Data Source" ).Value = Server
  20.                         .Properties("Initial catalog" ).Value = BDD
  21.                         .Properties("User ID" ).Value = User
  22.                         .Properties("Password" ).Value = Password
  23.                         .Open
  24.                     End With
  25. End Function


 
Code de du bouton rechercher :

Code :
  1. Private Sub Command1_Click()
  2.     ' Recherche d'un auteur
  3.     Dim recherche As String
  4.    
  5.     If BoxRechercheAuteur.Text <> "" Then
  6.         recherche = BoxRechercheAuteur.Text
  7.         ' Appel de la fonction de recherche
  8.             Connexion
  9.                     Dim BibliBase As Command
  10.                     Dim nom As String
  11.                     Dim resultRech As Recordset
  12.                    
  13.                     ' Lancement de la connexion
  14.                     Set BibliBase = New Command
  15.                     BibliBase.ActiveConnection = CoBase
  16.                    
  17.                     ' Ecriture de la requete
  18.                     BibliBase.CommandText = "SELECT naissance FROM auteurs WHERE nom='riri';"
  19.                     ' Lancement de la requete
  20.                     Set resultRech = BibliBase.Execute
  21.                     ' Affectation des résultats de la requete aux Box
  22.                     BoxNaissanceAuteur.Text = resultRech!naissance
  23.                     ' Fermeture de la connexion
  24.                     Set BibliBase = Nothing
  25.                     CoBase.Close
  26.                     Set CoBase = Nothing
  27.        
  28.                    
  29.     Else
  30.         MsgBox ("Veuillez insérer le nom à rechercher" ), , "Attention"
  31.     End If
  32. End Sub


 
Si je met le code de la fonction directement dans mon sub, je n'ai aucun soucis, je récupére bien mes variables de la requête.
 
Mais je cherche à ne pas réecrire le code de connexion à chaque fois que j'ai besoin de faire un requête. Donc j'ai écrit la fonction de connexion, mais le script ne retrouve pas la variable CoBase. Comment puis je faire pour créer cette fonction de connexion qui sera appelée à chaque fois que j'ai besoin de faire une requete ? Faire une fonction "générique" de connexion.
 
je veux faire un espece d'include de l'ouverture et de la fermeture de connexion.
 
Quelqu'un a une idée ?
Merci :jap:

Reply

Marsh Posté le 04-05-2005 à 11:54:27   

Reply

Marsh Posté le 04-05-2005 à 12:14:37    

J'ai crée ce module pour me faciliter les requetes...
Voici le code... en espérant que ca te soit utile...
 

Code :
  1. Module Connexion
  2.     '  Déclaration Objet Connexion
  3.     Public ObjetConnection As SqlClient.SqlConnection
  4.     ' Déclaration Objet Commande
  5.     Public ObjetCommand As SqlClient.SqlCommand
  6.     '  Déclaration Objet DataAdapter
  7.     Public ObjetDataAdapter As SqlClient.SqlDataAdapter
  8.     ' Déclaration Objet DataSet
  9.     Public ObjetDataSet As New DataSet
  10.     'String contenant la 'Requête SQL'
  11.     Public ObjetDataTable As DataTable
  12.     ' Déclaration Objet DataRow (ligne)
  13.     Public ObjetDataRow As DataRow
  14.     Public strConn As String
  15.     Public ObjetCommandBuilder As SqlClient.SqlCommandBuilder
  16.     Public Function ConnexionSQL(ByVal requete As String, ByVal table As String) As DataTable
  17.         ObjetDataSet = New DataSet
  18.         'Ouverture
  19.         'Initialisation de la chaîne de paramètres pour la connexion
  20.         strConn = "Server=STAGE;Initial Catalog=CPAG;uid=Administrateur;password=*****"
  21.         'Instanciation d'un Objet Connexion
  22.         ObjetConnection = New SqlClient.SqlConnection
  23.         'Donner à la propriété ConnectionString les paramètres de connexion
  24.         ObjetConnection.ConnectionString = strConn
  25.         'Ouvrir la connexion
  26.         ObjetConnection.Open()
  27.         'Instancer un objet Commande
  28.         ObjetCommand = New SqlClient.SqlCommand(requete)
  29.         'Instancer un objet Adapter
  30.         ObjetDataAdapter = New SqlClient.SqlDataAdapter(ObjetCommand)
  31.         'initialiser l'objet Command
  32.         ObjetCommand.Connection() = ObjetConnection
  33.         'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
  34.         ObjetDataAdapter.Fill(ObjetDataSet, table)
  35.         'Mettre dans un Objet DataTable une table du DataSet
  36.         ConnexionSQL = ObjetDataSet.Tables(table)
  37.     End Function
  38.     Public Function FermetureSQL()
  39.         ObjetConnection.Close()
  40.     End Function
  41. End Module


Message édité par Arwenalia le 04-05-2005 à 12:15:57
Reply

Marsh Posté le 04-05-2005 à 13:49:30    

Sinan a écrit :

Bonjour,
 
je vais commencer directement par mon code :
.
.
.
Si je met le code de la fonction directement dans mon sub, je n'ai aucun soucis, je récupére bien mes variables de la requête.
 
Mais je cherche à ne pas réecrire le code de connexion à chaque fois que j'ai besoin de faire un requête. Donc j'ai écrit la fonction de connexion, mais le script ne retrouve pas la variable CoBase. Comment puis je faire pour créer cette fonction de connexion qui sera appelée à chaque fois que j'ai besoin de faire une requete ? Faire une fonction "générique" de connexion.
 
je veux faire un espece d'include de l'ouverture et de la fermeture de connexion.
 
Quelqu'un a une idée ?
Merci :jap:


Salut,
 
Alors il y a plusieurs choses à considérer... Premièrement, ce n'est pas forcément très utile d'ouvrir et fermer la connexion à ta DB à chaque requête. Il serait plus logique de l'ouvrir au début de ton programme et de fermer la connexion à la fin de ton programme. Ca c'est une chose.
 
Ensuite, c'est normal que ton code de recherche ne connaisse pas la variable coBase puisqu'elle est déclarée dans le code d'une autre fonction! Il te faut réviser la question de la portée des variables :)
 
Pour ce qui est du code que tu as écrit pour le bouton rechercher... Hum, comment dire... Ne déclare jamais des variables au milieu de ton code, déclare les toujours au début de ta fonction/procédure. Et ceci juste pour plus de clarté dans la relecture de ton code... Et puis si VB te laisse le faire, ce n'est pas le cas de tout les autres langages. Donc prend tout de suite des bonnes habitudes!
 
Pour revenir à ton problème principal qui est la connexion à ta DB. Ce que je te propose c'est soit de définir une classe "connexion" que tu instancies à chaque fois que tu en as besoin. Comme ça tu auras accès à ta connexion... Autrement, ce que tu peux faire c'est de définir comme "public" à tout ton projet la variable de connexion. Et le tour est joué.
 
Mais dans les deux cas, je te propose tout de même de tenir compte de ce que je disais au début de mon message: ouvre une fois ta base au début de ton programme, ferme la une fois à la fin.

Reply

Marsh Posté le 04-05-2005 à 16:06:59    

Très bien, merci gfa pour ton message :jap:
 
Je vais tenter d'ouvrir et de fermer la base à l'ouverture et à la fermeture du programme.
Mais seulement, je ne comprend pas où, dans mon code, je peux faire ça, vu que tout est évenementiel.
 
Sinon, suffit t'il que je déclare mes variables et fonctions en 'public' pour que je n'ai pas de problèmes lors de l'appel de mes fonctions sql ?

Reply

Marsh Posté le 04-05-2005 à 16:24:25    

Sinan a écrit :

Très bien, merci gfa pour ton message :jap:
 
Je vais tenter d'ouvrir et de fermer la base à l'ouverture et à la fermeture du programme.
Mais seulement, je ne comprend pas où, dans mon code, je peux faire ça, vu que tout est évenementiel.
 
Sinon, suffit t'il que je déclare mes variables et fonctions en 'public' pour que je n'ai pas de problèmes lors de l'appel de mes fonctions sql ?


C'est pas parce que c'est de l'événementiel que ton programme n'as pas un début et une fin :) Il y a toujours un début et une fin :)
 
Tu as un événement Load dans les forms... Et quand tu ouvres le premier écran de ton programme, cet événement est forcément lancé... On peut considérer que c'est le début de ton programme. De la même manière, lorsque ton utilisateur ferme la première fenêtre de ton appli (celle où tu as mis le menu bien entendu...), l'événement Close est lancé... On peut donc considérer que c'est la fin de ton programme...
 
La déclaration de toutes tes variables et fonctions en "public" n'est pas du tout une bonne solution. Par contre, tu peux déclarer ta variable "coBase" en "public". La fonction ouvrant la connexion utilise cette variable mais elle est uniquement visible dans la form qui l'utilise. Si tu choisis d'ouvrir ta DB au début de ton programme et de la fermer à la fin, il n'y a que la variable connexion qui doit être publique...
 
Voilà, j'espère que cela va t'aider... Ah oui... Regarde peut-être un peu de doc sur la programmation... Tu m'as l'air d'être un peu perdu :)
 
A+

Reply

Marsh Posté le 04-05-2005 à 18:07:55    

oui j'y connais pas grand chose en VB, j'y suis depuis hier :D
 
Ca roule merci :jap:
 
Mon module :

Code :
  1. '--------------------------------------------------------------------
  2. '---------------------- Variables publiques  ------------------------
  3. '--------------------------------------------------------------------
  4. Public CoBase As Connection
  5. Public BibliBase As Command
  6. '--------------------------------------------------------------------
  7. '---------------- Fonction de connexion à SQL SERVER  ---------------
  8. '--------------------------------------------------------------------
  9. Public Function connexionSQL() As Boolean
  10.     Dim Server As String
  11.     Dim BDD As String
  12.     Dim User As String
  13.     Dim Password As String
  14.    
  15.     ' Paramètres de la base de données
  16.     Server = "MILOUSE"
  17.     BDD = "bibliotheque_vb"
  18.     User = "***"
  19.     Password = "***"
  20.          
  21.     ' Ecriture de la connexion
  22.     Set CoBase = New Connection
  23.     With CoBase
  24.         .ConnectionTimeout = 25
  25.         .Provider = "SQLOLEDB.1"
  26.         .Properties("Data Source" ).Value = Server
  27.         .Properties("Initial catalog" ).Value = BDD
  28.         .Properties("User ID" ).Value = User
  29.         .Properties("Password" ).Value = Password
  30.         .Open
  31.     End With
  32.         ' Lancement de la connexion
  33.     Set BibliBase = New Command
  34.     BibliBase.ActiveConnection = CoBase
  35. End Function
  36. '--------------------------------------------------------------------
  37. '--------------- Fonction deconnexion à SQL SERVER  -----------------
  38. '--------------------------------------------------------------------
  39. Public Function deconnexionSQL() As Boolean
  40.     Set BibliBase = Nothing
  41.     CoBase.Close
  42.     Set CoBase = Nothing
  43. End Function


 
Mon form :
 

Code :
  1. Option Explicit
  2. Private Sub Form_Load()
  3.     connexionSQL
  4. End Sub
  5. Private Sub Form_Unload(Cancel As Integer)
  6.     deconnexionSQL
  7. End Sub
  8. Private Sub CancelButton_Click()
  9.     ' Fermeture de la fenêtre
  10.     Unload ConsultOuModif_auteur
  11. End Sub
  12. Private Sub Command1_Click()
  13.      ' Recherche d'un auteur
  14.          Dim recherche As String
  15.          Dim nom As String
  16.          Dim resultRech As Recordset
  17.        
  18.          If BoxRechercheAuteur.Text <> "" Then
  19.              recherche = BoxRechercheAuteur.Text
  20.              ' Appel de la fonction de recherche
  21.                 ' Ecriture de la requete
  22.                 BibliBase.CommandText = "SELECT naissance FROM auteurs WHERE nom='riri';"
  23.                 ' Lancement de la requete
  24.                 Set resultRech = BibliBase.Execute
  25.                 ' Affectation des résultats de la requete aux Box
  26.                 BoxNaissanceAuteur.Text = resultRech!naissance
  27.    
  28.      Else
  29.          MsgBox ("Veuillez insérer le nom à rechercher" ), , "Attention"
  30.      End If
  31. End Sub


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed