Hello,
pour résumer une réponse à 3 posts précédents: comment faire une
requête SQL qui sélectionne les records compris entre 2 dates, les 2
dates étant saisies dans des TextBox. La requête ne se fait que si les
2 dates sont valides. Bref, voici le code commenté:
' ma db est db1.mdb
' une seule table, table1 avec 3 champs:
' id = index primaire numero unique (auto number)
' date = date (type date)
' nom = Text
' les 2 dates saisies le sont dans 2 textbox, Text1 et Text2
'
Private Sub Command1_Click()
Dim db As Database
Dim rs As Recordset
Dim sqlStatement As String
Dim sqlDate1 As String
Dim sqlDate2 As String
Set db = OpenDatabase("c:db1.mdb")
If IsDate(Text1.Text) And IsDate(Text2.Text) Then
sqlDate1 = "#" & Text1.Text & "#"
sqlDate2 = "#" & Text2.Text & "#"
sqlStatement = "SELECT * from Table1 where date "
sqlStatement = sqlStatement & "Between " & sqlDate1 & " and " &
sqlDate2
Set rs = db.OpenRecordset(sqlStatement)
rs.MoveFirst
While Not rs.EOF
Debug.Print rs.Fields("id"); " "; rs.Fields("nom"); " ";
rs.Fields("date")
rs.MoveNext
Wend
Else
MsgBox "Au moins une des dates est invalide"
End If
End Sub
Espérant que ça aide,
Hello,
pour résumer une réponse à 3 posts précédents: comment faire une
requête SQL qui sélectionne les records compris entre 2 dates, les 2
dates étant saisies dans des TextBox. La requête ne se fait que si les
2 dates sont valides. Bref, voici le code commenté:
' ma db est db1.mdb
' une seule table, table1 avec 3 champs:
' id = index primaire numero unique (auto number)
' date = date (type date)
' nom = Text
' les 2 dates saisies le sont dans 2 textbox, Text1 et Text2
'
Private Sub Command1_Click()
Dim db As Database
Dim rs As Recordset
Dim sqlStatement As String
Dim sqlDate1 As String
Dim sqlDate2 As String
Set db = OpenDatabase("c:db1.mdb")
If IsDate(Text1.Text) And IsDate(Text2.Text) Then
sqlDate1 = "#" & Text1.Text & "#"
sqlDate2 = "#" & Text2.Text & "#"
sqlStatement = "SELECT * from Table1 where date "
sqlStatement = sqlStatement & "Between " & sqlDate1 & " and " &
sqlDate2
Set rs = db.OpenRecordset(sqlStatement)
rs.MoveFirst
While Not rs.EOF
Debug.Print rs.Fields("id"); " "; rs.Fields("nom"); " ";
rs.Fields("date")
rs.MoveNext
Wend
Else
MsgBox "Au moins une des dates est invalide"
End If
End Sub
Espérant que ça aide,
Hello,
pour résumer une réponse à 3 posts précédents: comment faire une
requête SQL qui sélectionne les records compris entre 2 dates, les 2
dates étant saisies dans des TextBox. La requête ne se fait que si les
2 dates sont valides. Bref, voici le code commenté:
' ma db est db1.mdb
' une seule table, table1 avec 3 champs:
' id = index primaire numero unique (auto number)
' date = date (type date)
' nom = Text
' les 2 dates saisies le sont dans 2 textbox, Text1 et Text2
'
Private Sub Command1_Click()
Dim db As Database
Dim rs As Recordset
Dim sqlStatement As String
Dim sqlDate1 As String
Dim sqlDate2 As String
Set db = OpenDatabase("c:db1.mdb")
If IsDate(Text1.Text) And IsDate(Text2.Text) Then
sqlDate1 = "#" & Text1.Text & "#"
sqlDate2 = "#" & Text2.Text & "#"
sqlStatement = "SELECT * from Table1 where date "
sqlStatement = sqlStatement & "Between " & sqlDate1 & " and " &
sqlDate2
Set rs = db.OpenRecordset(sqlStatement)
rs.MoveFirst
While Not rs.EOF
Debug.Print rs.Fields("id"); " "; rs.Fields("nom"); " ";
rs.Fields("date")
rs.MoveNext
Wend
Else
MsgBox "Au moins une des dates est invalide"
End If
End Sub
Espérant que ça aide,
merci beaucoup Jean Marc mais une dernière question : et cette histoire
de format de date américain....on le gère comment ?
dans ta requête tu prends la date telle qu'elle est saisie, c'est à dire
au format français...on ne doit pas la convertir au format américain avant
précisions : je suis sous access 2000.
dav
Jean-Marc a écrit :
> Hello,
>
> pour résumer une réponse à 3 posts précédents: comment faire une
> requête SQL qui sélectionne les records compris entre 2 dates, les 2
> dates étant saisies dans des TextBox. La requête ne se fait que si les
> 2 dates sont valides. Bref, voici le code commenté:
>
> ' ma db est db1.mdb
> ' une seule table, table1 avec 3 champs:
> ' id = index primaire numero unique (auto number)
> ' date = date (type date)
> ' nom = Text
> ' les 2 dates saisies le sont dans 2 textbox, Text1 et Text2
> '
> Private Sub Command1_Click()
> Dim db As Database
> Dim rs As Recordset
> Dim sqlStatement As String
> Dim sqlDate1 As String
> Dim sqlDate2 As String
>
> Set db = OpenDatabase("c:db1.mdb")
>
> If IsDate(Text1.Text) And IsDate(Text2.Text) Then
> sqlDate1 = "#" & Text1.Text & "#"
> sqlDate2 = "#" & Text2.Text & "#"
> sqlStatement = "SELECT * from Table1 where date "
> sqlStatement = sqlStatement & "Between " & sqlDate1 & " and " &
> sqlDate2
> Set rs = db.OpenRecordset(sqlStatement)
> rs.MoveFirst
> While Not rs.EOF
> Debug.Print rs.Fields("id"); " "; rs.Fields("nom"); " ";
> rs.Fields("date")
> rs.MoveNext
> Wend
> Else
> MsgBox "Au moins une des dates est invalide"
> End If
> End Sub
>
> Espérant que ça aide,
>
merci beaucoup Jean Marc mais une dernière question : et cette histoire
de format de date américain....on le gère comment ?
dans ta requête tu prends la date telle qu'elle est saisie, c'est à dire
au format français...on ne doit pas la convertir au format américain avant
précisions : je suis sous access 2000.
dav
Jean-Marc a écrit :
> Hello,
>
> pour résumer une réponse à 3 posts précédents: comment faire une
> requête SQL qui sélectionne les records compris entre 2 dates, les 2
> dates étant saisies dans des TextBox. La requête ne se fait que si les
> 2 dates sont valides. Bref, voici le code commenté:
>
> ' ma db est db1.mdb
> ' une seule table, table1 avec 3 champs:
> ' id = index primaire numero unique (auto number)
> ' date = date (type date)
> ' nom = Text
> ' les 2 dates saisies le sont dans 2 textbox, Text1 et Text2
> '
> Private Sub Command1_Click()
> Dim db As Database
> Dim rs As Recordset
> Dim sqlStatement As String
> Dim sqlDate1 As String
> Dim sqlDate2 As String
>
> Set db = OpenDatabase("c:db1.mdb")
>
> If IsDate(Text1.Text) And IsDate(Text2.Text) Then
> sqlDate1 = "#" & Text1.Text & "#"
> sqlDate2 = "#" & Text2.Text & "#"
> sqlStatement = "SELECT * from Table1 where date "
> sqlStatement = sqlStatement & "Between " & sqlDate1 & " and " &
> sqlDate2
> Set rs = db.OpenRecordset(sqlStatement)
> rs.MoveFirst
> While Not rs.EOF
> Debug.Print rs.Fields("id"); " "; rs.Fields("nom"); " ";
> rs.Fields("date")
> rs.MoveNext
> Wend
> Else
> MsgBox "Au moins une des dates est invalide"
> End If
> End Sub
>
> Espérant que ça aide,
>
merci beaucoup Jean Marc mais une dernière question : et cette histoire
de format de date américain....on le gère comment ?
dans ta requête tu prends la date telle qu'elle est saisie, c'est à dire
au format français...on ne doit pas la convertir au format américain avant
précisions : je suis sous access 2000.
dav
Jean-Marc a écrit :
> Hello,
>
> pour résumer une réponse à 3 posts précédents: comment faire une
> requête SQL qui sélectionne les records compris entre 2 dates, les 2
> dates étant saisies dans des TextBox. La requête ne se fait que si les
> 2 dates sont valides. Bref, voici le code commenté:
>
> ' ma db est db1.mdb
> ' une seule table, table1 avec 3 champs:
> ' id = index primaire numero unique (auto number)
> ' date = date (type date)
> ' nom = Text
> ' les 2 dates saisies le sont dans 2 textbox, Text1 et Text2
> '
> Private Sub Command1_Click()
> Dim db As Database
> Dim rs As Recordset
> Dim sqlStatement As String
> Dim sqlDate1 As String
> Dim sqlDate2 As String
>
> Set db = OpenDatabase("c:db1.mdb")
>
> If IsDate(Text1.Text) And IsDate(Text2.Text) Then
> sqlDate1 = "#" & Text1.Text & "#"
> sqlDate2 = "#" & Text2.Text & "#"
> sqlStatement = "SELECT * from Table1 where date "
> sqlStatement = sqlStatement & "Between " & sqlDate1 & " and " &
> sqlDate2
> Set rs = db.OpenRecordset(sqlStatement)
> rs.MoveFirst
> While Not rs.EOF
> Debug.Print rs.Fields("id"); " "; rs.Fields("nom"); " ";
> rs.Fields("date")
> rs.MoveNext
> Wend
> Else
> MsgBox "Au moins une des dates est invalide"
> End If
> End Sub
>
> Espérant que ça aide,
>
Ces histoires de formats de date... J'ai testé ce que j'ai écrit
une base de données Acess 2000, j'avais saisi quelques
pour valider ma solution. J'ai saisi les dates en format
(JJ/MM/AAAA) dans Access et tout est ok. Si tu as la maîtrise de
base de données que tu utilises, alors tu n'auras pas de soucis.
ennuis commencent avec des DB comme Oracle ou DB2, qui peuvent
sur des systèmes ou le format de date n'est pas (toujours)
En pratique, on peut toujours savoir quel est le format des dates
la base, soit en interrogeant la DB elle même (on peut le faire
DB2 et Oracle, Access je ne sais pas), soit en faisant un truc
rustique mais qui fonctionne très bien: tu inséres un record avec
date formattée en "JJ/MM/AAAA" ou "JJ/MM/AA", choisie telle que
format américain, c'est une date invalide. Si ca passe, c'est ok tu
en format "JJ/MM/AAAA", sinon, ben c'est en américain et tu
alors les dates entrées avant de faire les requêtes de sélection
d'insert.
Certains recommandent même de stocker les dates comme des chaines
caractères, c'est à dire de faire du champ date dans la DB un champ
type string, et les dates par exemple comme ça "30112004". Tu
certains avantages liés au type date, mais tu n'as plus à t'en
pour ces histoires d'internationalisation. C'est toi qui a choisi
c'est comme ça. Je n'ai pas d'avis sur la question, ça peut être
bonne solution. J'ai eu des clients qui exigeaient un tel format
les dates, donc ça existe.
Ces histoires de formats de date... J'ai testé ce que j'ai écrit
une base de données Acess 2000, j'avais saisi quelques
pour valider ma solution. J'ai saisi les dates en format
(JJ/MM/AAAA) dans Access et tout est ok. Si tu as la maîtrise de
base de données que tu utilises, alors tu n'auras pas de soucis.
ennuis commencent avec des DB comme Oracle ou DB2, qui peuvent
sur des systèmes ou le format de date n'est pas (toujours)
En pratique, on peut toujours savoir quel est le format des dates
la base, soit en interrogeant la DB elle même (on peut le faire
DB2 et Oracle, Access je ne sais pas), soit en faisant un truc
rustique mais qui fonctionne très bien: tu inséres un record avec
date formattée en "JJ/MM/AAAA" ou "JJ/MM/AA", choisie telle que
format américain, c'est une date invalide. Si ca passe, c'est ok tu
en format "JJ/MM/AAAA", sinon, ben c'est en américain et tu
alors les dates entrées avant de faire les requêtes de sélection
d'insert.
Certains recommandent même de stocker les dates comme des chaines
caractères, c'est à dire de faire du champ date dans la DB un champ
type string, et les dates par exemple comme ça "30112004". Tu
certains avantages liés au type date, mais tu n'as plus à t'en
pour ces histoires d'internationalisation. C'est toi qui a choisi
c'est comme ça. Je n'ai pas d'avis sur la question, ça peut être
bonne solution. J'ai eu des clients qui exigeaient un tel format
les dates, donc ça existe.
Ces histoires de formats de date... J'ai testé ce que j'ai écrit
une base de données Acess 2000, j'avais saisi quelques
pour valider ma solution. J'ai saisi les dates en format
(JJ/MM/AAAA) dans Access et tout est ok. Si tu as la maîtrise de
base de données que tu utilises, alors tu n'auras pas de soucis.
ennuis commencent avec des DB comme Oracle ou DB2, qui peuvent
sur des systèmes ou le format de date n'est pas (toujours)
En pratique, on peut toujours savoir quel est le format des dates
la base, soit en interrogeant la DB elle même (on peut le faire
DB2 et Oracle, Access je ne sais pas), soit en faisant un truc
rustique mais qui fonctionne très bien: tu inséres un record avec
date formattée en "JJ/MM/AAAA" ou "JJ/MM/AA", choisie telle que
format américain, c'est une date invalide. Si ca passe, c'est ok tu
en format "JJ/MM/AAAA", sinon, ben c'est en américain et tu
alors les dates entrées avant de faire les requêtes de sélection
d'insert.
Certains recommandent même de stocker les dates comme des chaines
caractères, c'est à dire de faire du champ date dans la DB un champ
type string, et les dates par exemple comme ça "30112004". Tu
certains avantages liés au type date, mais tu n'as plus à t'en
pour ces histoires d'internationalisation. C'est toi qui a choisi
c'est comme ça. Je n'ai pas d'avis sur la question, ça peut être
bonne solution. J'ai eu des clients qui exigeaient un tel format
les dates, donc ça existe.
Bonjour Jean-Marc,
J'ai toutefois un doute sur l'inutilité de convertir les dates au format
US. SQL ne gère que le format US et donc je ne suis pas sûr, dés lors que
les dates saisies dans des TextBox sont bien des dates, que les tuples
renvoyés par la requête soient les bons.
Ainsi, avec ta procédure, très bien par ailleurs, un petit test sur la
période allant du 01/11/03(Text1) au 11/12/03(Text2) sur une table de
factures me retourne tous les tuples du 11/01/03 au 12/11/03 (les dates
sont au format FR dans Access2K-DAO comme Dav) alors que je voulais
obtenir la période allant du 1er nov au 12 déc. Donc, il me parait
impératif de convertir au format US les dates saisies dans les TextBox
pour obtenir les tuples requis.
Me tromperai-je ?
Bonjour Jean-Marc,
J'ai toutefois un doute sur l'inutilité de convertir les dates au format
US. SQL ne gère que le format US et donc je ne suis pas sûr, dés lors que
les dates saisies dans des TextBox sont bien des dates, que les tuples
renvoyés par la requête soient les bons.
Ainsi, avec ta procédure, très bien par ailleurs, un petit test sur la
période allant du 01/11/03(Text1) au 11/12/03(Text2) sur une table de
factures me retourne tous les tuples du 11/01/03 au 12/11/03 (les dates
sont au format FR dans Access2K-DAO comme Dav) alors que je voulais
obtenir la période allant du 1er nov au 12 déc. Donc, il me parait
impératif de convertir au format US les dates saisies dans les TextBox
pour obtenir les tuples requis.
Me tromperai-je ?
Bonjour Jean-Marc,
J'ai toutefois un doute sur l'inutilité de convertir les dates au format
US. SQL ne gère que le format US et donc je ne suis pas sûr, dés lors que
les dates saisies dans des TextBox sont bien des dates, que les tuples
renvoyés par la requête soient les bons.
Ainsi, avec ta procédure, très bien par ailleurs, un petit test sur la
période allant du 01/11/03(Text1) au 11/12/03(Text2) sur une table de
factures me retourne tous les tuples du 11/01/03 au 12/11/03 (les dates
sont au format FR dans Access2K-DAO comme Dav) alors que je voulais
obtenir la période allant du 1er nov au 12 déc. Donc, il me parait
impératif de convertir au format US les dates saisies dans les TextBox
pour obtenir les tuples requis.
Me tromperai-je ?
"Your name" a écrit dans le message de
news:
> Bonjour Jean-Marc,
>
> J'ai toutefois un doute sur l'inutilité de convertir les dates au format
> US. SQL ne gère que le format US et donc je ne suis pas sûr, dés lors
> les dates saisies dans des TextBox sont bien des dates, que les tuples
> renvoyés par la requête soient les bons.
>
> Ainsi, avec ta procédure, très bien par ailleurs, un petit test sur la
> période allant du 01/11/03(Text1) au 11/12/03(Text2) sur une table de
> factures me retourne tous les tuples du 11/01/03 au 12/11/03 (les dates
> sont au format FR dans Access2K-DAO comme Dav) alors que je voulais
> obtenir la période allant du 1er nov au 12 déc. Donc, il me parait
> impératif de convertir au format US les dates saisies dans les TextBox
> pour obtenir les tuples requis.
>
> Me tromperai-je ?
"Your name" <f_framZZ@hotmail.com> a écrit dans le message de
news:XnF95A8CDD8A71BCfframZZhotmailcom@207.46.248.16...
> Bonjour Jean-Marc,
>
> J'ai toutefois un doute sur l'inutilité de convertir les dates au format
> US. SQL ne gère que le format US et donc je ne suis pas sûr, dés lors
> les dates saisies dans des TextBox sont bien des dates, que les tuples
> renvoyés par la requête soient les bons.
>
> Ainsi, avec ta procédure, très bien par ailleurs, un petit test sur la
> période allant du 01/11/03(Text1) au 11/12/03(Text2) sur une table de
> factures me retourne tous les tuples du 11/01/03 au 12/11/03 (les dates
> sont au format FR dans Access2K-DAO comme Dav) alors que je voulais
> obtenir la période allant du 1er nov au 12 déc. Donc, il me parait
> impératif de convertir au format US les dates saisies dans les TextBox
> pour obtenir les tuples requis.
>
> Me tromperai-je ?
"Your name" a écrit dans le message de
news:
> Bonjour Jean-Marc,
>
> J'ai toutefois un doute sur l'inutilité de convertir les dates au format
> US. SQL ne gère que le format US et donc je ne suis pas sûr, dés lors
> les dates saisies dans des TextBox sont bien des dates, que les tuples
> renvoyés par la requête soient les bons.
>
> Ainsi, avec ta procédure, très bien par ailleurs, un petit test sur la
> période allant du 01/11/03(Text1) au 11/12/03(Text2) sur une table de
> factures me retourne tous les tuples du 11/01/03 au 12/11/03 (les dates
> sont au format FR dans Access2K-DAO comme Dav) alors que je voulais
> obtenir la période allant du 1er nov au 12 déc. Donc, il me parait
> impératif de convertir au format US les dates saisies dans les TextBox
> pour obtenir les tuples requis.
>
> Me tromperai-je ?
J'ai rien dit, tu as raison. Access m'a joué un tour.
Il faut convertir en format US dans ce cas, ou plus exactement en
"MM/JJ/AAAA".
Tu avais tout à fait raison, merci de l'avoir signalé.
Amicalement,
J'ai rien dit, tu as raison. Access m'a joué un tour.
Il faut convertir en format US dans ce cas, ou plus exactement en
"MM/JJ/AAAA".
Tu avais tout à fait raison, merci de l'avoir signalé.
Amicalement,
J'ai rien dit, tu as raison. Access m'a joué un tour.
Il faut convertir en format US dans ce cas, ou plus exactement en
"MM/JJ/AAAA".
Tu avais tout à fait raison, merci de l'avoir signalé.
Amicalement,
Re Jean-Marc,
J'allais patcher ma version de VB6 car j'ai que le SP5. Mais si
apparemment, tu as constaté les mêmes résultats que moi, alors je saute
car je ne suis pas sûr de ne pas avoir plus de désagrément.
arf, les dates , c'est infernal.
Du coup, à vouloir franciser tout, on s'emmèle les pinceaux. Notamment
Access où sous le concepteur de requête, il faut inscrire au format Fr et
en SQL en format US. Quid de l'homogénéité ? Et que dire sur la suite
Office où les fonctions sont, suivant le cas, accentuées ou non
pour Access et Annee() pour Excel)
J'en viens à regretter le bon temps du tout english
A nous de jongler ...
Re Jean-Marc,
J'allais patcher ma version de VB6 car j'ai que le SP5. Mais si
apparemment, tu as constaté les mêmes résultats que moi, alors je saute
car je ne suis pas sûr de ne pas avoir plus de désagrément.
arf, les dates , c'est infernal.
Du coup, à vouloir franciser tout, on s'emmèle les pinceaux. Notamment
Access où sous le concepteur de requête, il faut inscrire au format Fr et
en SQL en format US. Quid de l'homogénéité ? Et que dire sur la suite
Office où les fonctions sont, suivant le cas, accentuées ou non
pour Access et Annee() pour Excel)
J'en viens à regretter le bon temps du tout english
A nous de jongler ...
Re Jean-Marc,
J'allais patcher ma version de VB6 car j'ai que le SP5. Mais si
apparemment, tu as constaté les mêmes résultats que moi, alors je saute
car je ne suis pas sûr de ne pas avoir plus de désagrément.
arf, les dates , c'est infernal.
Du coup, à vouloir franciser tout, on s'emmèle les pinceaux. Notamment
Access où sous le concepteur de requête, il faut inscrire au format Fr et
en SQL en format US. Quid de l'homogénéité ? Et que dire sur la suite
Office où les fonctions sont, suivant le cas, accentuées ou non
pour Access et Annee() pour Excel)
J'en viens à regretter le bon temps du tout english
A nous de jongler ...