élèment non trouvé dans cette collection

Signaler
Messages postés
56
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
9 décembre 2007
-
Messages postés
56
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
9 décembre 2007
-
    Bonsoir !

Je débute en BDD sous DAO, et j'ai une erreur que je ne saisi pas : "élèment non trouvé dans cette collection".

Mon fichier mdb contient seulement les tables "Mots", "Définition" et "Exemples", je ne sais pas si c'est pas dans ce fichier qu'il manque quelque chose...

Voici mon code :

----------
Private Sub cmdAdd_Click()
   'Déclarations.
   Dim datLexique  As Database
   Dim rstWord As Recordset
   Dim rstDef As Recordset
   Dim rstEx As Recordset
  
   'Ouverture de la BDD.
   Set datLexique = OpenDatabase("C:\Lexique.mdb")
   Set rstWord = datLexique.OpenRecordset("Mots")
   Set rstDef = datLexique.OpenRecordset("Définitions")
   Set rstEx = datLexique.OpenRecordset("Exemples")

   'On ajoute le mot.
   rstWord.AddNew
   rstWord![Mots] = txtWord.Text 'Et là, c'est le drame...
   rstWord.Update
 
   'On ajoute la définition.
   rstDef.AddNew
   rstDef![Def] = txtDef.Text
   rstDef.Update
 
   'On ajoute l'exemple.
   rstEx.AddNew
   rstEx![EX] = txtEx.Text
   rstEx.Update
 
   'On ferme entrées et BDD.
   rstWord.Close
   rstDef.Close
   rstEx.Close
   datLexique.Close
  
   'On vide.
   rstWord = Nothing
   rstDef = Nothing
   rstEx = Nothing
  
   'On vide les cases pour la propreté et on s'arrache.
   txtWord.Text = ""
   txtDef.Text = ""
   txtEx.Text = ""
End Sub
----------

Si quelqu'un a une idée du pourquoi ça bug...

Merci :)

14 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
peut-être rstWord("Mots") = txtWord.Text 'Et là, c'est le drame...
Mais ce n'est de toutes façons pas comme cela qu'on fait pour ajouter une ligne / changer la valeur d'un champ
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Et j'oubliais : utilise ADO, c'est plus récent et plus simple d'utilisation.
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
Messages postés
56
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
9 décembre 2007

J'ai pas arrêter de passer entre ADO et DAO a cause d'autre problème et maintenant j'aimerai rester en DAO, j'ai pas envie de me retaper la convertion du code une fois de plus :s

Je comprend pas l''histoire de ligne, en gros si on compare un BDD avec un fichier excel, le mdb c'est comme un fichier excel, une table c'est l'équivalent d'une feuille, et un champs celui d'une cellule ?

Il faudrai que je fasse quel code pour pouvoir ajouter une entrée dans chaque table et pouvoir ensuite la balancer dans un textbox ?
Messages postés
56
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
9 décembre 2007

Bon tous le monde semble s'accorder sur ce point donc je vais convertir en ADO...
Messages postés
56
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
9 décembre 2007

Voilà mon code en ADO :

Private Sub cmdAdd_Click()
   'Déclarations.
   Dim myCnx As New ADODB.Connection
   Dim rstWord As New ADODB.Recordset
   Dim rstDef As New ADODB.Recordset
   Dim rstEx As New ADODB.Recordset


   'Ouverture de la BDD.
   myCnx.Provider = "Microsoft.jet.OLEDB.4.0"
   myCnx.Open ("data source=C:\Lexique.mdb")
  
   'Affectation des tables aux recordsets.
   rstWord.Open "Mots", myCnx, adOpenDynamic
   rstDef.Open "Définitions", myCnx, adOpenDynamic
   rstEx.Open "Exemples", myCnx, adOpenDynamic
  
   'On ajoute le mot.
   rstWord.AddNew
   rstWord![Mots] = txtWord.Text
   rstWord.Update
 
   'On ajoute la définition.
   rstDef.AddNew
   rstDef![Def] = txtDef.Text
   rstDef.Update
 
   'On ajoute l'exemple.
   rstEx.AddNew
   rstEx![EX] = txtEx.Text
   rstEx.Update
  
   'On afficher dans la textbox d'une autre feuille le mots qu'on vient d'ajouter a la BDD.
   frmLearn.txtWord.Text = rstWord("Mots")
 
   'On ferme entrées et BDD.
   rstWord.Close
   rstDef.Close
   rstEx.Close
   myCnx.Close
     
   'On vide les cases pour la propreté et on s'arrache.
   txtWord.Text = ""
   txtDef.Text = ""
   txtEx.Text = ""
End Sub

Mais ça bug en me disant que ça ne prend pas en charge la mise a jour...
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
salut,
indique la ligne et donne nous la structure de tes tables!

voir ton précédent topic...

rstXXX![TABLE]=machin
il faut que TABLE existe !!
tu ajoutes un enregistrement à une table existante. si ce n'est pas le cas tu ne risque pas d'y parvenir

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
au fait....
pourquoi 3 tables?
un mot a 1 et 1 seule définition
un mot a 1 et 1 seul exemple

donc une seule table MOT => ID_Mot* (long_auto), Lib_Mot (str_50), Def_Mot (str_255), Exemple_Mot (str_512)<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
56
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
9 décembre 2007

    Oui effectivement pour chaque mot 1 définition et 1 exemple, enfin dans mon application en tout cas, mais j'ai trouvé un tuto sur le net disant qu'il vaut mieux une table pour chaque entrée mais si on peut faire plus simple je suis preneur !

Voici le bug :

Private Sub cmdAdd_Click()
   'Déclarations.
   Dim myCnx As New ADODB.Connection
   Dim rstWord As New ADODB.Recordset
   Dim rstDef As New ADODB.Recordset
   Dim rstEx As New ADODB.Recordset

   'Ouverture de la BDD.
   myCnx.Provider = "Microsoft.jet.OLEDB.4.0"
   myCnx.Open ("data source=C:\Lexique.mdb")
   
   'Affectation des tables aux recordsets.
   rstWord.Open "Mots", myCnx, adOpenDynamic
   rstDef.Open "Définitions", myCnx, adOpenDynamic
   rstEx.Open "Exemples", myCnx, adOpenDynamic
   
   'On ajoute le mot.
   rstWord.AddNew ("Mots")   'C'est là que ça bug... "Le jeux d'enregistrement ne peux mettre à jour...."
   rstWord![Mots] = txtWord.Text
   rstWord.Update
  [........]
End Sub


Ma base de donnée je l'ai créer avec un code que j'ai trouvé ici, je l'ai un poil modifier mais je pense que c'est ma table qui est mal structuré :

Const MA_BASE_ACCESS As String = "C:\Lexique.mdb"

Private Sub cmdCreer_Click()
   Dim db As DAO.Database
 
   'Création d'une base vide (plus simple tu meurs !)
   Set db = DAO.Workspaces(0).CreateDatabase(MA_BASE_ACCESS, dbLangGeneral)
   
   'Création d'une table avec une requête (simple non ?)
   db.Execute "CREATE  TABLE [Mots] ( [ColonneX] Text(50) );"
   db.Execute "CREATE  TABLE [Définitions] ( [ColonneX] Text(50) );"
   db.Execute "CREATE  TABLE [Exemples] ( [ColonneX] Text(50) );"
   
   
   'On crée une ligne dans cette table
   'db.Execute "INSERT INTO Mots ( ColonneX ) values ('');"
   
   'On crée une seconde ligne dans cette table
   'db.Execute "INSERT INTO TableY ( ColonneX ) values ('Une autre ligne');"
   
   'Referme la base proprement
   db.Close
   
   'Libère l'objet (très important et souvent oublié)
   Set db = Nothing

End Sub


J'ai garder que l'essentiel (peut-être a tort), le reste je l'ai mis en commentaire pour ne pas le supprimer bêtement.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
umm....
en tapant [F1] sur ADDNEW tu aurais trouvé ton erreur

bref
ICI tu trouveras une base propre, faite sous access 2000
et voici le code modifié! rappel : en ADO

Option Explicit
Dim myCnx As New ADODB.Connection
Dim myRst As New ADODB.Recordset
'
Private Sub Form_Load()
'   cnx à la
BDD
    myCnx.Provider = "Microsoft.jet.OLEDB.4.0"
    On Error Resume Next
    myCnx.Open ("data
source=C:\Lexique.mdb")
    If Not Err.Number = 0 Then
        MsgBox Err.Description, vbCritical
        Unload Me
    End If
End Sub
'
Private Sub Form_Unload(Cancel As Integer)
'   ferme et libère
    myRst.Cancel
    If Not myRst.State = adStateClosed Then
myRst.Close
    Set myRst = Nothing
    
    myCnx.Cancel
    If Not myCnx.State = adStateClosed Then
myCnx.Close
    Set myCnx = Nothing
End Sub
'
'
Private Sub cmdAdd_Click()
    With myRst
'       nouveau
recordset
        .Cancel
        If Not .State = adStateClosed Then
.Close
        Set myRst = New ADODB.Recordset
    
'       affectation de la table à
l'enregistrement
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
        .Open "MOTS", myCnx, , , adCmdTable
        .AddNew
        !Lib_Mot = txtWord.Text
        !Def_Mot = txtDef.Text
        !Exemp_Mot = txtEx.Text
        .Update
    End With

'   vide
champs
    txtWord.Text = vbNullString
    txtDef.Text = vbNullString
    txtEx.Text = vbNullString
End Sub

oh la jolie base.....

++
PCPT  [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
56
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
9 décembre 2007

    J'ai une version anglaise de VB et il manque plein de truc dessus, donc les fichiers d'aide :s
Mais quand j'aurai une version complète j'y penserai merci du tips ;)

Pour le code je l'ai integré mais il n'aime pas ton mdb, il arrive pas a le lire...

Est-ce que avec mon code mentionner ci dessus je pourrai faire la même ?
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
faire la même que quoi, que "il arrive pas a le lire" ?
beh c'est déjà le cas non? c'est bien l'objet de ton topic ^^

l'aide [F1] sur ADDNEW est lié à ADO, pas à VB6
donc version US sans aide çà fonctionnera sur les codes ADO
pis il te reste toujours l'aide en ligne (la MSDN)
http://msdn2.microsoft.com/fr-fr/library/default.aspx

as-tu bien mis ma base à la place de la tienne?
as-tu testé mon code dans un autre projet en référençant ADO 2.5 ?

ton code utilise et ADO et DAO....

tu as du tout cuit, un code qui fonctionne, une base structurée et même pré-remplie
je ne vois pas ce qu'on peut faire de plus...., à part venir chez toi pour faire un c/c

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
56
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
9 décembre 2007

Pour le fichier d'aide il me dit que le fichier est endommager donc bon...

Oui j'ai bien ma base a la place de la tienne c'est bien ça le problème, j'ai fais un autre topic sur ça, VB refuse de lire tout les mdb ! la solution trouvé (malgré toute les mises a jour et modification de code fait) fut de créer moi, via un code, un mdb mais encore faut il qu'il soit correctement créé par rapport a mon otre appli qui s'en sert.

Effectivement il ne me reste plus grand chose à faire sinon avoir une BDD que VB veux bien lire...

En faite si je comprend bien il me faut un mdb qui ne contient qu'une table avec 3 colonne et autant de ligne que de mots ?
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
refait une install complète...
(VB et ADO ! )
normal que çà ne marche pas avec des fichiers endommagés

tu les cumules dit donc...
entre çà et des bases de données crées en renommant un txt, tu dois avoir un moral en béton

En faite si je comprend bien il me faut un mdb qui ne contient qu'une table avec 3 colonne et autant de ligne que de mots ?
voir la capture précédente et mon commentaire juste avant...
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
56
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
9 décembre 2007

    Ouai c'est prevu j'attend une version de VB6 pro qui devrait plus tardé la je cardbure avec un mélange de VB5 et de VB6 (tu verrai la magouille...).

A fond toujours partout mais je crois que je vais finir par payer quelqu'un pour me faire cette appli elle était censé de me faire gagner du temps -_-