AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DateTime als Parameter übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

DateTime als Parameter übergeben

Ein Thema von Klarabella · begonnen am 21. Dez 2004 · letzter Beitrag vom 21. Dez 2004
Antwort Antwort
Klarabella

Registriert seit: 28. Sep 2004
59 Beiträge
 
#1

DateTime als Parameter übergeben

  Alt 21. Dez 2004, 10:01
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...
  Mit Zitat antworten Zitat
Benutzerbild von CenBells
CenBells

Registriert seit: 30. Mär 2003
Ort: Kiel urspr. Lübeck
176 Beiträge
 
Delphi 7 Professional
 
#2

Re: DateTime als Parameter übergeben

  Alt 21. Dez 2004, 10:33
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
Ein Objekt ist eine zur Ausführungszeit vorhandene für seine Instanzvariablen Speicherplatz allokierende Instanz, die sich gemäß dem Protokoll ihrer Klasse verhält.
  Mit Zitat antworten Zitat
Klarabella

Registriert seit: 28. Sep 2004
59 Beiträge
 
#3

Re: DateTime als Parameter übergeben

  Alt 21. Dez 2004, 10:58
Fehlermeldung:

"Parameter Startdatum nicht gefunden"
"Parameter Enddatum nicht gefunden"
  Mit Zitat antworten Zitat
Klarabella

Registriert seit: 28. Sep 2004
59 Beiträge
 
#4

Re: DateTime als Parameter übergeben

  Alt 21. Dez 2004, 13:15
Okay, ich glaub, ich hab den Fehler...

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

Damit sollte es funktionieren.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: DateTime als Parameter übergeben

  Alt 21. Dez 2004, 13:40
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);
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 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