Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Abfrage mit Zeiten (https://www.delphipraxis.net/80724-sql-abfrage-mit-zeiten.html)

berens 14. Nov 2006 12:38

Datenbank: Access • Zugriff über: ADO

SQL-Abfrage mit Zeiten
 
Hi!

Ich brauche von meiner Tabelle Daten und filtere diese nach Datum/Uhrzeit.
Da die Werte flexibel sind und die Abfrage auch auf Systemen mit anderem Datumsformat funktionieren muss, müssen also Parameter her.

q: TAdoQuery;

Geht und liefert Ergebnis:
SQL-Code:
q.SQL.Add('SELECT * FROM T_Termin WHERE (dtEinblendZeit>1)');
Geht nicht (Fehler: Typen unverträglich):
SQL-Code:
  q.SQL.Add('SELECT * FROM T_Termin WHERE (dtEinblendZeit>:Ein)');
  q.Parameters.ParamByName('Ein').Value := 1;
Geht auch nicht (Ohne Fehlermeldung, liefert kein Ergebnis):
SQL-Code:
  q.SQL.Add('SELECT * FROM T_Termin WHERE (dtEinblendZeit>:Ein)');
  with q.Parameters.AddParameter do begin
    DataType := ftDateTime;
    Direction := pdInput;
    Value := 1;//floor(MonthCalendar1.Date);
    Name := 'Ein';
  end;

mkinzler 14. Nov 2006 13:39

Re: SQL-Abfrage mit Zeiten
 
Setzte mal den Parametertyp

berens 14. Nov 2006 14:13

Re: SQL-Abfrage mit Zeiten
 
Funktioniert.

SQL-Code:
  q.Parameters.ParamByName('Ein').DataType := ftDateTime;
  q.Parameters.ParamByName('Ein').Value := 1//floor(MonthCalendar1.Date);;
Wenn mir jetzt noch einer Erklären könnte, warum
SQL-Code:
q.SQL.Add('SELECT * FROM T_Termin WHERE (dtEinblendZeit>:Ein)');
  with q.Parameters.AddParameter do begin
    DataType := ftDateTime;
    Direction := pdInput;
    Value := 1;//floor(MonthCalendar1.Date);
    Name := 'Ein';
  end;
nicht funktioniert, dann wäre Spitze!

Danke soweit schonmal für den Tip, damit komme ich echt weiter ;)

Hansa 14. Nov 2006 14:53

Re: SQL-Abfrage mit Zeiten
 
Weiß nicht, warum was nicht funktioniert. Das dürfte jedenfalls funktionieren :

SQL-Code:
  q.Parameters.ParamByName('Ein').AsDateTime := floor(MonthCalendar1.Date);
  q.SQL.SelectSQL.Text('SELECT * FROM T_Termin WHERE (dtEinblendZeit>:Ein)');
  q.Open;
Mehr braucht man nicht und man sieht auch gleich, um was es geht. Der Befehl zum abschicken der Abfrage (hier das open) könnte unter Access auch anders heißen.

berens 14. Nov 2006 14:57

Re: SQL-Abfrage mit Zeiten
 
Das mit dem Open stimmt so wie du es gesagt hast und deine Methode mit "asDateTime" ist auch praktisch und erspart Tipparbeit. Vor allem ist mir das sicherer als "Variant".

Wie gesagt, damit funktiniert es. War halt bloß die Frage warum das mit AddParam nicht ging... Naja egal, Haupsache dass.

Vielen Dank für die Antworten!

Hansa 14. Nov 2006 15:29

Re: SQL-Abfrage mit Zeiten
 
Im Beispiel das "Parameters" ist bestimmt auch überflüssig. Gut wenn es so geht. Wichtig ist immer, daß man auch versteht warum. Da Du das ja jetzt verstehst ist es IMHO unnötig genau zu wissen, woran es liegt, daß etwas nicht geht. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz