cs_mimichette
Messages postés39Date d'inscriptiondimanche 17 mai 2009StatutMembreDernière intervention25 mai 2011
-
28 juin 2009 à 01:45
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 2015
-
2 juil. 2009 à 09:12
salut les amis, ouf enfin débarrassée du mémoire!!! , maintenant il me reste la présentation du logiciel et j'ai encore un problème:j'ai un datetimepicker et j'aimerais l'utiliser pour rechercher des enregistrements et les afficher quand je précise la date. parce que chaque enregistrement a une date dans ma BDD.
voici mon code:
procédure TForm2.DateTimePicker1Click(Sender: TObject);
begin
query1.Open;
query1.ExecSQL;
QUERY1.SQL.Add('select form DT');
QUERY1.SQL.Add('Where dt.d_eta_dt = " '+ FormatDateTime('dd/mm/yyyy',DateTimePicker1.Date)+'"');
query1.Close;
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 28 juin 2009 à 02:29
j'vais dire une connerie mais ExecSQL ne devrait pas etre aprés les SQL.ADD ?!
et puis pourquoi mettre 2 add alors qu'un suffit ?!
procedure TForm2.DateTimePicker1Change(Sender: TObject);
begin
with Query1 do
try
Open;
Add('SELECT * FROM dt WHERE dt.d_eta_dt='''+FormatDateTime('dd/mm/yyyy',(Sender as TDateTimePicker).Date+''';');
ExecSQL;
finally
Close;
end;
end;
cs_mimichette
Messages postés39Date d'inscriptiondimanche 17 mai 2009StatutMembreDernière intervention25 mai 2011 28 juin 2009 à 03:04
merci f0xi, mais quand j'éxécute il y a 2 petits problemes: " identificateur non déclaré add" et " type incompatible String et Tdate" peut_tu m'aider pour les résoudre?
beckerich
Messages postés302Date d'inscriptionjeudi 29 septembre 2005StatutMembreDernière intervention17 septembre 20132 28 juin 2009 à 03:16
avec mes petits moyens je propose :
procedure TForm2.DateTimePicker1Change(Sender: TObject);
begin
with Query1 do
SQL.Add('SELECT * FROM dt WHERE dt.d_eta_dt= :la_date');
Prepare;
ParamByname('la_date').Value := DateTimePicker1.Date;
Open;
end;
Il ne faut pas mettre le tout dans un try finally sinon le curseur de données est fermé avant tout traitement...
cs_mimichette
Messages postés39Date d'inscriptiondimanche 17 mai 2009StatutMembreDernière intervention25 mai 2011 28 juin 2009 à 05:01
j'utilise le composant SQL et quand je compile il m'affiche les messages de tout a l'heure!!
(pardon si je vous dérange mais a parement tous les bons informaticiens ne dorment pas!!!, moi je suis une débutante mais j'apprend avec vous ).
beckerich
Messages postés302Date d'inscriptionjeudi 29 septembre 2005StatutMembreDernière intervention17 septembre 20132 28 juin 2009 à 05:10
Quel composant sql ? TQuery, TSQLQuery, TADOQuery, TIBQuery, quelle systeme de base de données tu travailles ?
je vais pas tarder à aller me coucher car je bosse à 9h dimanche ;-<<
bon courage.
beckerich
Messages postés302Date d'inscriptionjeudi 29 septembre 2005StatutMembreDernière intervention17 septembre 20132 28 juin 2009 à 05:31
je comprends pas, tu passes par le bde apparemment, donc cela devrait fonctionner.
query1, c'est un composant que tu as posé sur une fiche ou que tu crées dynamiquement (Query1 := TQuery.Create(.....)) ?
les méthodes prepare et parambyname sont des méthodes de publiques de TQuery, je vois pas pourquoi le compilateur regimbe.
envoie un peu plus de code, si tu veux.
pas fatiguée à cette heure-là ?
cs_mimichette
Messages postés39Date d'inscriptiondimanche 17 mai 2009StatutMembreDernière intervention25 mai 2011 29 juin 2009 à 04:25
bonsoir ou bien bonjour, je ne sais plus?!
Pour répondre a beckerich, oui query1 est un composant que j'ai poser sur une fiche, mais je n'ai pas écris de code pour ce composant et la procedure que tu m'a montré je l'ai mise dans la procedure datetimepickerEnter pour pouvoir afficher les champs directement en cliquant dessus mais je devrai peut etre faire un bouton et un edit et entrer la date dans ce dernier?
et f0xi ta procedure s'exécute normalement mais elle ne fais aucun changement c'est peut etre parsque je l'ai mise dans datetime picker aussi?? je devrai la mettre ou stp. merci.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 29 juin 2009 à 16:27
Bonjour,
with Query1.SQL do
begin
Close;
Clear;
Add('SELECT * '); // il faut aérer un peu...
Add('FROM dt ');
Add('WHERE ');
Add('dt_eta_dt = ''' + FormatDateTime('dd/mm/yyyy', DateTimePicker1.Date) + '''' );
RequestLive := true; // Non car il n'y pas d'écriture
Open;
end;
ça me semble bon f0xi... mais bien sûr, il faut deux choses en plus :
- placer cette procédure sur le OnCloseUp du TDateTimePicker et
- relier le dbgrid pour l'affichage à un TDataSource lui même relié au Query1.
- prévoir aussi un petit refresh;
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 201510 29 juin 2009 à 20:33
Bonsoir à tous,
On ne peut pas mettre de fonction ni de variables/propriétés Delphi dans du code SQL, quel que soit le SGBD. Tu dois utiliser la propriété param de ton TQUERY et mettre à jour ce param lors du changem,ent de date..
ton SQL:
SELECT field1, field2, ...
FROM table
WHERE dt_eta_dt = :la_date
- tu définis la propriété param "la_date" (double-click sur la propriété param du tquery) avec DataType=ftDate
- tu définis l'évenement onchange de ton tdatetimepicker avec ce code:
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
if query1.active then query1.Close;
query1.params[0].value : = Datetimepicker1.Date;
query1.open;
end;
Ainsi à chaque modif de ton datepicker, les récords séléctionnés seront ceux voulus.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 30 juin 2009 à 10:53
On ne peut pas mettre de fonction ni de variables/propriétés Delphi dans du code SQL, quel que soit le SGBD.
HOU LA !
Il y a confusion entre une requête introduite dans un éditeur SQL et une autre construite dans du code delphi.
Ce n'est pas la même chose !
Dans la première, effectivement, on est limité (si on peut dire) aux fonctions autorisées par le type de la base de donnée choisie
En revanche, dans le second cas, une requête ça devient une simple chaîne de caractères que l'on peut bien sûr traiter comme un string normal.
ex: dans le cas qui nous est soumis, c'est-à-dire cliquer dans un TdateTimePicker et aussitôt les données qui sont affichées dans un Grid doivent être filtrées immédiatement :
Inutile de s'encombre d'un tableau de paramètres..
procedure TForm1.selectionDate;
begin
with Query1.SQL do
begin
Clear;
Add('Select * from events ');
Add('Where (Event_date = :param ) ');
Query1.ParamByName('param').AsDate := DateTimePicker1.Date;
Query1.Open;
end;
end;
procedure TForm1.DateTimePicker1CloseUp(Sender: TObject);
begin
SelectionDate;
end;
En ce qui concerne, les possibilités de paramètrages d'une requête, on peut faire beaucoup de choses :
ex:
avec création d'une variable string
var
Purge : string;
with QPurgeDT do
begin
try
DecodeDate(strToDate(DatePurge.text), Year, Month, Day);
Purge : = IntToStr(Month) + '/' + IntToStr(Day) + '/' + IntToStr(Year);
SQL.clear;
SQL.Add('SELECT COUNT(*) as Nombre FROM t_DT WHERE DATECLOTURE < ''' + Purge + '''');
Screen.Cursor := crHourGlass;
Open;
except
Application.MESSAGEBOX(PChar('Impossible d''analyser le fichier "DT" !'), ' Suppression', MB_OK + MB_ICONINFORMATION);
Exit;
end;
end;
et un autre avec une variable qui srocke une partie de la requête :
EnCours
: string;
EnCours : = ' WHERE(t_DT.DATECLOTURE is Null) and (t_DT.CODEETATDT <> ''AL'') and' +
'(t_DT.CODEETATDT <> ''AB'') and (t_DT.CODEETATDT <> ''REP'')';
que l'on introduit après coup :
procedure TQREtats.ppHeaderBand3BeforePrint(Sender: TObject);
var
i: integer;
begin
try
with Series1 do
begin
Clear;
for i := 1 to ppCTStat.Matrix.ColumnCount - 2 do
Add(ppCTStat.Matrix.value[i, 2], ppCTStat.Matrix.value[i, 1], clAqua);
with QREtats.QStat do
begin
close;
SQL.clear;
SQL.Add('SELECT count(t_DT.NumDT) as TotalEnCours FROM t_DT');
SQL.Add( EnCours );
open;
Add(FieldByName('TotalEnCours').Value, 'En cours', clAqua);
end;
end;
finally
close;
end;
ppCTStat.visible : = false;
end;
On peut aussi imaginer des requêtes à tiroirs genre :
if condition then
Add('quelquechose ')
else
Add('autre chose ');
etc. etc.
Pour répondre à ton message en MP sur le BDE + paradox
(je préfère les discussions sur le forum car ainsi tout le monde en profite..)
Oui, je déconseille d'utiliser ce système car il est simplement obsolète...
Ce système peut néanmoins continuer à fonctionner mais uniquement en mode LOCAL.
Les raisons pour lesquelles ce duo ne donnent plus satisfaction en réseau sont multiples :
- Index fragiles qui s'abîment régulièrement
- plantages réseau
- Difficultés de sa mise en oeuvre (pdoxwork.ini)
- Gestion lourde des conflits de partage
- pas de reverse engineering
- etc.etc.etc.
et si on veut faire du local alors je conseille plutôt les composants ADO avec une base access (les assistants dont très efficaces)
mieux encore->>Firebird
Il y a maintenant à notre disposition tout un ensemble de bases de données dont certaines sont free comme Firebird ou PostGreSQL etc. qui offrent à la fois de la souplesse (fonctions riches) et de la puissance (stockage important des données) le tout bien supérieures au système précédemment evoqué... et qui par ailleurs peuvent se logger avec des composants spécifiques directs évitant la couche ODBC.
et avec une facilité de mise en oeuvre déconcertante !
Plus personne ne développe dans de telles conditions aujourd'hui...
cs_mimichette
Messages postés39Date d'inscriptiondimanche 17 mai 2009StatutMembreDernière intervention25 mai 2011 1 juil. 2009 à 00:48
merci pour le code, mais j'aimerais afficher mes infos sur la forme qui contient le datetimepicker et plus exactement dans les dbedit, en choisissant la date et sans utiliser un dbgrid?
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 201510 1 juil. 2009 à 22:51
Bonjour à tous,ADO pour le
merci cantador pour tes remarques sur le DBE. Je suis d'accord avec toi sur le DBE qui utilise Paradox ou Dbase, toutes tes critiques je les ai rencontrées. Mais le DBE qui tape dans du IB ou du Oracle marche très bien.
Néanmoins je vais essayer ADO pour le local et tester des plantages:
- comment réagissent les NULL,
- reconstruction d'index
- et surtout performances: créer 5 million de records avec clé aléatoire, et comparer avec le DBE.
Merci encore