Voici un code qui, lorsque le recordset est: Set rs =
maBD.OpenRecordset("tblCD")
J'ai toutes les données qui s'inscrivent dans le msFleshGrid, par contre,
lorsque je remplace tblCD par le SQL, rien ne s'affiche, je ne comprends.
Il ya des zip(trois) dans la table.
Private Sub Form_Load()
Dim maBD As Database
Dim rs As Recordset
Dim sPath As String
Dim monSQL As String, critère As String
critère = ".zip"
sPath = App.Path & "\EncodageCD.mdb"
Set maBD = DBEngine.OpenDatabase(sPath)
'Set rs = maBD.OpenRecordset("tblCD")
monSQL = "SELECT * FROM tblCD WHERE right(tblCD.File_Name,4) Like '" &
critère & "%'"
Set rs = maBD.OpenRecordset(monSQL)
Set Data1.Recordset = rs
Me.Text1.Text = rs.RecordCount & " " & "enr."
End Sub
Si quelqu'un pouvait m'aider, cela m'arrangerait fortement.
D'avance merci,
Qu'entends-tu par aucun enregistrement ? La valeur de la propriété RecordCount ?
Il faut éventuellement suivant le mode de connexion (ADO ou DAO) faire un movelast pour remplir le recordset car si en adodc tu disposes instantanément du nb d'enregistrements contenus dans le recordset, ce n'est pas le cas avec Jet.
Je ne sais pas si c'était la réponse que tu attendais ...
Gloops a écrit :
Bonjour,
Puisqu'apparemment la réponse est trouvée, je vais profiter de ce fil pour poser une question sur un sujet proche.
DB contient une table AdressePostale, avec quelques enregistrements.
Je n'ai aucun enregistrement sur Set Rs = DB.OpenRecordset("AdressePostale")
alors que j'en ai plusieurs sur Set RS = DB.OpenRecordset("SELECT * FROM AdressePostale")
Ma tête un peu capricieuse me dit que ça n'a pas toujours été, elle se trompe ?
-- A+ Eric Un petit tour ici : http://users.skynet.be/mpfa/ Accès aux archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Bonjour Gloops,
Qu'entends-tu par aucun enregistrement ? La valeur de la propriété
RecordCount ?
Il faut éventuellement suivant le mode de connexion (ADO ou DAO) faire
un movelast pour remplir le recordset car si en adodc tu disposes
instantanément du nb d'enregistrements contenus dans le recordset, ce
n'est pas le cas avec Jet.
Je ne sais pas si c'était la réponse que tu attendais ...
Gloops a écrit :
Bonjour,
Puisqu'apparemment la réponse est trouvée, je vais profiter de ce fil
pour poser une question sur un sujet proche.
DB contient une table AdressePostale, avec quelques enregistrements.
Je n'ai aucun enregistrement sur
Set Rs = DB.OpenRecordset("AdressePostale")
alors que j'en ai plusieurs sur
Set RS = DB.OpenRecordset("SELECT * FROM AdressePostale")
Ma tête un peu capricieuse me dit que ça n'a pas toujours été, elle se
trompe ?
--
A+
Eric
Un petit tour ici : http://users.skynet.be/mpfa/
Accès aux archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Qu'entends-tu par aucun enregistrement ? La valeur de la propriété RecordCount ?
Il faut éventuellement suivant le mode de connexion (ADO ou DAO) faire un movelast pour remplir le recordset car si en adodc tu disposes instantanément du nb d'enregistrements contenus dans le recordset, ce n'est pas le cas avec Jet.
Je ne sais pas si c'était la réponse que tu attendais ...
Gloops a écrit :
Bonjour,
Puisqu'apparemment la réponse est trouvée, je vais profiter de ce fil pour poser une question sur un sujet proche.
DB contient une table AdressePostale, avec quelques enregistrements.
Je n'ai aucun enregistrement sur Set Rs = DB.OpenRecordset("AdressePostale")
alors que j'en ai plusieurs sur Set RS = DB.OpenRecordset("SELECT * FROM AdressePostale")
Ma tête un peu capricieuse me dit que ça n'a pas toujours été, elle se trompe ?
-- A+ Eric Un petit tour ici : http://users.skynet.be/mpfa/ Accès aux archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Gloops
Bonjour Eric,
A moins que je neuneute, il me semble qu'à l'ouverture d'un jeu d'enregistrements (en Jet) RecordCount comptabilise l'enregistrement courant si il existe, et est donc dans ce cas à 1.
Si on fait un MoveLast alors que RecordCount vaut 0, on se déplace dans le vide : Rs.RecordCount n'a pas créé d'enregistrement, et vaut toujours 0.
Je viens d'essayer, de mémoire j'aurais dit que MoveLast générait une erreur si il n'y avait pas d'enregistrement. Peut-être bien que ça dépend d'autres facteurs d'ailleurs, ou alors j'ai rêvé une erreur sur un Rs.MoveLast lorsqu'il n'y avait pas d'enregistrement. ça ne doit pas être le type de jeu, je viens d'essayer Set Rs = DB.TableDefs("AdressePostale").OpenRecordset(), il ne trouve pas d'enregistrement (avec ou sans Rs.MoveLast) alors qu'il y en a.
Bref, à l'ouverture d'un jeu d'enregistrements Jet, on peut avoir aucun enregistrement, ou plein d'enregistrements. Plein d'enregistrements se nuance par MoveLast, alors qu'aucun enregistrement ne peut se modifier que par Rs.Add : 'modification des champs obligatoires : Rs.Update (et encore seulement avec les droits d'écriture).
Seulement là, je pensais être dans le deuxième cas de figure (plein d'enregistrements -> Rs.RecordCount = 1), et je suis dans le premier (aucun enregistrement -> Rs.RecordCount = 0)
J'ai dit une bêtise ? Ou fait une bêtise ?
Eric a écrit, le 17/05/2005 13:48 :
Bonjour Gloops,
Qu'entends-tu par aucun enregistrement ? La valeur de la propriété RecordCount ?
Il faut éventuellement suivant le mode de connexion (ADO ou DAO) faire un movelast pour remplir le recordset car si en adodc tu disposes instantanément du nb d'enregistrements contenus dans le recordset, ce n'est pas le cas avec Jet.
Je ne sais pas si c'était la réponse que tu attendais ...
Gloops a écrit :
Bonjour,
Puisqu'apparemment la réponse est trouvée, je vais profiter de ce fil pour poser une question sur un sujet proche.
DB contient une table AdressePostale, avec quelques enregistrements.
Je n'ai aucun enregistrement sur Set Rs = DB.OpenRecordset("AdressePostale")
alors que j'en ai plusieurs sur Set RS = DB.OpenRecordset("SELECT * FROM AdressePostale")
Ma tête un peu capricieuse me dit que ça n'a pas toujours été, elle se trompe ?
Bonjour Eric,
A moins que je neuneute, il me semble qu'à l'ouverture d'un jeu
d'enregistrements (en Jet) RecordCount comptabilise l'enregistrement
courant si il existe, et est donc dans ce cas à 1.
Si on fait un MoveLast alors que RecordCount vaut 0, on se déplace dans
le vide : Rs.RecordCount n'a pas créé d'enregistrement, et vaut toujours 0.
Je viens d'essayer, de mémoire j'aurais dit que MoveLast générait une
erreur si il n'y avait pas d'enregistrement. Peut-être bien que ça
dépend d'autres facteurs d'ailleurs, ou alors j'ai rêvé une erreur sur
un Rs.MoveLast lorsqu'il n'y avait pas d'enregistrement. ça ne doit pas
être le type de jeu, je viens d'essayer
Set Rs = DB.TableDefs("AdressePostale").OpenRecordset(),
il ne trouve pas d'enregistrement (avec ou sans Rs.MoveLast) alors qu'il
y en a.
Bref, à l'ouverture d'un jeu d'enregistrements Jet, on peut avoir aucun
enregistrement, ou plein d'enregistrements. Plein d'enregistrements se
nuance par MoveLast, alors qu'aucun enregistrement ne peut se modifier
que par Rs.Add : 'modification des champs obligatoires : Rs.Update (et
encore seulement avec les droits d'écriture).
Seulement là, je pensais être dans le deuxième cas de figure (plein
d'enregistrements -> Rs.RecordCount = 1), et je suis dans le premier
(aucun enregistrement -> Rs.RecordCount = 0)
J'ai dit une bêtise ? Ou fait une bêtise ?
Eric a écrit, le 17/05/2005 13:48 :
Bonjour Gloops,
Qu'entends-tu par aucun enregistrement ? La valeur de la propriété
RecordCount ?
Il faut éventuellement suivant le mode de connexion (ADO ou DAO) faire
un movelast pour remplir le recordset car si en adodc tu disposes
instantanément du nb d'enregistrements contenus dans le recordset, ce
n'est pas le cas avec Jet.
Je ne sais pas si c'était la réponse que tu attendais ...
Gloops a écrit :
Bonjour,
Puisqu'apparemment la réponse est trouvée, je vais profiter de ce fil
pour poser une question sur un sujet proche.
DB contient une table AdressePostale, avec quelques enregistrements.
Je n'ai aucun enregistrement sur
Set Rs = DB.OpenRecordset("AdressePostale")
alors que j'en ai plusieurs sur
Set RS = DB.OpenRecordset("SELECT * FROM AdressePostale")
Ma tête un peu capricieuse me dit que ça n'a pas toujours été, elle se
trompe ?
A moins que je neuneute, il me semble qu'à l'ouverture d'un jeu d'enregistrements (en Jet) RecordCount comptabilise l'enregistrement courant si il existe, et est donc dans ce cas à 1.
Si on fait un MoveLast alors que RecordCount vaut 0, on se déplace dans le vide : Rs.RecordCount n'a pas créé d'enregistrement, et vaut toujours 0.
Je viens d'essayer, de mémoire j'aurais dit que MoveLast générait une erreur si il n'y avait pas d'enregistrement. Peut-être bien que ça dépend d'autres facteurs d'ailleurs, ou alors j'ai rêvé une erreur sur un Rs.MoveLast lorsqu'il n'y avait pas d'enregistrement. ça ne doit pas être le type de jeu, je viens d'essayer Set Rs = DB.TableDefs("AdressePostale").OpenRecordset(), il ne trouve pas d'enregistrement (avec ou sans Rs.MoveLast) alors qu'il y en a.
Bref, à l'ouverture d'un jeu d'enregistrements Jet, on peut avoir aucun enregistrement, ou plein d'enregistrements. Plein d'enregistrements se nuance par MoveLast, alors qu'aucun enregistrement ne peut se modifier que par Rs.Add : 'modification des champs obligatoires : Rs.Update (et encore seulement avec les droits d'écriture).
Seulement là, je pensais être dans le deuxième cas de figure (plein d'enregistrements -> Rs.RecordCount = 1), et je suis dans le premier (aucun enregistrement -> Rs.RecordCount = 0)
J'ai dit une bêtise ? Ou fait une bêtise ?
Eric a écrit, le 17/05/2005 13:48 :
Bonjour Gloops,
Qu'entends-tu par aucun enregistrement ? La valeur de la propriété RecordCount ?
Il faut éventuellement suivant le mode de connexion (ADO ou DAO) faire un movelast pour remplir le recordset car si en adodc tu disposes instantanément du nb d'enregistrements contenus dans le recordset, ce n'est pas le cas avec Jet.
Je ne sais pas si c'était la réponse que tu attendais ...
Gloops a écrit :
Bonjour,
Puisqu'apparemment la réponse est trouvée, je vais profiter de ce fil pour poser une question sur un sujet proche.
DB contient une table AdressePostale, avec quelques enregistrements.
Je n'ai aucun enregistrement sur Set Rs = DB.OpenRecordset("AdressePostale")
alors que j'en ai plusieurs sur Set RS = DB.OpenRecordset("SELECT * FROM AdressePostale")
Ma tête un peu capricieuse me dit que ça n'a pas toujours été, elle se trompe ?
Eric
Re,
Oui effectivement si le jeu est vide et qu'on fait un MoveLast on a, en général, une erreur "Aucun enregistrement en cours" , d'où la nécessité de tester rs.BOF .
Je viens de faire un petit test (Ref DAO 3.6 chargée).
Private Sub Command1_Click() Dim bd As Database, rs As Recordset, strSQL As String Set bd = OpenDatabase(App.Path & "donnees.mdb") Set rs = bd.OpenRecordset("LaTable") Debug.Print rs.RecordCount <<<--------- 62 (nb exact) rs.Close strSQL = "select * from LaTable" Set rs = bd.OpenRecordset(strSQL) Debug.Print rs.RecordCount <<<--------- 1 If Not rs.BOF Then rs.MoveLast Debug.Print rs.RecordCount <<<--------- 62 End If rs.Close Set rs = Nothing Set bd = Nothing End Sub
j'en déduis: Ouverture d'un jeu de type table, RecordCount retourne le nb exact d'enregistrements. Ouverture avec un chaine sql, RecordCount me donne 0 ou 1 suivant que le jeu contient ou non des enregistrements
Donc, en conclusion, je n'ai pas de réponse à ta question initiale : "Ma tête un peu capricieuse me dit que ça n'a pas toujours été, elle se trompe ? " mais une nouvelle interrogation ;-)
A+ Eric
Re,
Oui effectivement si le jeu est vide et qu'on fait un MoveLast on a, en
général, une erreur "Aucun enregistrement en cours" , d'où la nécessité
de tester rs.BOF .
Je viens de faire un petit test (Ref DAO 3.6 chargée).
Private Sub Command1_Click()
Dim bd As Database, rs As Recordset, strSQL As String
Set bd = OpenDatabase(App.Path & "donnees.mdb")
Set rs = bd.OpenRecordset("LaTable")
Debug.Print rs.RecordCount <<<--------- 62 (nb exact)
rs.Close
strSQL = "select * from LaTable"
Set rs = bd.OpenRecordset(strSQL)
Debug.Print rs.RecordCount <<<--------- 1
If Not rs.BOF Then
rs.MoveLast
Debug.Print rs.RecordCount <<<--------- 62
End If
rs.Close
Set rs = Nothing
Set bd = Nothing
End Sub
j'en déduis:
Ouverture d'un jeu de type table, RecordCount retourne le nb exact
d'enregistrements.
Ouverture avec un chaine sql, RecordCount me donne 0 ou 1 suivant que le
jeu contient ou non des enregistrements
Donc, en conclusion, je n'ai pas de réponse à ta question initiale :
"Ma tête un peu capricieuse me dit que ça n'a pas toujours été,
elle se trompe ? "
mais une nouvelle interrogation ;-)
Oui effectivement si le jeu est vide et qu'on fait un MoveLast on a, en général, une erreur "Aucun enregistrement en cours" , d'où la nécessité de tester rs.BOF .
Je viens de faire un petit test (Ref DAO 3.6 chargée).
Private Sub Command1_Click() Dim bd As Database, rs As Recordset, strSQL As String Set bd = OpenDatabase(App.Path & "donnees.mdb") Set rs = bd.OpenRecordset("LaTable") Debug.Print rs.RecordCount <<<--------- 62 (nb exact) rs.Close strSQL = "select * from LaTable" Set rs = bd.OpenRecordset(strSQL) Debug.Print rs.RecordCount <<<--------- 1 If Not rs.BOF Then rs.MoveLast Debug.Print rs.RecordCount <<<--------- 62 End If rs.Close Set rs = Nothing Set bd = Nothing End Sub
j'en déduis: Ouverture d'un jeu de type table, RecordCount retourne le nb exact d'enregistrements. Ouverture avec un chaine sql, RecordCount me donne 0 ou 1 suivant que le jeu contient ou non des enregistrements
Donc, en conclusion, je n'ai pas de réponse à ta question initiale : "Ma tête un peu capricieuse me dit que ça n'a pas toujours été, elle se trompe ? " mais une nouvelle interrogation ;-)
A+ Eric
Gloops
Au moins, tu as des résultats avec une certaine cohérence. Un nombre d'enregistrements correct à l'ouverture, OK, pratique même, mais 0 à l'ouverture alors que la table contient des enregistrements, j'avoue que je suis un peu perplexe.
Bon, je mets SELECT * FROM, et ça marche, donc ce n'est pas bloquant, mais je trouve que ça demeure bizarre.
J'ai aussi 0 avec Set Rs = DB.TableDefs("AdressePostale").OpenRecordset(dbOpenTable)
ça doit dépendre d'une des propriétés de la base ou de la table, un peu plus tard il faudra que je creuse. A moins que d'ici là quelqu'un ait la réponse ...
Merci d'avoir cherché.
Eric a écrit, le 17/05/2005 16:39 :
Re,
Oui effectivement si le jeu est vide et qu'on fait un MoveLast on a, en général, une erreur "Aucun enregistrement en cours" , d'où la nécessité de tester rs.BOF .
Je viens de faire un petit test (Ref DAO 3.6 chargée).
Private Sub Command1_Click() Dim bd As Database, rs As Recordset, strSQL As String Set bd = OpenDatabase(App.Path & "donnees.mdb") Set rs = bd.OpenRecordset("LaTable") Debug.Print rs.RecordCount <<<--------- 62 (nb exact) rs.Close strSQL = "select * from LaTable" Set rs = bd.OpenRecordset(strSQL) Debug.Print rs.RecordCount <<<--------- 1 If Not rs.BOF Then rs.MoveLast Debug.Print rs.RecordCount <<<--------- 62 End If rs.Close Set rs = Nothing Set bd = Nothing End Sub
j'en déduis: Ouverture d'un jeu de type table, RecordCount retourne le nb exact d'enregistrements. Ouverture avec un chaine sql, RecordCount me donne 0 ou 1 suivant que le jeu contient ou non des enregistrements
Donc, en conclusion, je n'ai pas de réponse à ta question initiale : "Ma tête un peu capricieuse me dit que ça n'a pas toujours été, elle se trompe ? " mais une nouvelle interrogation ;-)
A+ Eric
Au moins, tu as des résultats avec une certaine cohérence.
Un nombre d'enregistrements correct à l'ouverture, OK, pratique même,
mais 0 à l'ouverture alors que la table contient des enregistrements,
j'avoue que je suis un peu perplexe.
Bon, je mets SELECT * FROM, et ça marche, donc ce n'est pas bloquant,
mais je trouve que ça demeure bizarre.
J'ai aussi 0 avec
Set Rs = DB.TableDefs("AdressePostale").OpenRecordset(dbOpenTable)
ça doit dépendre d'une des propriétés de la base ou de la table, un peu
plus tard il faudra que je creuse. A moins que d'ici là quelqu'un ait la
réponse ...
Merci d'avoir cherché.
Eric a écrit, le 17/05/2005 16:39 :
Re,
Oui effectivement si le jeu est vide et qu'on fait un MoveLast on a, en
général, une erreur "Aucun enregistrement en cours" , d'où la nécessité
de tester rs.BOF .
Je viens de faire un petit test (Ref DAO 3.6 chargée).
Private Sub Command1_Click()
Dim bd As Database, rs As Recordset, strSQL As String
Set bd = OpenDatabase(App.Path & "donnees.mdb")
Set rs = bd.OpenRecordset("LaTable")
Debug.Print rs.RecordCount <<<--------- 62 (nb exact)
rs.Close
strSQL = "select * from LaTable"
Set rs = bd.OpenRecordset(strSQL)
Debug.Print rs.RecordCount <<<--------- 1
If Not rs.BOF Then
rs.MoveLast
Debug.Print rs.RecordCount <<<--------- 62
End If
rs.Close
Set rs = Nothing
Set bd = Nothing
End Sub
j'en déduis:
Ouverture d'un jeu de type table, RecordCount retourne le nb exact
d'enregistrements.
Ouverture avec un chaine sql, RecordCount me donne 0 ou 1 suivant que le
jeu contient ou non des enregistrements
Donc, en conclusion, je n'ai pas de réponse à ta question initiale :
"Ma tête un peu capricieuse me dit que ça n'a pas toujours été,
elle se trompe ? "
mais une nouvelle interrogation ;-)
Au moins, tu as des résultats avec une certaine cohérence. Un nombre d'enregistrements correct à l'ouverture, OK, pratique même, mais 0 à l'ouverture alors que la table contient des enregistrements, j'avoue que je suis un peu perplexe.
Bon, je mets SELECT * FROM, et ça marche, donc ce n'est pas bloquant, mais je trouve que ça demeure bizarre.
J'ai aussi 0 avec Set Rs = DB.TableDefs("AdressePostale").OpenRecordset(dbOpenTable)
ça doit dépendre d'une des propriétés de la base ou de la table, un peu plus tard il faudra que je creuse. A moins que d'ici là quelqu'un ait la réponse ...
Merci d'avoir cherché.
Eric a écrit, le 17/05/2005 16:39 :
Re,
Oui effectivement si le jeu est vide et qu'on fait un MoveLast on a, en général, une erreur "Aucun enregistrement en cours" , d'où la nécessité de tester rs.BOF .
Je viens de faire un petit test (Ref DAO 3.6 chargée).
Private Sub Command1_Click() Dim bd As Database, rs As Recordset, strSQL As String Set bd = OpenDatabase(App.Path & "donnees.mdb") Set rs = bd.OpenRecordset("LaTable") Debug.Print rs.RecordCount <<<--------- 62 (nb exact) rs.Close strSQL = "select * from LaTable" Set rs = bd.OpenRecordset(strSQL) Debug.Print rs.RecordCount <<<--------- 1 If Not rs.BOF Then rs.MoveLast Debug.Print rs.RecordCount <<<--------- 62 End If rs.Close Set rs = Nothing Set bd = Nothing End Sub
j'en déduis: Ouverture d'un jeu de type table, RecordCount retourne le nb exact d'enregistrements. Ouverture avec un chaine sql, RecordCount me donne 0 ou 1 suivant que le jeu contient ou non des enregistrements
Donc, en conclusion, je n'ai pas de réponse à ta question initiale : "Ma tête un peu capricieuse me dit que ça n'a pas toujours été, elle se trompe ? " mais une nouvelle interrogation ;-)