Pb vb access

william the new Messages postés 27 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 24 juillet 2007 - 22 janv. 2005 à 13:26
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012 - 23 janv. 2005 à 15:02
Voila
je voudrais charger une combo box avec les données qui se trouve ds une table access

Dim rst_genre As ADODB.Recordset
Dim cnx As ADODB.Connection
Dim dsn_nom As String



Set cnx = New ADODB.Connection
dsn_nom = "base_divx"


With cnx
.ConnectionString = dsn_nom
.Open dsn_nom
End With

Set rst_genre = New ADODB.Recordset


rst_genre.Open "SELECT libelle FROM GENRE ", cnx


While Not (rst_genre.EOF)
Cmb_genre.AddItem rst_genre.Fields(0).Value
rst_genre.MoveNext
Wend
rst_genre.MoveFirst

et la il me dit que eof ou bof = vrai .
l'opération necessite l'enregistrement actuel
erreur 3021

si qqn à une idée d'ou pourrait provenir l'erreur ça m'aiderai

11 réponses

madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
22 janv. 2005 à 14:57
Il faut peut être un move first comme tu faists bien un move next

Tu force le curseur à se positionner sur le premier enregistrement il me semble

madbob
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
22 janv. 2005 à 15:06
Sinon comme ça ça marche très bien aussi :

Dim MaBase as database

Dim MonRS As Recordset




Set MaBase = OpenDatabase("c:\bases\mabase1.mdb", False, False, "MS ACCESS")

Set MonRS = MaBase.OpenRecordset("SELECT libelle as LIB FROM Mad_T_Tec;")



MonRS.MoveFirst "=> on positionne le curseur sur le premier fetch du recordset

While Not (MonRS.EOF)

Me.Combo1.AddItem MonRS!LIB

'* fetch suivant

MonRS.MoveNext

Wend



'* On revient au début

MonRS.MoveFirst

....

'* On libere le recordset

MonRS.Close

'* On libere l'instance de la base

MaBase.Close




madbob
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
22 janv. 2005 à 16:35
Salut,
S'il te met ce message d'erreur il est possible que tu n'ais pas d'enregistrement dans ton recordset.
Moi c'est ce rst_genre.Fields(0).Value qui m'interpelle

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
22 janv. 2005 à 17:40
C'est une bonne piste valtrase



Je viens de faire un sample sans move first et j'ai pas eu l'erreur que
j'attendais. Et comme j'ai pris la mauvaise habitude de lui laisser le
moins de choix possible...



Ta table n'est peut être pas chargée comme tu le crois... Oubli d'une validation de trasaction par exemple

madbob
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
22 janv. 2005 à 18:02
Je croyais que le no row found (SQL 100 sous Oracle) ramène un code
retour 3061 que je viens de reproduire avec une clause where pipo...
alors j'ai quand même des doutes



Alors j'ai modifier mon sample créer une connection ODBC et lancé ton
code avec une clause where pipo et même erreur la requête ne ramene pas
d'enregistrement,

Forcement le EOF permet de ne pas rentrer dans la boucle comme tu
demande au curseur de se positionner sur le premier enregistrement et
qu'il y en a pas...



parcontre je suis surpris de pas intercepter le code 3061... pas d'enregistrement



Bravo Valtrase


madbob
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
22 janv. 2005 à 18:06
Utilise la prochaine fois la propriété maxcount de ton rs tu éviteras ce genre de surprise...

madbob
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
23 janv. 2005 à 10:33
Pour ....rst_genre.Fields(0).Value 9, ça aussi il est vrai c'était pas très catho...



rst_genre.Fields.Item(0).Value plutôt ou rst_genre!libelle....

(0 étant l'index des colonnes dans l'ordre de ton select et non dans l'ordre des colonnes de ta table)


madbob
0
william the new Messages postés 27 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 24 juillet 2007
23 janv. 2005 à 13:23
g essaye rst_genre.fields.item(0).value
et ça ne change rien au problème, l'erreur y est tjs

mais je ne vois pas pkoi rst_genre.fields(0).value n'est pas correct
g tjs fait comme ça jusq'au présent à sa marché jusqu' a aujourd'hui

donc je me demande si il y a pas une option ou qqch ki fé que ça ne marche pas
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
23 janv. 2005 à 14:44
Tu as 2 problemes

1) Ta table est vide ça c'est sûr!

fait ça :






Set rst_genre = New ADODB.Recordse



rst_genre.Open "SELECT count( libelle) FROM GENRE ", cnx

msgbox
rst_genre.Fields.Item(0).Value
'pour t'en assurer si = 0 alors pas d'enregistrement



rst_genre.Close

rst_genre.Open "SELECT libelle FROM GENRE ", cnx


msgbox rst_genre.MaxRecords 'pour t'en assurer si = 0 alors pas d'enregistrement







2) Concernant la syntaxe ... j'ai repris texto la tienne est j'avais une belle erreur 424 avec l'ajout dans la combo un objet est requis... Alors j'ai un peu cherché. et j'ai pu vérifier que rst_genre.Fields.Item(0).Value fonctionne pour ajouter directement dans la combo.



madbob
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
23 janv. 2005 à 14:44
Salut,
j'ai pas vu ton code en entier mais à première vue tu ne renseignes pas le provider de ta connexion essayes cela

Dim rst_genre As ADODB.Recordset
Dim cnx As ADODB.Connection
Dim dsn_nom As String

Set cnx = New ADODB.Connection
dsn_nom = "base_divx"


With cnx
.Provider = "Microsoft.Jet.Oledb.3.51" '~~ Ou la version 4
.ConnectionString = dsn_nom
.Open <STRIKE>dsn_nom</STRIKE>
End With

Set rst_genre = New ADODB.Recordset


rst_genre.Open "SELECT libelle FROM GENRE ", cnx


While Not (rst_genre.EOF)
Cmb_genre.AddItem rst_genre.Fields(0).Value
rst_genre.MoveNext
Wend
rst_genre.MoveFirst

De plus dans ta requette je te conseille de faire un distinct pour eviter les doublons

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
madbob Messages postés 285 Date d'inscription dimanche 14 décembre 2003 Statut Membre Dernière intervention 13 mars 2012
23 janv. 2005 à 15:02
Cette partie ne pose pas de problème dans mon sample



With cnx

.ConnectionString = dsn_nom

.Open dsn_nom

End With




madbob
0
Rejoignez-nous