VBA/SQL Access

Résolu/Fermé
samsam26 Messages postés 105 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 4 mars 2013 - 29 avril 2010 à 20:37
samsam26 Messages postés 105 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 4 mars 2013 - 1 mai 2010 à 11:05
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

blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
29 avril 2010 à 21:37
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 ?
0
samsam26 Messages postés 105 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 4 mars 2013 6
29 avril 2010 à 22:04
"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...
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
29 avril 2010 à 22:07
Ok, donc quels sont les types de tes champs ?
0
samsam26 Messages postés 105 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 4 mars 2013 6
30 avril 2010 à 13:12
Alors il y a les champs:
-n°ordonnance de type numeroAuto
-date de type date
-n°patient de type numérique
-n°medecin de type numérique

Ensuite les variables patient, medecin et champdate proviennent des zones de texte dans mon formulaire (qui sont appellée comme ça).

Je ne vois pas d'où provient ce problème de type, car les données sont ultra cohérente, mais vu que je n'ai jamais trop utilisé le VBA et Access, je n'ai pas assez d'experience pour reconnaitre un problème.

J'ai testé tout les types des variables utilisée avec msgBox(VarType(variable)) et tout à l'air bon.

Enfin une précision que j'ai oublié: la ligne que le debug signal en erreur est celle ou la requete s'execute. (Docmd.RunSQL req ou cnxn.Execute (req) selon la version)

Merci pour cette petite consécration de temps que tu m'accorde =)
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
30 avril 2010 à 13:28
Je viens de trouver un truc, tes # ne sont pas enquotés.

Je ferais un truc comme ça :

VALUES('','#" & recdate & "#'," & numpatient & "," & nummedecin & ");" 
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
30 avril 2010 à 13:42
Et si ça ne marche pas, imaginer mettre la date en format british (mm/jj/aa)...
0
samsam26 Messages postés 105 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 4 mars 2013 6
30 avril 2010 à 18:53
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...
0
samsam26 Messages postés 105 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 4 mars 2013 6
1 mai 2010 à 10:37
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"
0
samsam26 Messages postés 105 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 4 mars 2013 6
1 mai 2010 à 11:05
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! =)
0