j'ai créé une BDD avec Access et j'utilise Excel + Vba pour venir
lire/écrire à l'interieur.
la BDD que j'ai créée s'appele "c:\echange\bd1.mdb"
Elle est constituée d'une table qui se nomme "Essai" et de trois champs
"Reference" (clef primaire) , "Valeur","Designation" de type string
j'ai remplie ma table avec 5 lignes de 3 elements :
"Réf1" "Val1" "Dés1"
"Réf2" "Val2" "Dés2"
"Réf3" "Val3" "Dés3"
"Réf4" "Val4" "Dés4"
"Réf7" "Val5" "Dés7"
Code:
Option Explicit
Public Type TypeElementTableStr
BDD As String
Table As String
Colonne As String
Element As String
End Type
Function RechercheUnElementString(ByRef MonElementStr As
TypeElementTableStr) As Collection
'recherche un element dans la BDD et renvoie la première ligne
associée
'tous les elements de la BDD doivent être de type string
'Elements entrant :
'BDD = location de la BDD (ex : c:\toto.mdb")
'Table = nom de la table dans laquel on veut faire la recherche
'Colonne = Nom de la colonne dans laquel on veut faire la recherche
'Element = chaine de caractère à rechercher
Dim MaRequete As String
Dim MonRecordset As ADODB.Recordset
Dim MaConnexion As New ADODB.Connection
Dim i As Integer
Dim MonMessageErreur As String
MaRequete = "SELECT * FROM " & MonElementStr.Table & " WHERE " &
MonElementStr.Colonne & "='" & MonElementStr.Element & "'"
Set MonRecordset = New ADODB.Recordset
Set MaConnexion = New ADODB.Connection
On Error GoTo RechercheUnElementFin
Set RechercheUnElementString = New Collection
'Définition du pilote de connexion (fournisseur)
MaConnexion.Provider = "Microsoft.Jet.Oledb.4.0"
'Définition de la chaîne de connexion : chemin complet du .mdb
MaConnexion.ConnectionString = MonElementStr.BDD
'Ouverture de la base de données
MaConnexion.Open "Data Source=" & MonElementStr.BDD
MonRecordset.Open MaRequete, MaConnexion
If MonRecordset.EOF And MonRecordset.EOF Then
MsgBox "Element introuvable !"
Else
'affiche l'element recherché
For i = 0 To MonRecordset.Fields.Count - 1
RechercheUnElementString.Add MonRecordset(i).Value
Next i
Set MaCollection = RechercheUnElementString(MonElementStr)
If Not (MaCollection.Count = 0) Then
For Each Element In MaCollection
MaChaine = MaChaine & Element & vbCr
Next Element
MsgBox (MaChaine)
End If
End Sub
la fonction MonRecordset.RecordCount ne fonctionne pas correctement : j'ai
comme résultat -1 : est-ce que ce bourt de code fonctionne chez vous ? de
quoi vient le probleme (tout le reste fonctionne) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
michdenis
Bonjour Emcy,
Pour pouvoir compter le nombre d'enregistrements dans un recordset, tu ne dois pas utiliser ce type de curseur "adOpenForwardOnly" qui est le curseur par détaut lorsque tu ne le spécifie pas dans ta ligne de commande. Il est le plus rapide... mais il est très limité !
Modifie ta ligne de commande : MonRecordset.Open MaRequete, MaConnexion
Un peu de lecture sur le sujet là : http://www.vb-faq.com/Articles/Greener/reccount.asp
Salutations!
"Emcy" a écrit dans le message de news: Bonjours,
j'ai créé une BDD avec Access et j'utilise Excel + Vba pour venir lire/écrire à l'interieur.
la BDD que j'ai créée s'appele "c:echangebd1.mdb" Elle est constituée d'une table qui se nomme "Essai" et de trois champs "Reference" (clef primaire) , "Valeur","Designation" de type string
j'ai remplie ma table avec 5 lignes de 3 elements : "Réf1" "Val1" "Dés1" "Réf2" "Val2" "Dés2" "Réf3" "Val3" "Dés3" "Réf4" "Val4" "Dés4" "Réf7" "Val5" "Dés7"
Code: Option Explicit
Public Type TypeElementTableStr BDD As String Table As String Colonne As String Element As String End Type
Function RechercheUnElementString(ByRef MonElementStr As TypeElementTableStr) As Collection 'recherche un element dans la BDD et renvoie la première ligne associée 'tous les elements de la BDD doivent être de type string
'Elements entrant : 'BDD = location de la BDD (ex : c:toto.mdb") 'Table = nom de la table dans laquel on veut faire la recherche 'Colonne = Nom de la colonne dans laquel on veut faire la recherche 'Element = chaine de caractère à rechercher
Dim MaRequete As String
Dim MonRecordset As ADODB.Recordset Dim MaConnexion As New ADODB.Connection
Dim i As Integer
Dim MonMessageErreur As String
MaRequete = "SELECT * FROM " & MonElementStr.Table & " WHERE " & MonElementStr.Colonne & "='" & MonElementStr.Element & "'"
Set MonRecordset = New ADODB.Recordset Set MaConnexion = New ADODB.Connection
On Error GoTo RechercheUnElementFin
Set RechercheUnElementString = New Collection
'Définition du pilote de connexion (fournisseur) MaConnexion.Provider = "Microsoft.Jet.Oledb.4.0"
'Définition de la chaîne de connexion : chemin complet du .mdb MaConnexion.ConnectionString = MonElementStr.BDD
'Ouverture de la base de données MaConnexion.Open "Data Source=" & MonElementStr.BDD
MonRecordset.Open MaRequete, MaConnexion
If MonRecordset.EOF And MonRecordset.EOF Then MsgBox "Element introuvable !" Else 'affiche l'element recherché For i = 0 To MonRecordset.Fields.Count - 1 RechercheUnElementString.Add MonRecordset(i).Value Next i
Set MaCollection = RechercheUnElementString(MonElementStr)
If Not (MaCollection.Count = 0) Then For Each Element In MaCollection MaChaine = MaChaine & Element & vbCr Next Element
MsgBox (MaChaine) End If
End Sub
la fonction MonRecordset.RecordCount ne fonctionne pas correctement : j'ai comme résultat -1 : est-ce que ce bourt de code fonctionne chez vous ? de quoi vient le probleme (tout le reste fonctionne) ?
Bonjour Emcy,
Pour pouvoir compter le nombre d'enregistrements dans un recordset, tu ne dois pas utiliser ce type de curseur "adOpenForwardOnly"
qui est le curseur par détaut lorsque tu ne le spécifie pas dans ta ligne de commande. Il est le plus rapide... mais il est très
limité !
Modifie ta ligne de commande :
MonRecordset.Open MaRequete, MaConnexion
Un peu de lecture sur le sujet là :
http://www.vb-faq.com/Articles/Greener/reccount.asp
Salutations!
"Emcy" <toto@bla.com> a écrit dans le message de news: uIiQhtI4FHA.3556@TK2MSFTNGP10.phx.gbl...
Bonjours,
j'ai créé une BDD avec Access et j'utilise Excel + Vba pour venir
lire/écrire à l'interieur.
la BDD que j'ai créée s'appele "c:echangebd1.mdb"
Elle est constituée d'une table qui se nomme "Essai" et de trois champs
"Reference" (clef primaire) , "Valeur","Designation" de type string
j'ai remplie ma table avec 5 lignes de 3 elements :
"Réf1" "Val1" "Dés1"
"Réf2" "Val2" "Dés2"
"Réf3" "Val3" "Dés3"
"Réf4" "Val4" "Dés4"
"Réf7" "Val5" "Dés7"
Code:
Option Explicit
Public Type TypeElementTableStr
BDD As String
Table As String
Colonne As String
Element As String
End Type
Function RechercheUnElementString(ByRef MonElementStr As
TypeElementTableStr) As Collection
'recherche un element dans la BDD et renvoie la première ligne
associée
'tous les elements de la BDD doivent être de type string
'Elements entrant :
'BDD = location de la BDD (ex : c:toto.mdb")
'Table = nom de la table dans laquel on veut faire la recherche
'Colonne = Nom de la colonne dans laquel on veut faire la recherche
'Element = chaine de caractère à rechercher
Dim MaRequete As String
Dim MonRecordset As ADODB.Recordset
Dim MaConnexion As New ADODB.Connection
Dim i As Integer
Dim MonMessageErreur As String
MaRequete = "SELECT * FROM " & MonElementStr.Table & " WHERE " &
MonElementStr.Colonne & "='" & MonElementStr.Element & "'"
Set MonRecordset = New ADODB.Recordset
Set MaConnexion = New ADODB.Connection
On Error GoTo RechercheUnElementFin
Set RechercheUnElementString = New Collection
'Définition du pilote de connexion (fournisseur)
MaConnexion.Provider = "Microsoft.Jet.Oledb.4.0"
'Définition de la chaîne de connexion : chemin complet du .mdb
MaConnexion.ConnectionString = MonElementStr.BDD
'Ouverture de la base de données
MaConnexion.Open "Data Source=" & MonElementStr.BDD
MonRecordset.Open MaRequete, MaConnexion
If MonRecordset.EOF And MonRecordset.EOF Then
MsgBox "Element introuvable !"
Else
'affiche l'element recherché
For i = 0 To MonRecordset.Fields.Count - 1
RechercheUnElementString.Add MonRecordset(i).Value
Next i
Set MaCollection = RechercheUnElementString(MonElementStr)
If Not (MaCollection.Count = 0) Then
For Each Element In MaCollection
MaChaine = MaChaine & Element & vbCr
Next Element
MsgBox (MaChaine)
End If
End Sub
la fonction MonRecordset.RecordCount ne fonctionne pas correctement : j'ai
comme résultat -1 : est-ce que ce bourt de code fonctionne chez vous ? de
quoi vient le probleme (tout le reste fonctionne) ?
Pour pouvoir compter le nombre d'enregistrements dans un recordset, tu ne dois pas utiliser ce type de curseur "adOpenForwardOnly" qui est le curseur par détaut lorsque tu ne le spécifie pas dans ta ligne de commande. Il est le plus rapide... mais il est très limité !
Modifie ta ligne de commande : MonRecordset.Open MaRequete, MaConnexion
Un peu de lecture sur le sujet là : http://www.vb-faq.com/Articles/Greener/reccount.asp
Salutations!
"Emcy" a écrit dans le message de news: Bonjours,
j'ai créé une BDD avec Access et j'utilise Excel + Vba pour venir lire/écrire à l'interieur.
la BDD que j'ai créée s'appele "c:echangebd1.mdb" Elle est constituée d'une table qui se nomme "Essai" et de trois champs "Reference" (clef primaire) , "Valeur","Designation" de type string
j'ai remplie ma table avec 5 lignes de 3 elements : "Réf1" "Val1" "Dés1" "Réf2" "Val2" "Dés2" "Réf3" "Val3" "Dés3" "Réf4" "Val4" "Dés4" "Réf7" "Val5" "Dés7"
Code: Option Explicit
Public Type TypeElementTableStr BDD As String Table As String Colonne As String Element As String End Type
Function RechercheUnElementString(ByRef MonElementStr As TypeElementTableStr) As Collection 'recherche un element dans la BDD et renvoie la première ligne associée 'tous les elements de la BDD doivent être de type string
'Elements entrant : 'BDD = location de la BDD (ex : c:toto.mdb") 'Table = nom de la table dans laquel on veut faire la recherche 'Colonne = Nom de la colonne dans laquel on veut faire la recherche 'Element = chaine de caractère à rechercher
Dim MaRequete As String
Dim MonRecordset As ADODB.Recordset Dim MaConnexion As New ADODB.Connection
Dim i As Integer
Dim MonMessageErreur As String
MaRequete = "SELECT * FROM " & MonElementStr.Table & " WHERE " & MonElementStr.Colonne & "='" & MonElementStr.Element & "'"
Set MonRecordset = New ADODB.Recordset Set MaConnexion = New ADODB.Connection
On Error GoTo RechercheUnElementFin
Set RechercheUnElementString = New Collection
'Définition du pilote de connexion (fournisseur) MaConnexion.Provider = "Microsoft.Jet.Oledb.4.0"
'Définition de la chaîne de connexion : chemin complet du .mdb MaConnexion.ConnectionString = MonElementStr.BDD
'Ouverture de la base de données MaConnexion.Open "Data Source=" & MonElementStr.BDD
MonRecordset.Open MaRequete, MaConnexion
If MonRecordset.EOF And MonRecordset.EOF Then MsgBox "Element introuvable !" Else 'affiche l'element recherché For i = 0 To MonRecordset.Fields.Count - 1 RechercheUnElementString.Add MonRecordset(i).Value Next i
Set MaCollection = RechercheUnElementString(MonElementStr)
If Not (MaCollection.Count = 0) Then For Each Element In MaCollection MaChaine = MaChaine & Element & vbCr Next Element
MsgBox (MaChaine) End If
End Sub
la fonction MonRecordset.RecordCount ne fonctionne pas correctement : j'ai comme résultat -1 : est-ce que ce bourt de code fonctionne chez vous ? de quoi vient le probleme (tout le reste fonctionne) ?