Ajout enregistrement sur ADODB.RecordSet

cs_Talere Messages postés 102 Date d'inscription vendredi 29 mars 2002 Statut Membre Dernière intervention 14 février 2013 - 24 mai 2006 à 13:28
cs_Talere Messages postés 102 Date d'inscription vendredi 29 mars 2002 Statut Membre Dernière intervention 14 février 2013 - 29 mai 2006 à 09:37
Bonjour,

J'ai un soucis lors du rajout d'un enregistrement à un recorset et j'ai une fausse erreur qui apparait :

    If RS_Valeur.AbsolutePosition < 1 Then
        RS_Valeur.AddNew
        RS_Valeur.Fields(1) = Grille.RowData(SelRow) 'exemple 62
        RS_Valeur.Fields(3) = Grille.ColData(SelCol) 'exemple5
    End If
    RS_Valeur.fields(5) = Txt_Grille.Text
    RS_Valeur.Update 'Erreur

a la ligne rouge, je n'ai pas vraiment une erreur, mais après, dès que j'essaie d'accéder à mon RS, j'ai une erreur non spécifiée.

Il faut savoir que :
le champs 0 est un numéro auto
les champs 1 et 3 est des références des tables liées
les champs 2 et 4 sont les noms des enregistrement des tables liées
le champ5 est tout simplement du texte.

Table M:
   ID (NumAuto et Clé primaire)
   Ref_T1 (Entier long)
   Ref_T2 (Entier long)
   Valeur

Table T1 et T2 :
   ID (NumAuto et Clé primaire)
   Nom

Mon RS recupère comme champs :
   M.ID, M.Ref_T1, T1.Nom, M.Ref_T2, T2.Nom
où M.Ref_T1 =T1.ID et M.Ref_T2=T2.ID

Mon problème doit provenir des champs 2 et 4, mais puisqu'il s'agit de champs automatique, je me dis que je n'ai pas besoin de les remplir du moment que les champs 1 et 3 exsite dans les tables liées. Est-ce que je me trompe ?

Merci pour votre aide ...

TALERE

2 réponses

erefdatacomputing Messages postés 165 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 24 avril 2018
28 mai 2006 à 00:14
Je pense que ton Pb est plus simple que cela !!
Si tu relis bien ton code, le  '.Update' est en dehors de la boucle, ce qui fait que quand RS_Valeur.AbsolutePosition est > à 1 ,  le prog saute le RS_Valeur.AddNew et il bute sur un '.Update' qui doit mettre à jour quelque chose qui n'est ni nouveau, ni modifié ??
Donc Plantage !!!

Ton code est le suivant:
--------------------------------------------------------------------------------------

If RS_Valeur.AbsolutePosition < 1 Then
        RS_Valeur.AddNew
        RS_Valeur.Fields(1) = Grille.RowData(SelRow) 'exemple 62
        RS_Valeur.Fields(3) = Grille.ColData(SelCol) 'exemple5
End If

    RS_Valeur.fields(5) = Txt_Grille.Text
    RS_Valeur.Update 'Erreur
 
-----------------------------------------------------------------------------------

Tu devras plutôt écrire:

If RS_Valeur.AbsolutePosition < 1 Then
        RS_Valeur.AddNew
        RS_Valeur.Fields(1) = Grille.RowData(SelRow) 'exemple 62
        RS_Valeur.Fields(3) = Grille.ColData(SelCol) 'exemple5
        RS_Valeur.Update
End If
   
If RS_Valeur.AbsolutePosition >= 1 Then
        RS_Valeur.AddNew  (ou  RS_Valeur.Edit (si tu veux modifier))
        RS_Valeur.fields(5) = Txt_Grille.Text
        RS_Valeur.Update
End If

--------------------------------------------------------------------------------------       
Voilà !!  J'espère que cela va t'aider !!!  à plus !!!

Je comprends vite mais il faut m'expliquer longtemps et tout en détails !!!
0
cs_Talere Messages postés 102 Date d'inscription vendredi 29 mars 2002 Statut Membre Dernière intervention 14 février 2013
29 mai 2006 à 09:37
Bonjour,

Concernant mon problème, je n'ai pas la fonction "Edit" disponible pour mon RecordSet ... quoi qu'il en soit, j'ai essayé de faire un update dans l'instruction if..endif mais le résultat était le même ... les champs 2 et 4 n'était pas mis à jour. je pense qu'ADODB.Recordset ne sait pas gérer les table liés. Peut-être faut-il envisager un recordset hierarchique mais là, j'ai pas el temps de m'y pencher. Ma solution a été d'ajouter l'enregistrement via SQL, de mettre à jour mon recordset (RS_Valeur.requery) et de pointer sur l'élément que je venais de créer.


Encore merci pour ton aide.


TALERE
0
Rejoignez-nous