Problème de requête de mise à jour - Update - [Résolu]

Signaler
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
19 avril 2005
-
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
19 avril 2005
-
Bonjour, je m'arrache les cheveux depuis 2 jours sur une simple requête de mise à jour ; la requête est la siuvante :


"Update MATERIEL Set NUMSERIE = '" & TxtModifMatId.Text & _


"', CODEUTILISATEUR '" & strnewdir & "', CODECAT '" & strcat & _


"', MARQUE '" & TxtModifMatMarque.Text & "', MODELE '" & _


TxtModifMatModele.Text & "', PROC = '" & TxtModifMatProc.Text & _


"', RAM = '" & strram
& "', DD '" & TxtModifMatDd.Text & "', OS '" & _


TxtModifMatOs.Text & "', RESIP = '" & TxtModifMatIp.Text & _


"', RESPASSERELLE '" & TxtModifMatPasserelle & "', RESNOMPC '" & _


TxtModifMatNomPc.Text &
"', FACTANNEEACHAT = '" & TxtModifMatAnnee.Text & _


"', FACTFOURNACHAT '" & TxtModifMatFour.Text & "', FACTPRIX " & _


TxtModifMatPrix.Text & ", FACTNUMBON = " & TxtModifMatNum.Text & _


" Where NUMSERIE = '" & strid & "'"





Je ne pense pas qu'il soit nécessaire de connaitre chaque champ etc..
pour me répondre : en effet la base de données est sous access 2000, et
je programme sous VB6. L'erreur indiquée à l'éxécution est une erreur
de syntaxe. Je ne vois pas d'où ça vient. En procédant par élimination,
il semblerait que ça provienne du champ "PROC", mais je ne vois pas du
tout où est mon erreur : l'ordre des champs est respecté, les types de
données sont bons, les chaines ne sont pas vides etc...


Quelqu'un sait où est mon erreur de syntaxe?





Merci.

20 réponses

Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

Bin de retour...



J'ai déjà observé des comportements curieux en fonction des méthodes...
Moi je peux pas reproduire ton cas, je viens d'essayer et ça a
fonctionné sans les crochets, alors que te dire...



Sinon que tu peux toujours vérifier si t'as le temps.



Parcontre la méthode cnx.execute est peut être un peu plus directe...

madbob
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
19 avril 2005

Ok j'essaierai ça demain au taff alors, je te remercie :)

A+ !!
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

Salut,



Utilise le debuggeur et analyse ta chaine telle qu'elle est construite...

Si tu vois pas l'erreur, donne moi cette chaine... et je t'aide

madbob
Messages postés
402
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
7 juin 2009
4
Il n'y aurait pas une apostrophe dans un des textes que tu passes en parametre ? Si c'est le cas, je pense qu'il faut la doubler pour ne plus avoir de pb. => Replace(TxtModifMatProc.Text,"'","''")
Messages postés
2169
Date d'inscription
vendredi 20 avril 2001
Statut
Membre
Dernière intervention
30 juin 2009
8
Tous tes champs sont bien des texts dans ta Base ?

It@li@
Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

C'est effectivement ce à ? je pensais... Mais je penses que se donner les moyens de trouver son erreur c'est plus profitable...

Je voulais qu'il s'en rende compte... tant pire...

madbob
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
19 avril 2005

J'ai créé la requête directement sous access, en fait il suffisait de mettre [PROC] = ... au lieu de PROC = .....



Je sais pastrop à quoi correspond le [ ], mais bon....



Ca marche !



Ce n'était pas une erreur d'apostrophes ni type de données ;)



Mais j'aimerais uneexplication sur les crochets tout de même?



merci :)
Messages postés
2169
Date d'inscription
vendredi 20 avril 2001
Statut
Membre
Dernière intervention
30 juin 2009
8
Normalement les crochet c'est pour les champs qui on t un Nom Composé :

Ex :....WHERE [Nom Prenom]= ' " & Text2.text & " '......

It@li@
Messages postés
402
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
7 juin 2009
4
Peut-être que PROC est un mot clé dans le SQL Access. Il faudrait alors mettre les crochets pour différencier un nom de champ et le mot clé
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
19 avril 2005

Je viens de regarder dans l'aide access, y a quelques fonctions
contenant le mot Proc, mais Proc tout court n'existe pas.....et dans ma
table ce n'est pas un nom composé.... le mystère reste entier !! ;-)
Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

Ca résoud effectivement ce problème des noms composés !!!





Access est un véritable mystère en ce qui me concerne mais j'aime bien
c'est son charme on va dire : on trouve toutes les syntaxes possibles
du sql avec ou sans ";" . On prend celle qui marche, avec ou sans
crochet... En fonction des méthodes aussi on a des surprises...





Concernant les "[]" ils sont sytématiquement utilisés dans le générateur
d'expréssion.... Je pense qu'ils servent aussi à forcer le typage pour
que le parseur puisse correctement interpéter l'ordre SQL ou autre en
utilisant correctement les mots réservés du dictionnaire interne.





Curieusement cette syntaxe est la seule qui soit automatiquement
effectuée dans le générateur d'expression et le seul cas repris automatiquement en mode sql
requête ...



Est-ce que cela peut provenir de la méthode que tu utilises (historique d'access)?




madbob

madbob
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
19 avril 2005

Je ne sais pas du tout....access me sert uniqumeent pour les tables, je n'y fais rien de plus...

enfin et les requêtes bien sur mais je les fais sous vb..
Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

Tu utilises quelle méthode dans VB pour ton update ? ...

madbob
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
19 avril 2005

Heu, qu'appelles tu méthode? J'utilise l'ADODB ..... si c'est de ça que tu parles....
Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

Oui c'est ça , mais encore... ?
madbob
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
19 avril 2005

Ben je sais pas moi, que te dire de plus? j'utilise les recordset, etc.
enfin ce qui va avec...je vois ps où tu veux en venir là lol :(
Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

;-) Excuse je cherche pas à t'embrouiller... et y a pas de mal aise :-)



Quelle est l'instruction complète que tu utilises pour faire la mise à jour...

? .instruction "update matable set col1..."


madbob
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
19 avril 2005

Ah !

je mets ma requete ds une variable string : strrequetesql



strrequetesql "UPDATE MATERIEL SET NUMSERIE '" & TxtModifMatId.Text & _

"', CODEUTILISATEUR '" & strnewdir & "', CODECAT '" & strcat & "', MARQUE = '" & _

TxtModifMatMarque.Text & "', MODELE '" & TxtModifMatModele.Text & "', [PROC] '" & _

TxtModifMatProc.Text & "', RAM '" & strram & "', DD '" & TxtModifMatDd.Text & _

"', OS '" & TxtModifMatOs.Text & "', RESIP '" & TxtModifMatIp.Text & _

"', RESPASSERELLE = '" &
TxtModifMatPasserelle.Text & "', RESNOMPC = '" &
TxtModifMatNomPc.Text & _

"', FACTANNEEACHAT = '" & TxtModifMatAnnee.Text
& "', FACTFOURNACHAT = '" & TxtModifMatFour.Text & _

"', FACTPRIX " & TxtModifMatPrix.Text & ", FACTNUMBON " & TxtModifMatNum.Text & _

" WHERE NUMSERIE= '" & strid & "'"



Rst.CursorLocation = adUseClient

Rst.Open strrequetesql, Cnx



Rst est mon recorset, Cnx mon adodb
Messages postés
285
Date d'inscription
dimanche 14 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2012

Pour le sql, chacun sa méthode, l'important c'est de retrouver ses billles...



Perso je trouve pas pratique à lire... Je préfère séparer les éléments de ma requête, travailler en concaténation succéssive et surtout ne pas utiliser les cactères de continuation de ligne... quelque soit le RAD/AGL utilisé


mon_sql = "Select ............................."

mon_sql = mon_sql & " From ............."

mon_sql = mon_sql & " Where............"

mon_sql = mon_sql & " Order By ........"






As tu déja essayé de faire du direct cnx.execute (monsql)
, ça ne changera peut être rien du tout..., mais dans le cas d'un
insert pourquoi pas et je me demande si la méthode n'est pas en cause.

madbob
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
19 avril 2005

Non j'ai jamais essayé. tu crois que le fait qu'avec les crochets ca marche et sans ca ne marche pas, pourrait etre du à ça?