VBA/SQL Access [Résolu/Fermé]

Signaler
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
-
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
-
Bonjour à tous, je suis penché depuis 4h30 sur un problème sous access, en ce qui concerne les requete SQL dans le code vba.
Voici mon code:

Private Sub Ajouter_Click()

Dim req As String
Dim numpatient As String
Dim nummedecin As String
Dim recdate As Date
numpatient = CStr(Patient)
nummedecin = CStr(medecin)
recdate = champdate

Dim Cnxn As ADODB.Connection

Set Cnxn = CurrentProject.Connection

req = "INSERT INTO Ordonnance VALUES('',#" & recdate & "#," & numpatient & "," & nummedecin & ");"
'MsgBox (req)

Cnxn.Execute (req)


Cnxn.Close

End Sub

Le problème est: "type de donné incompatible dans l'expression du critère."

J'ai aussi essayé sous cette form là:

Private Sub Ajouter_Click()

Dim req As String
Dim numpatient As String
Dim nummedecin As String
Dim recdate As Date
numpatient = CStr(Patient)
nummedecin = CStr(medecin)
recdate = champdate

req = "INSERT INTO Ordonnance VALUES('',#" & recdate & "#," & numpatient & "," & nummedecin & ");"
'MsgBox (req)
DoCmd.RunSQL req
End Sub


Mais là j'avais le même problème...
Si quelqu'un peu m'eclairer...
Je ne connais pas bien le langage VBA, donc j'avoue que là je suis un peu perdu. Merci d'avance pour votre aide






4 réponses

Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
3 025
Salut,

quels sont les champs de la table 'ordonnance' (et de quels types) ?

En principe, une requête INSERT INTO utilise des simples quotes comme délimiteurs de valeurs.

Pourquoi commences-tu par une virgule ?
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
"INSERT INTO Ordonnance VALUES('',#" & recdate & "#," & numpatient & "," & nummedecin & ");"

Salut. Bien parce que j'ai pris pour habitude de faire mes requêtes INSERT INTO de cette manière: je ne met pas le nom des champs après celui de la table (comme ici par exemple: INSERT INTO Ordonnance(numero, date, patient, medecin) ....)

Je décide directement des valeurs (dans l'ordre): C'est pour ça que le premier champ à remplir n'est pas renseigné (auto incrementation) j'ai donc VALUES('', 'date', 'patient', 'medecin')...

Je n'ai donc pas du tout commencé par une virgule...
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
Après mes recherches, j'y ai songé (car SQL prend les dates sous cette forme là je crois), mais je ne sais pas du tout comment faire...
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
3 025
Prendre ta date et la travailler avec des fonctions de chaine : left, mid...
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
Ok merci, je vais travailler ça et je tiens au courant!
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
3 025
Stop, j'ai trouvé, il ne faut pas mettre le champ qui est en numéroauto, puisque c'est access qui le gère, je me suis déjà fait avoir...

VALUES('#" & recdate & "#'," & numpatient & "," & nummedecin & ");"
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
Ok merci =) je vais essayer! si ça marche c'est génial!
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
sa ne marche toujours pas voici le message d'erreur:"le nombre de valeurs de la requêtes doit coincider avec le nombre de champs destination"
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
Merci beaucoup à toi Blux!
Le problème venait bien de la date, et tu m'a permis de le regler en quelque minutes.
Voici ma nouvelle requête:
req = "INSERT INTO Ordonnance([date], [n°client], [n°medecin]) VALUES('" & recdate & "'," & numpatient & "," & nummedecin & ");"

comme tu me l'a dit, je n'ai pas mis le champ de type numeroAuto.
puis j'ai modifié la date, car ça ne marchait pas même au format anglais, je l'ai mis de type string pour éviter tout les petits soucis dûs au format de la date, et ça marche niquel! =)