Variables et Sql - Syntaxe

mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016 - 14 oct. 2011 à 12:18
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016 - 9 nov. 2011 à 10:49
Bonjour,
Quelqu'un pourrait-il m'aider à écrire ce bout de code car je n'arrive pas à le rendre buvable.
- J'ai pas mal cherché sur le web mais je n'ai rien trouvé ou du moins je n'ai pas su exploiter ce que j'ai lu.
- J'ai essayé les simple quotes, les doubles, les #, les parenthèses?

Access 2007

Dim sql1 As string
Dim sNumProf As integer
Dim sDteDeb As Date
Dim sDteFin As Date

sNumProf = InputBox("Entrer le N° de l'enseignant : ") 'integer
sDteDeb = InputBox("Entrer la date de début : ")
sDteFin = InputBox("Entrer la date de fin : ")

Sql1 "Delete * FROM T_Presence where ([T_Presence].[N°_Enseignant] '" & sNumProf & "' And [T_Presence].[Dte] Between #" & sDteDeb & "# And #" & sDteFin & "#);"

DoCmd.RunSQL (Sql1)

Merci d'avance

22 réponses

NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
14 oct. 2011 à 12:56
Bonjour,

Rendre le code plus lisible, regardes le point 2 de ma signature.
Ensuite, le format des dates dans les requêtes Access (non précisé, mais je suppose) est au format #mm/dd/yyyy# ou #mm/dd/yyyy hh:mm:ss#.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016
15 oct. 2011 à 02:09
la coloration syntaxique : c'est vrai que c'est mieux - Je n'avais pas fait attention.

Bonjour,
Quelqu'un pourrait-il m'aider à écrire ce bout de code car je n'arrive pas à le rendre buvable.
- J'ai pas mal cherché sur le web mais je n'ai rien trouvé ou du moins je n'ai pas su exploiter ce que j'ai lu.
- J'ai essayé les simple quotes, les doubles, les #, les parenthèses?

Access 2007


Dim sql1 As string 
Dim sNumProf As integer 
Dim sDteDeb As Date 
Dim sDteFin As Date 

sNumProf = InputBox("Entrer le N° de l'enseignant : ") 'integer 
sDteDeb = InputBox("Entrer la date de début : ") 
sDteFin = InputBox("Entrer la date de fin : ") 

Sql1 "Delete * FROM T_Presence where ([T_Presence].[N°_Enseignant] '" & sNumProf & "' And [T_Presence].[Dte] Between #" & sDteDeb & "# And #" & sDteFin & "#);"
 
DoCmd.RunSQL (Sql1) 


Merci d'avance
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
15 oct. 2011 à 04:24
Salut

Si tu ne travailles que sur une table, supprime le nom de la table devant les champ, c'est inutile.
Les parenthèses aussi ne servent à rien.
Si [N°_Enseignant] est un numérique dans la table, pas de '

Petite fonction simpliste pour formater les dates en US :
(à mettre dans un module, par exemple)
Public Function FormatSQLDateTimeString(laDate As Date) As String
    ' Convertit une date locale/heure (quelconque, en fait, du moment qu'elle est au
    '   format de l'OS) en date générale internationale (US)
    ' Mois/Jour/Année
    FormatSQLDateTimeString = Right$("00" & CStr(Month(laDate)), 2) & "/" & _
                              Right$("00" & CStr(Day(laDate)), 2) & "/" & _
                                            CStr(Year(laDate)) & " " & _
                              Right$("00" & CStr(Hour(laDate)), 2) & ":" & _
                              Right$("00" & CStr(Minute(laDate)), 2) & ":" & _
                              Right$("00" & CStr(Second(laDate)), 2)
End Function

Pour l'utiliser :
... And [Dte] Between #" & FormatSQLDateTimeString(sDteDeb) & "# And ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016
15 oct. 2011 à 19:41
Bonjour
Merci de vos réponses.
J'ai essayé de suivre vos conseils - J'y ai passé des heures, je répugnais à vous solliciter encore - car j'ai une "incompatibilté de type" que je n'arrive pas à tordre.

Structure des tables
Table T_Présence Dte Date, abrégé 00/00/0000;0;
Table T_Présence N°_Enseignant Entier long

Table T_Présence anomalies Dte Date, abrégé 00/00/0000;0;_
Table T_Présence anomalies N°_Enseignant Entier long

Table T_Salariés N°_Enseignant NumeroAuto Sans doublons Entier long

Private Sub Commande46_Click() 'Suppression de tous les cours d'un enseignant entre 2 dates.
Dim Sql1 As String, Sql2 As String
Dim sNumProf As Long
Dim sDteDeb As Date, sDteFin As Date
Dim USDteDeb As Date, USDteFin As Date

On Error GoTo Err_Commande46_Click

Dim fso As Object, StrDest As String
Dim Sql1 As String, Sql2 As String
Dim sNumProf As Long

'Dim sDteDeb As Date, sDteFin As Date
Dim USDteDeb As Date, USDteFin As Date

On Error GoTo Err_Commande46_Click

sNumProf = InputBox("Entrer le N° de l'Enseignant : ")
sDteDeb = InputBox("Entrer la date de début : ")
sDteFin = InputBox("Entrer la date de fin : ")

'USDteDeb = Month(sDteDeb) & "/" & Day(sDteDeb) & "/" & Year(sDteDeb) 'j'ai essayé ça aussi
'USDteFin = Month(sDteFin) & "/" & Day(sDteFin) & "/" & Year(sDteFin)

USDteDeb = Right$("00" & CStr(Month(Dte)), 2) & "/" & Right$("00" & CStr(Day(Dte)), 2) & "/" & CStr(Year(Dte)) & " "
USDteFin = Right$("00" & CStr(Month(Dte)), 2) & "/" & Right$("00" & CStr(Day(Dte)), 2) & "/" & CStr(Year(Dte)) & " "

'--------------------------------------
'Pour mémoire : cette syntaxe fonctionne mais j'aimerai passer par les inputbox  
-->  Sql1 "Delete * FROM T_Présence_Anomalies  where ([T_Présence_Anomalies].[N°_Enseignant] [entrer le N° de l'Enseignant : ] And [T_Présence_Anomalies].[Dte]Between [Entrer la date de début : ] And  [Entrer la date de fin : ]) "
'-----------------------------------------

Sql1 "Delete * FROM T_Présence where [T_Présence].[N°_Enseignant] '" & sNumProf & "' And [T_Présence].[Dte] Between #" & USDteDeb & "# And #" & USDteFin & "#"
DoCmd.RunSQL (Sql1)
'Sql1 "Delete * FROM T_Présence_Anomalies  where [T_Présence_Anomalies].[N°_Enseignant] '" & sNumProf & "' And [T_Présence_Anomalies].[Dte] between #" & USDteDeb & "# And #" & USDteFin & "#"
'DoCmd.RunSQL (Sql1)

Err_Commande46_Click:
    MsgBox Err.Description

End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
15 oct. 2011 à 20:17
Bonjour,

Sur quelle ligne l'erreur ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016
15 oct. 2011 à 20:54
Type de données incompatible dans l'expression du critère
Sur 'DoCmd.RunSQL (Sql1)
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
15 oct. 2011 à 23:30
Bonjour,

Quel est le type de DoCmd ?
Qu'attend comme paramètre DoCmd.RunSql ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016
16 oct. 2011 à 19:14
Bonsoir
Merci de votre réponse.

Type de DoComd ? Je ne sais pas répondre.
Paramètres de DoCmd ? Je ne sais pas répondre. Je n'ai rien mis d'une façon volontaire.
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
16 oct. 2011 à 20:10
Bonjour,

En faisant un Clic droit sur DoCmd puis Info Express, tu aura ta réponse.

Ensuite, pour le type des paramètres, un espace juste après la (

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016
17 oct. 2011 à 01:18
Bonsoir
La différence est sur les caractères en gras
- Click doit sur RunSql : RunSQL(SQLStatment, UseTransaction])
- Espace après la ( : RunSQL(SQLStatment, [UseTransaction])
0
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016
17 oct. 2011 à 01:53
Bonsoir
La seule différence est la position du gras sur les caractères
Click droit sur RunSQL : RunSQL(SQLStatement, [UseTransaction])
Un espace après la ( : RunSQL(SQLStatement, [UseTransaction])
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
17 oct. 2011 à 23:27
Bonjour,

Et si
DoCmd.RunSQL (Sql1)
était sans les ()
DoCmd.RunSQL Sql1

ça passe ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016
18 oct. 2011 à 11:26
Bonjour
Cà ne fonctionne pas plus.
je pense que j'ai un problème de date FR / US
J'ai fait un test et ça fonctionne lorsque je convertis la date de ma base et les dates de début et de fin avec CDbl.
Mais ce n'est pas ce que je souhaite aussi je continue à chercher comment entrer des variables dates qui s'accordent aux dates FR de mes tables.

En tout cas, merci pour l'aide que vous m'apportez.
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
18 oct. 2011 à 21:06
Bonjour,

Quelle est la requête SQL utilisée alors ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016
19 oct. 2011 à 02:00
Bonsoir
Pressé par le temps je me suis résolu à laisser tourner ce SQL. Que dire ? : il fonctionne....

Sql1 "Delete * FROM T_Présence WHERE ((T_Présence.[N°_Enseignant] [Entrer le N° de l'Enseignant : ]) AND (T_Présence.[Dte] Between [Entrer la date du 1er jour à supprimer : ] AND [Entrer la date du dernier jour à supprimer : ]));"
    DoCmd.RunSQL (Sql1)
Sql2 "Delete * FROM T_Présence_Anomalies  WHERE ((T_Présence_Anomalies.[N°_Enseignant]  [Entrer le N° de l'Enseignant : ]) AND (T_Présence_Anomalies.[Dte] Between [Entrer la date du 1er jour à supprimer : ] AND [Entrer la date du dernier jour à supprimer : ]));"
    DoCmd.RunSQL (Sql2)

Outre le fait qu'il m'oblige à poser 2 fois les 3 mêmes questions, je sais qu'il va en faire grimper plus d'un aux rideaux.


Ce que je souhaite c'est : - de passer par 3 inputbox,
- stocker 3 variables dates
- et les mettre en ?uvre avec les valeurs date de mes tables qui elles sont au format abrégé jj/mm/aaaa.

Structure des tables
T_Présence.[Dte] --> Date, abrégé JJ/mm/aaaa
T_Présence.[N°_Enseignant] --> Entier long
T_Présence.[HeureDébut] et [HeureFin] --> format heure abrégé hh:nn ? (Sommes mensuelles > 24 h)

T-Présence_Anomalies = Idem

Dim sNumProf As Long
Dim sDteDeb As Date, sDteFin As Date
Dim USDteDeb As Date, USDteFin As Date

sNumProf = InputBox("Entrer le N° de l'Enseignant : ") 
sDteDeb = InputBox("Entrer la date de début : ")
sDteFin = InputBox("Entrer la date de fin : ")

' ----- Formatage US de ce style 
USDteDeb = Month(sDteDeb) & "/" & Day(sDteDeb) & "/" & Year(sDteDeb)
USDteFin = Month(sDteFin) & "/" & Day(sDteFin) & "/" & Year(sDteFin)
'----- Ou de celui-là
USDteDeb = Right$("00" & CStr(Month(Dte)), 2) & "/" & Right$("00" & CStr(Day(Dte)), 2) & "/" & CStr(Year(Dte)) & " "
USDteFin = Right$("00" & CStr(Month(Dte)), 2) & "/" & Right$("00" & CStr(Day(Dte)), 2) & "/" & CStr(Year(Dte)) & " "
'?Ou d'un autre?

' ----- J'aimerai faire tourner ce genre de  SQL sous cette forme ou autres...
Sql1 "Delete * FROM T_Présence where [T_Présence].[N°_Enseignant] '" & sNumProf & "' And [T_Présence].[Dte] Between #" & USDteDeb & "# And #" & USDteFin & "#"
    DoCmd.RunSQL (Sql1)

Sql2 "Delete * FROM T_Présence_Anomalies  where [T_Présence_Anomalies].[N°_Enseignant] '" & sNumProf & "' And [T_Présence_Anomalies].[Dte] between #" & USDteDeb & "# And #" & USDteFin & "#"
    DoCmd.RunSQL (Sql2)


Par ailleurs :
J'aimerai également pouvoir mettre les valeur hh:nn (00:03 ou 00:00) sans les secondes, par une fonction Update dans les champs HeureDébut et HeureFin de mes 2 tables.

Voila, ce que je suis en train de chercher laborieusement? et ce pourquoi j'ai besoin de votre aide.
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
19 oct. 2011 à 07:29
Bonjour,

Pourquoi mets-tu des ' pour sNumProf dans tes requêtes, alors qu'il s'agit d'une valeur numérique?

Cordialement.
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
19 oct. 2011 à 07:42
Je vois que Jack t'avait déjà signalé ceci dans son message du 15/10.
0
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016
19 oct. 2011 à 18:02
Bonjour
Oui, merci,je l'ai fait... Croyez-moi, j'ai testé avec simple, double, sans ...
J'ai fait plein de test : j'ai transformé mes variable en alpha, en valeurs numériques pour les dates, j'ai ajouté des champs de conversion dans mes tables... (Pour voir... mais je n'irai pas jusque là )
et dans ce fouchtri-fouchtra, je ne vous ai pas écrit ce qui convient.
Vous voudrez-bien m'en excuser.

Ceci étant avec ou sans ' , ça ne fonctionne pas.

j'ai bien noté vos conseils et je les applique croyez-moi :
- '"& Var_texte &"'
- "& Var_Alpha &"
- #"& Var_date &"#

Je continue... Merci de votre attention
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
19 oct. 2011 à 20:40
Bonjour,

Pour les heures, essayes :
#hh:mm:ss# ou #mm/dd/yyyy hh:mm:ss#

Tu dois préciser les secondes, même si tu ne l'es utilises pas.

Que contient la variable contenant la requête avant de s'exécuter ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
mjsm Messages postés 19 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 avril 2016
20 oct. 2011 à 12:00
Bonjour

La table T_Présence.[HeureDébut] et [HeureFin] contient:
- Soit 00:00 au format heure, abrégé hh:nn
- Soit rien (Null).

Sous quelle forme la variable prend-elle l'info ? Je ne sais pas.

En cas d'absence de l'enseignant, je souhaite renseigner ces 2 champs par 00:00 ou 00:03 sans les secondes - pour le moment j'efface la ligne.

Merci de votre attention.
0