je veux utiliser un seul composant pour passer plusieurs requetes avec des parametrées, et je ne sais pas comment ecrire la requete en utilisant la propriete
Query.sql.text:= .....
avec ces parametres, indiquez moi please.
Version imprimable
je veux utiliser un seul composant pour passer plusieurs requetes avec des parametrées, et je ne sais pas comment ecrire la requete en utilisant la propriete
Query.sql.text:= .....
avec ces parametres, indiquez moi please.
ben tout simplement ...
Code:Query.sql.text:= 'SELECT * FROM table WHERE champ = :valeur';
essaye la touche :f1:Code:Query.Parameters.ParamByName('valeur').asVariant := 'truc';
j'ai essayé avec ces commandes mais l'etat tojours sort en vide (sans données)
Etat ? QuickReport ? le DataSet est-il relié ?
bien sure
le probleme c'est quand j'utilise les deux premiers parametres il fonctionne tres bien, et quand je rajoute le troisieme (date2) ne marche pas, je ne sais pas comment faire pour regler ce probleme.Code:
1
2
3
4
5
6
7
8
9 f.QMAntenne.Close; f.QMAntenne.SQL.Clear; f.QMAntenne.SQL.text:='Select t.antenne ,sum(q.montant) some from quittance q , titre t where ((q.codetitre=t.codetitre) and (q.anneeexercice =:anne) and (q.datequit between :date1 and :date2)) group by t.antenne order by some desc'; f.QMAntenne.Prepared:=true; f.QMAntenne.Parameters.ParamByName('anne').value:=DBLookupComboBox1.keyvalue; f.QMAntenne.Parameters.ParamByName('date1').value:=DateTimePicker1.Date; f.QMAntenne.Parameters.ParamByName('date2').value:=DateTimePicker2.Date; f.QMAntenne.Open; fenmantenne.quickrep1.preview;
Rajoute un ParamCheck := true dans le code (comme ci-dessous)
PS : Je me suis permis d'éclaircir ton code au passage ^^Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 With f.QMAntenne do begin Close; SQL.Clear; SQL.text:='Select t.antenne ,sum(q.montant) some from quittance q , titre t where ((q.codetitre=t.codetitre) and (q.anneeexercice =:anne) and (q.datequit between :date1 and :date2)) group by t.antenne order by some desc'; ParamCheck := True; // au cas ou Prepared:=true; With Parameters do begin ParamByName('anne').value:=DBLookupComboBox1.keyvalue; ParamByName('date1').value:=DateTimePicker1.Date; ParamByName('date2').value:=DateTimePicker2.Date; end; Open; end; fenmantenne.quickrep1.preview;
j'ai copier et coller ton code mais rien de nouveau, je vois que tout est logique et je comprend pas comment ca ne donne pas de resultat.
Es-tu sûr que ta requête retournes des résultats en réalité ?
Peux-tu tester "à la main" la requête en remplaçant les paramètres par les valeurs que tu mettrais normalement ?
Effectivement, le Between est-il correctement géré ?
ok j'ai connais le probleme finalement c'est la representation de la date dans la base de donnees, la date est representé comme suit AAAA-MM-JJ, maintenant je connais pas commet recupere la date a cette format directement a partir du composant DateTimePicker. pouvez m'aider our cette fonction.
Merci bien
... ensuite attention, oracle par exemple faut utiliser TO_DATE, en MySQL c'est automatique ...Code:FormatDateTime('YYYY-MM-DD', Picker.Date)
heu stop, si c'est réellement le problème c'est que le type des paramètres n'est pas détecté correctement et que les dates ont été détectées comme des strings. Tu utilises quoi comme SGBD ?
L'intérêt d'utiliser des requêtes paramétrées, c'est justement de s'affranchir des formats de dates et autres problèmes de formattage des données : Tu donnes un paramètre de type Date, avec une valeur TDateTime et le provider OLEDB sous-jaçent doit s'occuper des éventuelles convertions nécessaires.
Salut;
vaut mieux utiliser le bon type de champs surtout pour les Date et datetime
Si erreur de compilation remplacer AsDate par AsDateTime.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 With f.QMAntenne do begin Close; SQL.Clear; SQL.text:='Select t.antenne ,sum(q.montant) some from quittance q , titre t where ((q.codetitre=t.codetitre) and (q.anneeexercice =:anne) and (q.datequit between :date1 and :date2)) group by t.antenne order by some desc'; ParamCheck := True; // au cas ou Prepared:=true; With Parameters do begin ParamByName('anne').value:=DBLookupComboBox1.keyvalue; ParamByName('date1').AsDate:=DateTimePicker1.Date; ParamByName('date2').asDate:=DateTimePicker2.Date; end; Open; end; fenmantenne.quickrep1.preview;
COmme ça, tu ne saras pas obliger de formatter tes date.
A+
j'ai eu le meme probleme avec access quand j'utilise adoquery
ma conseille est
dans access pour les champs de type date/heure utilser le format date/abregé
puis avec adoquery utiliser la commande suivante:
adoquery1.parameters.parambyname('date').value:=datetostr(datetimepicker.date);
est ca marche surement:yaisse2:mrgreen