requete SQL UPDATE vers Access

Philippe

XLDnaute Occasionnel
Bonsoir à tous,

j'ai à nouveau un problème de requête SQL, cette fois pour Updater...


Voici mon code:

en tête de Module 1:

Public vBasededonnees As New ADODB.Connection
Public vdonnées As New ADODB.Recordset
Public vsource As String
-----------------------------------------

sub mise_a_jour()
vTable = "patients"
vsource = "C:\test lis.mdb"
vBasededonnees.Open "provider=microsoft.jet.oledb.4.0;" & "persist security info=false;" & "data source=" & vsource

vSQL = "UPDATE patients SET identité=" & identite & ",Titre=" & titre & ",Nom=" & TextBox10 & ",Prénom=" & TextBox11 "WHERE Numéro=" & Label14
vdonnées.Open vSQL, vBasededonnees
End Sub

Ce code ne fonctionne pas...

J'ai fouillé sur internet mais je ne trouve pas d'explication.

Merci par avance pour votre aide

A+
Philippe
 
C

Compte Supprimé 979

Guest
Re : requete SQL UPDATE vers Access

Philippe, bonjour.

Sachant que tu veux updater des valeurs 'String' (non, je ne fais pas allusion à ce formidable petit bout d'étoffe que porte souvent les femmes) :D

Bon revenons à nos moutons, sachant que tu veux envoyer des valeurs chaines, as-tu essayé :
Code:
vSQL = "UPDATE patients SET identité=[B][COLOR=blue]'[/COLOR][/B]" & identite & "[B][COLOR=blue]'[/COLOR][/B],Titre=[COLOR=blue][B]'[/B][/COLOR]" & titre & "[B][COLOR=blue]'[/COLOR][/B],Nom=[B][COLOR=blue]'[/COLOR][/B]"
 & TextBox10 & "[B][COLOR=blue]'[/COLOR][/B],Prénom=[B][COLOR=blue]'[/COLOR][/B]" & TextBox11 [B][COLOR=seagreen]&[/COLOR][/B] "[COLOR=blue][B]'[/B][/COLOR] WHERE Numéro=" & Label14
Manquait le '&' et aussi l'espace devant 'WHERE'

Pour Numéro, je ne sais pas si il s'agit d'une valeur chaine ou d'un nombre !?
Si c'est une valeur chaine, il faut mettre :
Code:
Numéro=[B][COLOR=blue]'[/COLOR][/B]" & Label14 &"[COLOR=blue][B]'[/B][/COLOR]"

Il est également préférable (pas indispensable) de terminer l'instruction SQL par un ";"

Essaye ça et tiens nous au courant ;)
 

Philippe

XLDnaute Occasionnel
Re : requete SQL UPDATE vers Access

Bonjour Bruno et merci de t'être penché sur ma question,

en fait j'avais abrégé pour l'exemple et le "&" a sauté dans mon copier-collé, désolé..

la requête complète est là:

vSQL = "UPDATE patients SET identité=" & identite & ",Titre=" & titre & ",Abrev titr =" & tit & ",Nom=" & TextBox10 & ",Prénom=" & TextBox11 & ",Jour DN=" & TextBox12 & ",Mois DN=" & TextBox13 & ", An DN=" & TextBox14 & ",N°=" & TextBox1 & ",Voie=" & ComboBox1 & ",Nom voie=" & TextBox2 & ",complémant adresse=" & TextBox9 & ",code postal=" & TextBox3 & ",Vile=" & TextBox4 & ",Tel dom=" & TextBox6 & ",Tel bur=" & TextBox8 & ",Tel port=" & TextBox7 & ",N°SS=" & TextBox5 & ",clé SS=" & TextBox15 & ",TP=" & TP & "WHERE Numéro=" & Label14

identite (sans l'accent) est une variable string (identité, avec l'accent est le champ qui la contient), titre et tit sont des strings également, ainsi que toutes les textbox et combobox, Numéro est le champ de numérotation automatique, clé primaire de ma table, stocké dans le label 14 de mon formulaire.
Lorsque je lance la requête: Erreur d'execution '-2147217900(80040e14)':
Erreur de syntaxe (opérateur absent) dans l'expression'DUPONT Pierre 10/02/1965'. (et 'DUPONT Pierre 10/02/1965' correspond à la variable "identite" du champ identité de la ligne que je cherche à updater...

Merci pour ton avis sur la question... peut-être que la valeur "numérique" contenue ds le label 14 est stockée sous forme de chaine de texte ???

A +
Philippe
 

Philippe

XLDnaute Occasionnel
Re : requete SQL UPDATE vers Access

Encore moi,

j'ai essayé de remplacer le label14 de la requete par une variable définie par:lab=val(label14), le résultat est identique, la manière d'envoyer ma requête est elle bonne ?:
vdonnées.Open vSQL, vBasededonnees

je me pose la question car c'est sur cette ligne que pointe le débogueur...

merci de m'aider, je débute en SQL depuis 3-4 jours...

A+
Philippe
 

MichelXld

XLDnaute Barbatruc
Re : requete SQL UPDATE vers Access

bonjour


complémant adresse=" & TextBox9
Vile=" & TextBox4
...

Tes champs sont vraiment rédigés ainsi ou il s'agit de fautes d'orthographes ?

S'il y a des espaces dans le nom des champs, ceux ci doivent être encadrés par des crochets lors des requètes.

Rappel des bonnes pratiques pour la création des noms de champs:
Nom le plus court possible
Pas d'espace
Pas d'accent
Pas de caractères spéciaux



Bonne journée
MichelXld
 

Philippe

XLDnaute Occasionnel
Re : requete SQL UPDATE vers Access

Bonjour Michel,

oui les champs sont bien rédigés ainsi (les fautes de saisie ont été commises lors de la création de la table en fait et je n'avais pasq jugé utile de les modifier), je ne savais pas qu'il fallait mettre des crochets, je vais essayer.
Je prend bonne note de tes recommandations sur la saisie du nom des champs.

je vous tiens au courant

Merci

A+
Philippe
 

Philippe

XLDnaute Occasionnel
Re : requete SQL UPDATE vers Access

Rebonjour,

Michel, j'ai renommé proprement les champs de ma bd accèss:
La requète donne maintenant celà:

vSQL = "UPDATE patients SET ident=" & identite & ",Titre=" & titre & ",Abrevtitre =" & tit & ",Nom=" & TextBox10 & ",Prenom=" & TextBox11 & ",JourDN=" & TextBox12 & ",MoisDN=" & TextBox13 & ", AnDN=" & TextBox14 & ", N=" & TextBox1 & ",Voie=" & ComboBox1 & ",Nomvoie=" & TextBox2 & ", complementadr=" & TextBox9 & ",codepost=" & TextBox3 & ",Ville=" & TextBox4 & ",Teldom=" & TextBox6 & ",Telbur=" & TextBox8 & ",Telport=" & TextBox7 & ",NoSS=" & TextBox5 & ",cleSS=" & TextBox15 & ",TP=" & TP & "WHERE Numéro=" & Label14

vdonnées.Open vSQL, vBasededonnees

et toujours le même message d'erreur et le pointeur du débogueur qui s'arrète sur la dernière ligne:
vdonnées.Open vSQL, vBasededonnees

Je ne suis pas du tout sur que cette ligne qui est censée envoyer ma requête soit convenable...

Je désespère, si vous avez d'autres idées...

Merci d'avance

A+
Philippe
 

chris

XLDnaute Barbatruc
Re : requete SQL UPDATE vers Access

Bonjour
N'oublies pas lespace avant le WHERE
Déjà vérifie avec le débugger si la concaténation donne bien le bon code SQL : toujours penser à exécuter en mode pas à pas et à vérifier les valeurs prises par les varaibles sinon on tourne en rond.
 

Philippe

XLDnaute Occasionnel
Re : requete SQL UPDATE vers Access

Bonsoir à tous,

j'ai trouvé le problème: en fait il manquait des ' de part et d'autre des variables qui vont remplir les champs:

La requête devient donc:

vSQL = "UPDATE patients SET ident=' " & identite & " ',Titre=' " & titre & " ',Abrevtitre =' " & tit & "',Nom='" & TextBox10 & "',Prenom='" & TextBox11 & "',JourDN='" & TextBox12 & "',MoisDN='" & TextBox13 & "', AnDN='" & TextBox14 & "', N='" & TextBox1 & "',Voie='" & ComboBox1 & "',Nomvoie='" & TextBox2 & "', complementadr='" & TextBox9 & "',codepost='" & TextBox3 & "',Ville='" & TextBox4 & "',Teldom='" & TextBox6 & "',Telbur='" & TextBox8 & "',Telport='" & TextBox7 & "',NoSS='" & TextBox5 & "',cleSS='" & TextBox15 & "',TP='" & TP & "' WHERE Numéro=" & Val(Label14)

çà n'était pas intuitif car habituellement en vba les variables ne sont PAS encadrées de guillement, pour rester des variables justement...

En tous cas comme celà çà fonctionne parfaitement. Bon à savoir

Merci à tous
A bientôt, je ne vais surement pas tarder à avoir d'autres questions...

A+
PHILIPPE
 

Philippe

XLDnaute Occasionnel
Re : requete SQL UPDATE vers Access

En effet,
merci Bruno, je m'étais focalisé sur le "&" dans ton post, en le relisant effectivement la solution était là.
J'ai maintenant un problème de classement alphabètique de ma table, je fais un nouveau post

Encore merci

A+
Philippe
 

chris

XLDnaute Barbatruc
Re : requete SQL UPDATE vers Access

Bonjour

Question et non réponse : il semble que tu crées des formulaires dans Excel pour mettre à jour ta base Access.
Comme il est mille fois plus simple de créer des formulaires ACCESS j'aimerais savoir le pourquoi de ton choix. Absence du logiciel Access sur le poste de travail ou bien ??
 

Philippe

XLDnaute Occasionnel
Re : requete SQL UPDATE vers Access

Bonsoir Chris,

En fait j'ai fait une appli sous Excel qui gère les agendas de 10 Médecins dans un cabinet médical. A l'origine une version monoposte avec une feuille "Agenda" qui sert d'interface, une feuille d'agenda personnel par médecin et une feuille "liste des patients". Tout marchait Nickel, puis nous sommes passé en réseau et là l'appli avec toutes ses feuilles était tellement lourde que les chargement/déchargement des classeurs étaient trop longs. J'ai donc scindé le gros classeur en plusieur classeurs, 1 par médecin, 1 agenda interface et 1 liste des patients + 2 classeurs gérant les autorisation d'ouverture pour empècher les modifications contradictoires depuis plusieurs postes... tout celà stocké sur le serveur.Voilà pour l'historique.
Maintenant je cherche à accélérer la gestion des données en évitant les incessants chargement/sauvegarde des classeurs et j'ai trouvé que l'accès direct aux données dans une bd est plus rapide et surtout permet à plusieurs utilisateurs de travailler simultanément sur le même agenda...

Voilà le pourquoi du couplage Excel/Access et Excel que je ne maitrise pas trop mal me permet d'avoir une interface graphique plutôt sympa, on peut surement faire idem avec Access mais je ne maitrise pas et j'ai peu de temps pour apprendre...

A+
Philippe
 

chris

XLDnaute Barbatruc
Re : requete SQL UPDATE vers Access

Bonjour

Je comprends mieux.
Pas toujours facile de faire évoluer une appli existante !
Bon courage.
Point important : quand on passe d"Excel à Access la répartition des données n'est pas la même. Il faut tirer partie de la puissance des SGBD en terme de relations entre les tables.

Je connais assez bien Access et l'aspect requête.
Pour des extractions ou MAJ importantes, il est plus facile de créer les requêtes dans Access puis de les invoquer depuis Excel que de réécrire du SQL à chaque fois car la syntaxe depuis VBA est pénible.

Donc si en dehors des ajout ou MJ unitaire tu as des besoins de restitution plus globaux, n'hésite pas à poster.