Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DateTime als Parameter übergeben (https://www.delphipraxis.net/36516-datetime-als-parameter-uebergeben.html)

Klarabella 21. Dez 2004 09:01


DateTime als Parameter übergeben
 
Hallo!

Hab da mal wieder ein kleines Problemchen und kann in der OH nicht wirklich was finden, was mir hilft.
Ich habe drei SQL Abfragen, die jeweils an eine Funktion übergeben werden, die ein DataGrid füllt.
Dabei sind meine Abfragen jeweils auf einen Zeitraum spezifiziert, also BETWEEN startdatum AND enddatum.
Die beiden Werte (start- und enddatum) möchte ich als Parameter übergeben.

Wie mache ich das? Wie erstelle ich die Parameter und wie übergebe ich sie?

Hab folgenden Code:

Delphi-Quellcode:
sqlBefehl1 := 'SELECT * FROM Garantie_View WHERE (ablaufdatum BETWEEN ' +
             ''':startdatum'' AND '':enddatum'')';
  sqlBefehl2 := 'SELECT * FROM Garantie_View WHERE (bf_pov_feld_5 BETWEEN ' +
           ''':startdatum'' AND '':enddatum'')';
  sqlBefehl3 := 'SELECT * FROM Garantie_View2 WHERE (bf_pov_feld_5 BETWEEN ' +
           ''':startdatum'' AND '':enddatum'')';

  qryDatenbank.ParamByName('startdatum').AsTime := Date;
  qryDatenbank.ParamByName('enddatum').AsString := m_end_Datum;

  rowZaehler := 1;

  //Füllt das DataGrid und anschließend das StringGrid
  FillGrid(sqlBefehl1, rowZaehler, true);
  FillGrid(sqlBefehl2, rowZaehler, true);
  FillGrid(sqlBefehl3, rowZaehler, false);
Aber so funktioniert das nicht... :gruebel:

CenBells 21. Dez 2004 09:33

Re: DateTime als Parameter übergeben
 
Hi

In deinem Code ist die Stringverarbeitung nicht ganz sauber.
Hier die korrigierte Version

Delphi-Quellcode:
  sqlBefehl1 :=
    'SELECT * FROM Garantie_View WHERE (ablaufdatum BETWEEN ' +
    ':startdatum AND :enddatum)';
  sqlBefehl2 :=
    'SELECT * FROM Garantie_View WHERE (bf_pov_feld_5 BETWEEN ' +
    ':startdatum AND :enddatum)';
  sqlBefehl3 :=
    'SELECT * FROM Garantie_View2 WHERE (bf_pov_feld_5 BETWEEN ' +
    ':startdatum AND :enddatum)';
  // der rest genauso
Gruß
ken

Klarabella 21. Dez 2004 09:58

Re: DateTime als Parameter übergeben
 
Fehlermeldung:

"Parameter Startdatum nicht gefunden"
"Parameter Enddatum nicht gefunden"

Klarabella 21. Dez 2004 12:15

Re: DateTime als Parameter übergeben
 
Okay, ich glaub, ich hab den Fehler...

Hab Start- und Enddatum zur falschen Zeit zugewiesen :wall: - darf erst in der Funktion FillGrid nach der Zuweisung des SQL-Textes geschehen...

Damit sollte es funktionieren. :thumb:

MaBuSE 21. Dez 2004 12:40

Re: DateTime als Parameter übergeben
 
Zitat:

Zitat von Klarabella
Wie mache ich das? Wie erstelle ich die Parameter und wie übergebe ich sie?

Ich würde in Deinem Fall folgende Reihenfolge vorschlagen:
  • TQuery.SQL.Text zuweisen
  • Parameter zuweisen (Datum inkl. Zeit mit AsDateTime oder Datum mit der Zeit 00:00:00 mit AsDate)
  • TQuery öffnen
Wenn Du zuerst Parameter zuweist, kann es passieren, dass beim zuweisen des SQL.Text die Parameter verloren gehen.

AsDate, AsTime und As DateTime haben alle den Typ TDateTime.
Wenn Du nur eine Datum (Uhrzeit = '00:00:00') hast, verwende ParamByName('...').AsDate.
Wenn Du nur eine Uhrzeit hast, verwende ParamByName('...').AsTime.
Wenn Du einen Wert mit Datum und Uhrzeit hast, verwende ParamByName('...').AsDateTime.

Ich würde kein Datum mit AsTime übergeben.
Das mag zwar funktionieren, aber in einer anderen Delphi Version z.B. D2006 kann das schon anders sein.
Ich verwende daher grundsätzlich AsDateTime.

Delphi-Quellcode:
  sqlBefehl1 := 'SELECT * FROM Garantie_View WHERE (ablaufdatum BETWEEN ' +
             ':startdatum AND :enddatum)';

  qryDatenbank.SQL.Text := sqlBefehl1;
  qryDatenbank.ParamByName('startdatum').AsDate := Date;
  qryDatenbank.ParamByName('enddatum').AsDateTime := StrToDateTime(m_end_Datum);


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 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