germany1970
Messages postés134Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention22 mars 2014
-
16 mai 2011 à 19:02
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024
-
18 mai 2011 à 14:13
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.
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024159 16 mai 2011 à 19:35
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" ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 16 mai 2011 à 19:37
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)
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024159 17 mai 2011 à 09:58
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.
germany1970
Messages postés134Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention22 mars 20143 17 mai 2011 à 17:58
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.
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024159 17 mai 2011 à 19:54
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é ?
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024159 17 mai 2011 à 22:20
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.
galaxy2009
Messages postés144Date d'inscriptiondimanche 24 avril 2011StatutMembreDernière intervention16 juin 2016 17 mai 2011 à 22:29
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") & "#;"
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024159 17 mai 2011 à 22:39
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).
NHenry
Messages postés15101Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention24 mars 2024159 17 mai 2011 à 22:47
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).
galaxy2009
Messages postés144Date d'inscriptiondimanche 24 avril 2011StatutMembreDernière intervention16 juin 2016 18 mai 2011 à 13:48
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 & ""