Recherche entre deux dates

Signaler
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 mars 2014
-
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
-
Bonjour,
je vous propose mon probléme,
1- j'ai une BDD access STOCK avec une table FACTURE avec les champs suivants
- Id_client
- nom
- adresse
- telephone
- email
- date_creation (format: jj/mm/aaaa)
- date_modification (format: jj/mm/aaaa)
- date_facture (format: jj/mm/aaaa)
touts ces champs dans la base acces est de type TEXT.

2- j'ai deux maskedtextbox(maskedtextbox1 date_debut & maskedtextbox2date_fin)

3 j'ai un button pour voir le résultat

4 j'ai un datagridview pour l'affichage des résultats

ce que je veux c'est faire une recherche toutes les factures entre deux dates et les affichées le résultat dans la datagridview.

pour un début j'ai le code suivant :

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
Dim date1 As Date
Dim date2 As Date
date1 = Format(CDate(MaskedTextBox1.Text.ToString), "dd/MM/yyyy")
date2 = Format(CDate(MaskedTextBox2.Text.ToString), "dd/MM/yyyy")


sql = "select * from stock where deffet between #" & date1.ToString("dd/MM/yyyy") & "# " And " #" & date2.ToString("dd/MM/yyyy") & "#;"

DataGridView1.DataSource = dts.Tables("stock")
DataGridView1.AutoResizeColumns()
End Sub


mais j'ai l'erreur suivant :

La conversion de la chaîne "select * from police where deffe" en type 'Long' n'est pas valide.

aider moi svp ça fais un bout de temps que je cherche la solution mais sans aucuns résultats.

19 réponses

Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Vérifie bien dans ton projet que Option Strict et Option Explicit sont à
On.
Car je le vois en 2 ligne que ce n'est pas le cas :
Dim date2 As Date
date2 = Format(CDate(MaskedTextBox2.Text.ToString), "dd/MM/yyyy")

Format retournant une String et pas un Date, ça bloquera.
Préfères utiliser Date.Parse pour passer de chaine à Date et pour l'inverse MaDate.ToString("...")

D'autre part, la date avec Access est au format MM/dd/yyyy.
Quel est le type de "sql" ?

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut

Que contient ta variable "sql" au moment de l'erreur ?

Ton champ deffe n'est peut-être pas de type date ?

Comme je te l'ai déjà dit, les dates sont stockées sous forme US et pas FR, même si, à l'affichage dans Access ou SQL Serveur, les dates sont correctement affichées.

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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Et je viens de voir que tu ne te sers pas de la requête "sql" ensuite. Normal ?
Messages postés
136
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 mars 2014
3
l'erreur est le suivant :
La conversion de la chaîne "select * from police where deffe" en type 'Long' n'est pas valide.
dans ma requette SQL :

sql = "select * from stock where deffet between #" & date1.ToString("dd/MM/yyyy") & "# " And " #" & date2.ToString("dd/MM/yyyy") & "#;"

deffet est de type text dans access

le champ
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Donc si ton champ est au format chaine, la seule manière d'avoir une date cohérente serait de la mettre au format : yyyy/MM/dd, sinon, le premier décembre serait avant le 20 janvier.

Ensuite, il faut que tu retires les # et que tu les remplacent pas des "

Et là peut être que ça fonctionnera, mais la recherche sera très longue (comparer une variable date est plus rapide que de comparer une chaine).

Si ton champ ne contient que des dates, préfère utiliser le type adapté à cela.

Messages postés
136
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
22 mars 2014
3
Bonjour,
j'ai fais tout ce que vous m'avez dit mais sans résultats.
bon à part toute cette salade, est ce que vous me proposer une autre méthode pour faire cette recherche, si elle existe ça sera gentil de votre part de me communiquer le code complet,
merci bcp.
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

On va reprendre les question :
- "La conversion de la chaîne "select * from police where deffe" en type 'Long' n'est pas valide. "
u as toujours cette erreur ?
Si oui, quel est le type de "sql" ?

- Problème de filtrage, as-tu typé en Date tes colonnes, as-tu bien le format adapté ?

Messages postés
144
Date d'inscription
dimanche 24 avril 2011
Statut
Membre
Dernière intervention
16 juin 2016

c'est à dire le type de sql???

galaxy2009
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Comment as-tu déclaré la variable "sql" ?

Messages postés
144
Date d'inscription
dimanche 24 avril 2011
Statut
Membre
Dernière intervention
16 juin 2016

bonjour,

Private sql As String


galaxy2009
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

2 questions :
- Pourquoi avoir déclaré cette variable en global alors qu'habituellement, une simple déclaration locale suffit ?
- Où est utilisée cette variable, car dans ton exemple, on voit l'assignation et pas son utilisation.

Sinon, je ne comprend pas d'où vient l'erreur, mais pas de ton bout de code montré par contre, d'où la 2ième question.


Messages postés
144
Date d'inscription
dimanche 24 avril 2011
Statut
Membre
Dernière intervention
16 juin 2016

Bonjour,
alors pour la premiére question est ce que je dois déclarer sql comme suit :
dim sql as string - ou - public sql as string
pour la 2éme je comprend pas bien ta question alors pour sql j'ai 2 déclarations :

1 dans form_load comme ça :
conn "provider microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\amc.mdb;"
cnx = New OleDbConnection
cnx.ConnectionString = conn
cnx.Open()
'-----------------------------------------------------------

'exécution de la commande(cmd),
'du dataadapter (dta),
'du dataset(dts),
'de la datatable (dtt)
'sql=>cmd=>dta
'cnx=>cmd
'dta=>dts=>dtt
sql = "select police.* from police"
cmd = New OleDbCommand(sql)
dta = New OleDbDataAdapter(cmd)
cmd.Connection() = cnx
'chargement du DataSet à partir du DataAdapter
dta.Fill(dts, "police")
'chargement de la DataTable à partir du DataSet
dtt = dts.Tables("police")

2 dans l'événement du button click comme ça :

sql = "select * from police where deffet between #" & date1.ToString("dd/MM/yyyy") & "# " And " #" & date2.ToString("dd/MM/yyyy") & "#;"



galaxy2009
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

1) Non, c'est déclarer SQL dans ta fonction et non dans ta classe/module.
2) Le pense que le problème de type vient qu'à un endroit, tu doit assigner ta variable dans un entier, mais c'est dans une autre fonction (enfin, je pense).

Messages postés
144
Date d'inscription
dimanche 24 avril 2011
Statut
Membre
Dernière intervention
16 juin 2016

si je fais comme ça dans l'evenement du button click
dim sql as integer


galaxy2009
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Il faut le déclaré en tant que String, pour qu'un chaine puisse entrer.
Mais sinon l'endroit de déclaration semble plus intéressant.
A condition de retirer la déclaration globale bien entendu.

Sinon, je pense que tu n'as toujours pas activé Option Strict, car tu aurais l'endroit de l'erreur (et même plusieurs erreurs je pense).

Messages postés
144
Date d'inscription
dimanche 24 avril 2011
Statut
Membre
Dernière intervention
16 juin 2016

exactement quand je met Option Strict en ON j'ai plusieur ligne de mon projet qui sont soulignées en bleu.

galaxy2009
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Corriges-les et ensuite, tests.

Messages postés
144
Date d'inscription
dimanche 24 avril 2011
Statut
Membre
Dernière intervention
16 juin 2016

Bonjour NHenry,
avec ce code j'ai plus d'erreur, mais comment afficher le résultat dans la datagriview parceque quand je click sur le button j'ai tous les enregistrements de ma table qui sont affichés, donc il n'y a pas de tri

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click


Dim date1 As Date
Dim date2 As Date
date1 = Format(CDate(Datedebut.Text.ToString), "dd/MM/yyyy")
date2 = Format(CDate(Datefin.Text.ToString), "dd/MM/yyyy")


SQL = "select * from police where deffet between " & date1 & " And " & date2 & ""

DataGridView1.DataSource = dts.Tables("police")
DataGridView1.AutoResizeColumns()

End Sub

donc est ce qu'il ya un code que je dois assigner à ma datagridview

merci NHenry .
galaxy2009
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Tu l'exécute où ta requête SQL ?

Il faut que tu fasse la requête dans ta base de données pour que ça soit utile.