Rechercher : dans
Par :

[access] Variable dans une requete sql

Dernière réponse le 29 jun 2007 à 16:10:55 lord_in, le 15 jun 2007 à 14:12:32 
 Signaler ce message aux modérateurs

Variable dans une requete sql

Je n’arrive pas à intégrer une variable dans une instruction sql

Voilà mon code
Dim T as date
Dim T1 as date



T = Val(Datett.Value)
T1 = DateAdd("m", 1, T)
DoCmd.RunSQL "INSERT INTO Table1tampon ( Material, [material description], [zone], mois, forecasts ) SELECT TableTotal.Material, TableTotal.[material description], TableTotal.zone, TableTotal.mois, TableTotal.forecasts FROM TableTotal WHERE (((TableTotal.zone)=zonett.value) AND ((TableTotal.mois)=datett.value));", -1

DoCmd.RunSQL "INSERT INTO Table2tampon ( Material, [material description], [zone], mois, forecasts ) SELECT TableTotal.Material, TableTotal.[material description], TableTotal.zone, TableTotal.mois, TableTotal.forecasts FROM TableTotal WHERE (((TableTotal.zone)=zonett.value)) AND ((TableTotal.mois)= T1 ) ;", -1

Et quand j’exécute il me demande la valeur de la variable T


Dattett = la date que je tape dans mon formulaire

Merci de votre aide

Configuration: Windows XP
Internet Explorer 6.0

1

blux, le 15 jun 2007 à 14:33:36

Salut,

il faut sortir T1 du texte de la requête :

Dim StrSql as string
Strsql = "INSERT INTO Table2tampon ( Material, [material description], [zone], mois, forecasts ) "
StrSql = StrSql + "SELECT TableTotal.Material, TableTotal.[material description], TableTotal.zone, TableTotal.mois, TableTotal.forecasts FROM TableTotal WHERE (((TableTotal.zone)=zonett.value)) "
StrSql = StrSql + "AND ((TableTotal.mois)= '" + T1 + "') ;"
DoCmd RUNSQL (Strsql,-1)
Et éventuellement mettre la date entre # si TableTotal.mois est de type date...
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

2

lord_in, le 15 jun 2007 à 15:32:02

En fait il me met type incompatible pour cette ligne
StrSql = StrSql + "AND ((TableTotal.mois)= '" + T1 + "')

J’ai vérifié mes tables et le mois et bien du type date
Et pour les # j’avais déjà essayé mais ca marche pas !!!

PS : j’ai changé « DoCmd RUNSQL (Strsql,-1) » en DoCmd.RunSQL StrSql
Parce qu il voulait pas prendre la 1ère

Répondre à lord_in

3

blux, le 15 jun 2007 à 15:43:48

le mois et bien du type date
Mais que contient-il : un mois ou une date ?
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

4

lord_in, le 15 jun 2007 à 15:47:24

Il contient une date sous forme ex 01/05/2006
et mois c'est le nom du champ

Répondre à lord_in

5

blux, le 15 jun 2007 à 15:49:24
  • +2

StrSql = StrSql + "AND ((TableTotal.mois)= #" + T1 + "#) ;"
???
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

6

lord_in, le 15 jun 2007 à 16:04:24

Tjrs le meme problème !!!!

Répondre à lord_in

7

blux, le 15 jun 2007 à 16:11:42

MsgBox T1
???
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

8

lord_in, le 15 jun 2007 à 16:18:57

Bizarre
il me retourne la valeur 31/01/1900
alors que dans mon datett j'ai tapé 01/04/2006

Répondre à lord_in

9

blux, le 15 jun 2007 à 16:45:35

Oui, mais tu transformes ta saisie T en numérique et non en date !

Il faudrait plutôt faire T=cdate(datett.value), ça devrait aller mieux...
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

10

lord_in, le 19 jun 2007 à 12:28:31

Salut blux

t'as raison pour Cdate
mais le problème c'est il ne prend tjrs pas la valeur de T1
il me met erreur de syntaxe sachant que T1= 01/05/2006

Répondre à lord_in

11

blux, le 19 jun 2007 à 13:23:34

Erreur de syntaxe sur quelle ligne ?
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

12

lord_in, le 19 jun 2007 à 13:44:07

Sur celle la
StrSql = StrSql + "AND ((TableTotal.mois)= #" + T1 + "#)
au niveau de T1

Répondre à lord_in

13

blux, le 19 jun 2007 à 14:02:11

C'est normal, T1 est une variable DATE, elle ne peut pas se concaténer avec une chaine...

t1 = cstr(cdate(datett.value)) ?
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

14

lord_in, le 19 jun 2007 à 15:02:13

Il me met tjrs incompatibilté du type dans l'expression

Répondre à lord_in

15

lord_in, le 19 jun 2007 à 15:49:00

J’ai trouvé le cours du problème
Je te rappelle mon code
Private Function sliptdesforecastsparmoissurlestable2()
Dim StrSql As Variant
Dim T As Date
Dim T1 As Date

T = CDate(Datett.Value)
T1 = DateAdd("m", 1, T)
T2 = CStr(CDate(T1))

StrSql = "INSERT INTO Table2tampon ( Material, [material description], [zone], mois, forecasts ) "
StrSql = StrSql + "SELECT TableTotal.Material, TableTotal.[material description], TableTotal.zone, TableTotal.mois, TableTotal.forecasts FROM TableTotal WHERE (((TableTotal.zone)=zonett.value)AND((TableTotal.mois)= #" & T1 & "#)) ;"

DoCmd.RunSQL StrSql

End Function

La syntaxe est correcte
Le prob c’est moi je tape 01/04/2006 (1eravril 2006)
Et donc T1= 01/05/2006

Alors pour que ca marche il faut que T1 soit sous cette forme T1= #05/01/2006#
Voilà
Alors si t’as une solution stp je suis preneur
Merci d’avance

Répondre à lord_in

16

blux, le 19 jun 2007 à 16:08:02

AND((TableTotal.mois)= #" & T2 & "#)) ;" ???
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

17

lord_in, le 19 jun 2007 à 16:28:49

Excuse moi c t bien T2
Et T2= 05/01/2006 ce qui est bon
Mais pour que ca marche
Il faut que osit sous la forme T2= #05/01/2006#
(je l’ai pas mis tt a l’heure mais j’ai déclaré T2 as variant)
J’ai essayé de mettre
T3 = #T2# (mais il n’accepte pas )
En fait je voulais mettre le T3 dans l’instruction SQL

Répondre à lord_in

18

blux, le 19 jun 2007 à 16:48:11

Je teste chez moi et je te tiens au courant (sûrement demain)...
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

19

lord_in, le 19 jun 2007 à 16:50:03

Merci

Répondre à lord_in

20

blux, le 19 jun 2007 à 17:07:01

Bon, j'ai trouvé (je le savais, mais j'avais oublié), en SQL il faut que les dates soient au format anglais, donc un truc comme ça peut marcher (à adapter chez toi) :

Private Sub Bout_Cher_Click()
Dim StrSql As String
Dim aa As String
Dim mm As String
Dim jj As String
Dim T As String
jj = Left(Chx_date.Value, 2)
mm = Mid(Chx_date.Value, 4, 2)
aa = Right(Chx_date.Value, 4)
T = mm + "/" + jj + "/" + aa
MsgBox T
StrSql = "UPDATE table_date SET toto = 'ttut' where jour = #" & T & "#;"
MsgBox StrSql
DoCmd.RunSQL (StrSql)
End Sub
--
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

21

 lord_in, le 29 jun 2007 à 16:10:55

Merci blux (c bon j'ai reussi )

excuse pour le retard lol

Répondre à lord_in
Collection CommentÇaMarche.net