Requête UPDATE

Résolu
cs_monaco63 Messages postés 76 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 15 juin 2009 - 24 juil. 2007 à 13:51
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 25 juil. 2007 à 16:53
Bonjour,

Je souhaiterai modifier un enregistrement dans une colonne sans modifier les autres
Voici mon bout de code




Set DB1 = DBEngine(0)(0)
Set RS1 = DB1.OpenRecordset("03_req_Resultat_1") 'Permet d'utiliser les enregistrements de tb_Resultat_1
Set RS2 = DB1.OpenRecordset("04_req_SauvegardeTemporaire") 'Permet d'obtenir le n° Opération Transfert
Set RS3 = DB1.OpenRecordset("02_ReqPourResultat") 'REQUETE A MODIFIER 'Requête qui en fonction de l'operation depotage prend la date la plus ancienne

RS1.MoveFirst 'tb_Resultat_1
RS2.MoveFirst 'tb_SauvegardeTemporaire

'RS1
MsgBox (Trim(RS1.Fields("NumOperationTransfert")))
'RS2
MsgBox (Trim(RS2.Fields("NumOperationTransfert")))

Do Until RS2.EOF
Do Until RS1.EOF
'Si le N°opération de tb_Resultat_1 <> N°opération de tb_SauvegardeTemporaire
If Trim(RS1.Fields("NumOperationTransfert")) = Trim(RS2.Fields("NumOperationTransfert")) Then
'On ajoute :
'Non : si l'operation transfert non exclus
'Oui : si l'operation transfert exclus
SQL "UPDATE tb_Resultat_1 SET recoup_used 'oui' " & _
"WHERE (" & Trim(RS1.Fields("NumOperationTransfert")) = Trim(RS2.Fields("NumOperationTransfert")) & ")"


DoCmd.SetWarnings False
DoCmd.RunSQL SQL

'Ensuite on passe à l'enregistrement suivant
RS1.MoveNext
ElseIf Trim(RS1.Fields("NumOperationTransfert")) <> Trim(RS2.Fields("NumOperationTransfert")) Then
SQL "UPDATE tb_Resultat_1 SET recoup_used 'non'" & _
"WHERE (" & Trim(RS1.Fields("NumOperationTransfert")) <> Trim(RS2.Fields("NumOperationTransfert")) & ")"

DoCmd.SetWarnings False
DoCmd.RunSQL SQL

'On passe à l'enregistrement suivant
RS1.MoveNext
End If
Loop
RS1.MoveFirst
RS2.MoveNext
Loop

RS2.Close
RS1.Close





Ma variable SQL prend la valeur "Vrai" et un message d'erreur me dit qu'il attend soit un SELECT, UPDATE, etc.

Aidez moi à trouver et/ ou à corriger mon erreur, merci d'avance

9 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 juil. 2007 à 16:53
t'embete pas :

If Trim(RS1.Fields("recoup_used")) = "a" Then
RS1.Edit
RS1.Fields("recoup_used") = "non"
RS1.Update
End If
3
cs_monaco63 Messages postés 76 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 15 juin 2009
24 juil. 2007 à 13:53
Bonjour,

Je souhaiterai modifier un enregistrement dans une colonne sans modifier les autres
Voici mon bout de code



Set DB1 = DBEngine(0)(0)
Set RS1 = DB1.OpenRecordset("03_req_Resultat_1") 'Permet d'utiliser les enregistrements de tb_Resultat_1
Set RS2 = DB1.OpenRecordset("04_req_SauvegardeTemporaire") 'Permet d'obtenir le n° Opération Transfert
Set RS3 = DB1.OpenRecordset("02_ReqPourResultat") 'REQUETE A MODIFIER 'Requête qui en fonction de l'operation depotage prend la date la plus ancienne

RS1.MoveFirst 'tb_Resultat_1
RS2.MoveFirst 'tb_SauvegardeTemporaire

'RS1
MsgBox (Trim(RS1.Fields("NumOperationTransfert")))
'RS2
MsgBox (Trim(RS2.Fields("NumOperationTransfert")))

Do Until RS2.EOF
Do Until RS1.EOF
'Si le N°opération de tb_Resultat_1 <> N°opération de tb_SauvegardeTemporaire
If Trim(RS1.Fields("NumOperationTransfert")) = Trim(RS2.Fields("NumOperationTransfert")) Then
'On ajoute :
'Non : si l'operation transfert non exclus
'Oui : si l'operation transfert exclus
SQL "UPDATE tb_Resultat_1 SET recoup_used 'oui' " & _
"WHERE (" & Trim(RS1.Fields("NumOperationTransfert")) = Trim(RS2.Fields("NumOperationTransfert")) & ")"


DoCmd.SetWarnings False
DoCmd.RunSQL SQL

'Ensuite on passe à l'enregistrement suivant
RS1.MoveNext
ElseIf Trim(RS1.Fields("NumOperationTransfert")) <> Trim(RS2.Fields("NumOperationTransfert")) Then
SQL "UPDATE tb_Resultat_1 SET recoup_used 'non'" & _
"WHERE (" & Trim(RS1.Fields("NumOperationTransfert")) <> Trim(RS2.Fields("NumOperationTransfert")) & ")"

DoCmd.SetWarnings False
DoCmd.RunSQL SQL

'On passe à l'enregistrement suivant
RS1.MoveNext
End If
Loop
RS1.MoveFirst
RS2.MoveNext
Loop

RS2.Close
RS1.Close



Ma variable SQl prend la valeur "Vrai" et un message d'erreur me dit qu'il attend soit un SELECT, UPDATE, etc.

Aidez moi à trouver et/ ou à corriger mon erreur, merci d'avance
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
24 juil. 2007 à 14:44
salut,
je pense qu'avant de faire DoCmd.RunSQL, tu devrais faire un

msgbox SQL pour etre sur que ce que tu executes correspond bien a ce que tu cherches a faire. Aussi, sauvegarde tes enregistrements dans une table temporaire
et découpe ta requete en plusieurs morceaux pour isoler le pb. Faire d'abord sans la clause Where pour voir. Si cela fonctionne, tu sauras que c'est cette clause qui deconne.


Peux tu préciser la ligne qui ne fonctionne pas et dans quelle condition.


Pour finir, pour debugger beaucoup plus rapidement, tu devrais faire:

 DoCmd.RunSQL  "UPDATE tb_Resultat_1 SET recoup_used = 'oui' " & _
                        "WHERE (" & Trim(RS1.Fields("NumOperationTransfert")) = Trim(RS2.Fields("NumOperationTransfert")) & ")"

Ca t'eviera de devoir recommencer le code a chaque fois pour modifier la requete.

Bonne chance.

PS: Je me demande si cela ne vient pas de la parenthese -> WHERE (    Je ne suis pas sur qu'elle soit utile.
0
cs_monaco63 Messages postés 76 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 15 juin 2009
24 juil. 2007 à 16:10
Salut Nicko11

Quand j'effectuer MsgBox SQL
il m'affiche :
UPDATE tb_Resultat_1 SET recoup_used = 'oui'
WHERE 'test' = 'test'

Le problème c'est qu'il modifie en double mes colonnes car il passe une fois pour modifier puis une 2ème fois où la il remodifie le champ (cela vient des 2 boucles do, mais je ne sais pas comment faire pour comparer les enregistrements de ma table Resultat_1 avec ceux de TableTemporaire)

Peux tu m'aider
0

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

Posez votre question
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
24 juil. 2007 à 21:36
Je ne sais pas trop ce que tu cherches a faire alors si tu pouvais
m'expliquer clairement, peut etre que je comprendrais ce qui ne va pas
dans ta méthode.


Il me semble quand meme qu'il y a une confusion car dans une clause Where fonctionne comme ceci:


UPDATE Table SET champ_de_Table = 'Valeur' WHERE champ_de_Table= 'Condition'"


Dans ton cas:


WHERE 'test' = 'test'


me semble etrange.
0
cs_monaco63 Messages postés 76 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 15 juin 2009
25 juil. 2007 à 15:12
SAlut,
J'ai modifié mon code depuis et je souhaiterai savoir comment faire pour obtenir le nom de la colonne au lieu de sa valeur (au départ j'avais la valeur au lieu du nom)

Set RS1 = DB1.OpenRecordset("SELECT * FROM tb_transfert_depotage") 'Permet d'utiliser les enregistrements de tb_Resultat_1
Set RS2 = DB1.OpenRecordset("SELECT * FROM tb_Sauvegarde_NumOperation_Transfert") 'Permet d'obtenir le n° Opération Transfert
 
  RS1.MoveFirst   'tb_transfert_depotage
  RS2.MoveFirst   'tb_Sauvegarde_NumOperation_Transfert
 
  Do Until RS1.EOF
      If Trim(RS1.Fields("NumOperation")) <> Trim(RS2.Fields("NumOperationTransfert")) Then
            If Trim(RS1.Fields("recoup_used")) = "a" Then
                 
                  SQL = "UPDATE tb_transfert_depotage " & _
                        "SET recoup_used = 'non' " & _
                        "WHERE (" & NumOperation & " =" & Trim(RS1.Fields("NumOperation")) & ")"


 
                  DoCmd.SetWarnings False
                  MsgBox SQL
                  DoCmd.RunSQL SQL
 
                 
            End If
....
....

Je souhaiterai remplacer NumOperation par le nom de sa colonne
0
cs_monaco63 Messages postés 76 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 15 juin 2009
25 juil. 2007 à 15:32
J'ai trouvé mais maintenant j'ai une erreur qui me dit Type de données incomptable dans l'expression du critère
Je ne vois pas à quoi correspond cette erreur

Voici mon bout de code

Set DB1 = DBEngine(0)(0)
  Set RS1 = DB1.OpenRecordset("SELECT * FROM tb_transfert_depotage") 'Permet d'utiliser les enregistrements de tb_Resultat_1
  'Set RS2 = DB1.OpenRecordset("03_Sauvegarde_NumOperation_Transfert") 'Permet d'obtenir le n° Opération Transfert
  Set RS2 = DB1.OpenRecordset("SELECT * FROM tb_Sauvegarde_NumOperation_Transfert") 'Permet d'obtenir le n° Opération Transfert
 
  RS1.MoveFirst   'tb_transfert_depotage
  RS2.MoveFirst   'tb_Sauvegarde_NumOperation_Transfert
 
  Do Until RS1.EOF
      If Trim(RS1.Fields("NumOperation")) <> Trim(RS2.Fields("NumOperationTransfert")) Then
            If Trim(RS1.Fields("recoup_used")) = "a" Then
                 
                  SQL = "UPDATE tb_transfert_depotage " & _
                        "SET recoup_used = 'non' " & _
                        "WHERE (" & RS1.Fields("NumOperation").Name & "=" & Trim(RS1.Fields("NumOperation")) & ")"


 
                  DoCmd.SetWarnings False
                  MsgBox SQL
                  DoCmd.RunSQL SQL
 
                 
            End If
          
      'Ensuite on passe à l'enregistrement suivant
      RS1.MoveNext
  Loop
 
  RS2.Close
  RS1.Close

Je ne vois pas mon erreur
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
25 juil. 2007 à 16:41
Perso, en analysant ton code je pense que ca pourait fonctionner comme ca:

SQL = "UPDATE tb_transfert_depotage " & _
"SET recoup_used = 'non' " & _
"WHERE NumOperation ='" & Trim(RS1.Fields("NumOperation").Value) & "'"
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 juil. 2007 à 16:51
euh....

uniquement si NumOperation est de type String...
si c'est numérique, pas de quotes
0
Rejoignez-nous