Renvoyer un OleDbDataReader
Bonsoir à tous =)
Je suis toujours dans la finition de mes projets pour mon BTS, je me heurte à un p'tit probleme.
J'ai réaliser un module qui va etre utiliser pour se connecter, fermer un base de données Access, mais aussi toute les actions comme les selects, les inserts, les deletes ...
Le Insert fonctionne correctement, je me heurte cependant a un p'tit probleme avec mon Select. Je voudrais pouvoir obtenir le resultat du reader utilisé dans ma fonction dans mon programme principal sans avoir a redéclarer tout mes objets de relatifs a la connexion et l'exploitation de ma BDD.
Mon module s'organise comme ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
Dim MyConnexion As New System.Data.OleDb.OleDbConnection()
Dim MyCommand As OleDbCommand = MyConnexion.CreateCommand()
Dim MyReader As OleDbDataReader = MyCommand.ExecuteReader
Public Sub ConnexionBDD(ByVal files_bdd As String)
Try
MyConnexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & files_bdd
MyConnexion.Open()
Catch ex As Exception
MessageBox.Show("Impossible d'établir la connection à la base." & ex.Message)
End Try
End Sub
'Select dans la base de données Access
Public Function SelectBDD(ByVal QuerySQL As String)
MyCommand.CommandText = QuerySQL
Return MyReader
End Function |
Je cherche depuis plusieurs minutes maintenant sans rien trouver réellement que je puisse comprendre ... Je fais donc appelle une nouvelle fois à vous :)
Merci d'avance :)
Bonne soirée (nuit)
mrocks
Retourner un DataReader... rectification
Salut mrocks,
Je viens de relire tes lignes de code et je crois bien que je me suis un peu trompé :oops:
en fait étant donné que ta commande, ta connexion et ton reader sont des variables globales à ta classe, tu n'as pas à déclarer ta commande au sein de ta fonction SelectBDD. Par contre, je te conseil de ne pas exécuter ton Command.ExecuteReader lors de la déclaration de ton Reader.
voilà plutôt ce que je te propose :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
Dim MyConnexion As New System.Data.OleDb.OleDbConnection()
Dim MyCommand As OleDbCommand = MyConnexion.CreateCommand()
Dim MyReader As OleDbDataReader
Public Shared Function SelectBDD( _
ByVal PARAM_STR_requeteSQL As String) _
As OleDbDataReader
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
'"" La fonction prend en paramètre la requête SQL
'"" (en format String) elle exécute la reqûête, 'stocke'
'"" le résultat dans un OleDbDataReader et le renvoie
'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
'"" on commence par tester l'état de la connexion (ouverte ou pas)
If MyConnexion.State = ConnectionState.Open Then
'"" si la connexion est ouverte
'"" on défini les paramètres de la commande
MyCommand.Connection = MyConnexion
MyCommand.CommandText = PARAM_STR_requeteSQL
Try
'"" on déclare un Reader
Dim ODBDR_retour As OleDbDataReader
'"" on exécute la requête
ODBDR_retour = MyCommand.ExecuteReader()
'"" on retourne le Reader
Return ODBDR_retour
Catch ex As Exception
'"" si l'execution de la requête plante
MsgBox("Problème de requête")
Return Nothing
End Try
Else
'"" si la connexion est fermée
'"" (il n'y a pas de raison, mais on ne sait jamais)
MsgBox("Connexion fermée")
Return Nothing
End If
End Function |
voilà...
Et après tu utilises la fonction pour remplir ton Reader :
Code:
1 2
|
MyReader = Nom_de_ma_classe.SelectBDD("SELECT * FROM Utilisateur") |
Bon... j'espère que ce sera mieux :roll:
A bientôt
toumou6