js8bleu
Messages postés576Date d'inscriptionsamedi 14 octobre 2006StatutMembreDernière intervention27 janvier 2014
-
8 mars 2008 à 13:26
js8bleu
Messages postés576Date d'inscriptionsamedi 14 octobre 2006StatutMembreDernière intervention27 janvier 2014
-
9 mars 2008 à 13:01
Bonjour,
je n'arrive pas à mettre à jour les deux champs date (mais de type texte) de ma table contrat. En fait, je voudrai insérer du vide dans ces champs dates au cas où il s'agirai d'un contrat à durée indéterminée. la structure de ma table est :
numcontrat, type texte
datedebutcontrat, type texte
datefincontrat, type texte
numtypecontrat, type numérique
numemp, type texte
Voici ma première requête
cn.Execute "update tablecontrat set numcontrat = '" & txtnumcontrat & "',datedebutcontrat='""',datefincontrat='""',numtypecontrat=" & x & " where numemp = " & txtcodeemp & ""
Mais j'ai l'erreur suivante : "Type de données incompatible dans l'expression du critère"
Ma deuxième requête est :
cn.Execute "update tablecontrat set numcontrat = '" & txtnumcontrat & "',null,null,numtypecontrat=" & x & " where numemp = " & txtcodeemp & ""
et là j'ai l'erreur "Erreur de syntaxe dans l'instruction UPDATE"
Quelqu'un pourrait-il m'aider s'il vous plaît?
Bon, déjà, on s'aperçoit que les requètes ne respectent pas la syntaxe VB ou SQL :
Dans requète 1 :
" datedebutcontrat='""', "
va te donner un texte ressemblant à
datedebutcontrat='"',
puisque deux " à la suite à l'intérieur d'une chaine VB se traduit par un seul " dans le résultat.
Donc oui, problème de syntaxe VB
Suffit de laisser '' et de ne pas insérer de " à l'intérieur :
" datedebutcontrat='', "
Idem pour la fin de la syntaxe : le "" devrait prooquer une erreur VB, mais comme il y a eu une précédente erreur de ", le nombre total de " dans la ligne est pair, donc masque cette erreur.
Dans requète 2 :
Dans une structure Set, il te faut répéter le nom des champs (et respecter leur ordre).
Un Null tout seul ne fonctionnera pas sous SQL
+ Supprimer le "" final qui ne sert à rien
Divers 1 : Si ta variable vb nommée 'x' est de type numérique, je te conseille de l'insérer sous forme d'un texte dans la chaine de la requète (plus propre et moins risqué) :
" numtypecontrat = " & CStr(x) & _
Divers 2 :
A l'inverse, es-tu sûr que ton champ 'numcontrat' soit de type texte dans la définition de ta DB ?
Car tu as mis des ' pour encadrer la valeur. Si le champ est numérique, cela provoquera une erreur --> Supprime les ' d'encadrement.
Conclusion :
Plutôt que de mettre la syntaxe SQL directement dans la syntaxe du Execute, passe par une variable chiane temporaire. Cela te permettra de faire un Debug.Print ou un MsgBox de cette variable et de voir la gueule de la requète avant de la soumettre et ainsi voir tout de suite d'où vient le problème.
Si les champs de ta table acceptent les valeurs Null, insère plutôt des Null que des champs vide ''.
Après correction, tes requètes sont identiques et resselerait à ça :
"update tablecontrat " & _
" set numcontrat = " & txtnumcontrat & ", " & _
" datedebutcontrat = Null, " & _
" datefincontrat = Null, " & _
" numtypecontrat = " & CStr(x) & _
" Where numemp = " & txtcodeemp
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 mars 2008 à 00:50
Re
Simplement comme ça :
Dim maRequete As String
maRequete = "Update ..."
Debug.Print maRequete
ou
MsgBox maRequete
cn.Execute maRequete
et regarde dans la fenêtre de debug (Ctrl-G) : Il t'affichera le contenu de ce que tu as préparé.
Tu n'as plus qu'à vérifier que la syntaxe est correcte
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
js8bleu
Messages postés576Date d'inscriptionsamedi 14 octobre 2006StatutMembreDernière intervention27 janvier 20142 8 mars 2008 à 22:20
Salut Jack,
Merci beaucoup d'avoir si bien mis en forme mon message. Merci également pour ton aide. Je pense avoir essayé le datedebutcontrat=null et le datedebutcontrat='' et j'avais toujours ces erreurs (la 1 je crois). Mais, je vais rééssayer quand même car tes explications sont très clairs et je n'avais pas essayé le CStr(x). Par contre je ne sais pas comment utiliser le debug.print et le Msgbox qui semble être d'excellents moyens de vérifier le résultat de ses requêtes. Pourrais-tu m'éclaircir sur ce point une fois de plus s'il te plaît? Merci d'avance.
js8bleu
Messages postés576Date d'inscriptionsamedi 14 octobre 2006StatutMembreDernière intervention27 janvier 20142 9 mars 2008 à 13:01
Salut Jack,
j'ai enfin pu régler le problème en fait je n'avais pas de '' à la fin de la requête car en effet le type du " & txtnumemp & " ne correspondait pas. Je te remercie beaucoup pour ton aide. Par contre un problème demeure celui de l'incrémentation automatique. Voici ce que j'aimerai faire :
vérifier dans ma table employe s'il y a au moins un enregistrement
si non alors
numemp = 1
sinon
numemp = dernier numemp + 1
fin si
NB:Avec numemp à présent de type numérique.
J'ai déjà posté dans le forum sans trouver de solution adéquate. Merci d'avance de m'aider.