Requête UPDATE [Résolu]

cs_monaco63 76 Messages postés vendredi 12 novembre 2004Date d'inscription 15 juin 2009 Dernière intervention - 24 juil. 2007 à 13:51 - Dernière réponse : Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention
- 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
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 25 juil. 2007 à 16:53
3
Merci
t'embete pas :

If Trim(RS1.Fields("recoup_used")) = "a" Then
RS1.Edit
RS1.Fields("recoup_used") = "non"
RS1.Update
End If

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de Renfield
cs_monaco63 76 Messages postés vendredi 12 novembre 2004Date d'inscription 15 juin 2009 Dernière intervention - 24 juil. 2007 à 13:53
0
Merci
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
Commenter la réponse de cs_monaco63
cs_Nicko11 1141 Messages postés mercredi 7 mars 2007Date d'inscription 19 septembre 2007 Dernière intervention - 24 juil. 2007 à 14:44
0
Merci
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.
Commenter la réponse de cs_Nicko11
cs_monaco63 76 Messages postés vendredi 12 novembre 2004Date d'inscription 15 juin 2009 Dernière intervention - 24 juil. 2007 à 16:10
0
Merci
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
Commenter la réponse de cs_monaco63
cs_Nicko11 1141 Messages postés mercredi 7 mars 2007Date d'inscription 19 septembre 2007 Dernière intervention - 24 juil. 2007 à 21:36
0
Merci
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.
Commenter la réponse de cs_Nicko11
cs_monaco63 76 Messages postés vendredi 12 novembre 2004Date d'inscription 15 juin 2009 Dernière intervention - 25 juil. 2007 à 15:12
0
Merci
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
Commenter la réponse de cs_monaco63
cs_monaco63 76 Messages postés vendredi 12 novembre 2004Date d'inscription 15 juin 2009 Dernière intervention - 25 juil. 2007 à 15:32
0
Merci
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
Commenter la réponse de cs_monaco63
cs_Nicko11 1141 Messages postés mercredi 7 mars 2007Date d'inscription 19 septembre 2007 Dernière intervention - 25 juil. 2007 à 16:41
0
Merci
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) & "'"
Commenter la réponse de cs_Nicko11
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 25 juil. 2007 à 16:51
0
Merci
euh....

uniquement si NumOperation est de type String...
si c'est numérique, pas de quotes
Commenter la réponse de Renfield

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.