Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL mit Union und Unterabfragen liefert falsches Ergebnis (https://www.delphipraxis.net/85171-sql-mit-union-und-unterabfragen-liefert-falsches-ergebnis.html)

mkinzler 28. Jan 2007 12:30

Re: SQL mit Union und Unterabfragen liefert falsches Ergebni
 
Besser so:
Delphi-Quellcode:
Params.ParambyName('voDatum').Value := vonDatum.Date;

marabu 28. Jan 2007 12:35

Re: SQL mit Union und Unterabfragen liefert falsches Ergebni
 
Hallo,

du könntest den Benutzer die Datum- und Zeitwerte über DateTimePicker einstellen lassen:

Delphi-Quellcode:
begin
  datSQL := '... and DATUM + ZEIT between :dtStart and dtEnd order by DATUM, ZEIT';
  // ...
  Params.ParambyName('dtStart').AsDateTime := dtpVonDatum.Date + dtpVonZeit.Time;
Freundliche Grüße

nachtstreuner60 28. Jan 2007 12:43

Re: SQL mit Union und Unterabfragen liefert falsches Ergebni
 
...Ihr seit ja schnell,

also ich habs erstmal so probiert !

Delphi-Quellcode:
 datSQL := ' and DATUM + ZEIT between (:voDatvoZeit and :biDatbiZeit) order by DATUM Zeit';
       with dModul do begin
          ZQueryKanban.ParamByName('voDatbiZeit').AsString :=
            QuotedStr(Datetostr(vonDatum.Date)+ ' '+ edvonDATvonZEIT.Text);
          zQueryKanban.ParamByName('biDatbiZeit').AsString :=
            QuotedStr(DateToStr(bisDatum.date)+ ' '+ edBisDATbisZeit.Text);
       end;
:
:
: weiter unten dann dies
:
:
Delphi-Quellcode:
with dMODUL do begin
   zQueryKanban.SQL.Clear;
   zQueryKANBAN.SQL.Text := dSQL+datSQL;
   reditSQL.Clear;
   rEditSQL.Lines.Add(zQueryKANBAN.SQL.Text);
   showmessage(zqueryKANBAN.SQL.Text);
   zQueryKANBAN.Open;
end;

nun erhalte ich die Fehlermeldung, das
'Parameter : voDatbiZeit nicht gefunden'

die Daten werden von einem DateTimePicker (Datum) und Editfeld (Zeit) geliefert.
Siehe obigen Screenshot im Anhang

mit freundlichen Grüßen

[edit=Jelly] Delphi Tags angepasst, Mfg, Jelly[/edit]

mkinzler 28. Jan 2007 12:46

Re: SQL mit Union und Unterabfragen liefert falsches Ergebni
 
Die Parameter müßen nach dem QueryString gesetzt werden. Dann werden die Parameter automatisch erzeugt und können gesetzt werden.
BTW Verzichte besser auf den Umweg über den String.

nachtstreuner60 28. Jan 2007 12:56

Re: SQL mit Union und Unterabfragen liefert falsches Ergebni
 
Hallo mKinzler,

habs nun abgeändert, bekomme aber trotzdem die Fehlermeldung.

Delphi-Quellcode:
       datSQL := ' and DATUM + ZEIT between (:voDatvoZeit and :biDatbiZeit) order by DATUM Zeit';
// Zeige den SQL-BEFEHL

with dMODUL do begin
   zQueryKanban.SQL.Clear;
   zQueryKANBAN.SQL.Text := dSQL+datSQL;
   ZQueryKanban.ParamByName('voDatbiZeit').AsString :=
      QuotedStr(Datetostr(vonDatum.Date)+ ' '+ edvonDATvonZEIT.Text);
   zQueryKanban.ParamByName('biDatbiZeit').AsString :=
      QuotedStr(DateToStr(bisDatum.date)+ ' '+ edBisDATbisZeit.Text);


   reditSQL.Clear;
   rEditSQL.Lines.Add(zQueryKANBAN.SQL.Text);

   showmessage(zqueryKANBAN.SQL.Text);
   zQueryKANBAN.Open;
end;
Verzichte besser auf den Umweg über String ? Ich habe für die Eingabe ein DateTimePicker fürs Datum und ein Editfeld für die Zeitangabe(also String). Wie kann ich da auf den String verzichten ?

Gruß Nachtstreuner

mkinzler 28. Jan 2007 13:11

Re: SQL mit Union und Unterabfragen liefert falsches Ergebni
 
Delphi-Quellcode:
datSQL := ' and DATUM + ZEIT between :voDatvoZeit and :biDatbiZeit order by DATUM Zeit';
// Zeige den SQL-BEFEHL

with dMODUL do begin
   //zQueryKanban.SQL.Clear; ist Überflüssig
   zQueryKANBAN.SQL.Text := dSQL+datSQL;
   ZQueryKanban.ParamByName('voDatvoZeit').asDateTime := vonDatum.Date + StrToTime(edvonDATvonZEIT.Text);
   zQueryKanban.ParamByName('biDatbiZeit').AsDateTime := bisDatum.date + StrToTime(edBisDATbisZeit.Text);

   reditSQL.Clear;
   rEditSQL.Lines.Add(zQueryKANBAN.SQL.Text);

   showmessage(zqueryKANBAN.SQL.Text);
   zQueryKANBAN.Open;
end;

nachtstreuner60 28. Jan 2007 13:38

Re: SQL mit Union und Unterabfragen liefert falsches Ergebni
 
Liste der Anhänge anzeigen (Anzahl: 2)
Danke mKinzler,

funktioniert mit denParametern, allerdings mit einem Schönheitsfehler.

Folgende Params wurden übergeben :

siehe Anhang Abfr_erst

Die Datensätze im roten Rechteck siehe Bild Anhang (Abfrage.jpg) hätten nicht
angezeigt werden dürfen, da sie nach 15:45:00 Uhr liegen.


und hier noch mal der Prog.Code:

Delphi-Quellcode:
// ist vonDatumbisZeit und gefüllt, und bisDatum unterschiedlich zu von Datum
// und bisDatbisZeit gefüllt, dann
//*********** Zeitraum über mehrere Tage hinweg *******************************
if (length(trim(edvonDatvonZeit.Text)) = 8) and
   (length(trim(edVonDatbisZeit.Text)) <> 8) then begin
  if (length(trim(edbisDatbisZeit.Text)) = 8) and
     (length(trim(edBisDatvonZeit.Text)) <> 8) then begin

     datSQL := ' and DATUM + ZEIT between :voDatvoZeit and :biDatbiZeit order by DATUM, Zeit';

  end;
end;
// Zeige den SQL-BEFEHL

with dMODUL do begin
   //zQueryKanban.SQL.Clear;
   zQueryKANBAN.SQL.Text := dSQL+datSQL;
   ZQueryKanban.ParamByName('voDatvoZeit').asDateTime := vonDatum.Date + StrToTime(edvonDATvonZEIT.Text);
   zQueryKanban.ParamByName('biDatbiZeit').AsDateTime := bisDatum.Date + StrToTime(edBisDATbisZeit.Text);



   reditSQL.Clear;
   rEditSQL.Lines.Add(zQueryKANBAN.SQL.Text);

   //showmessage(zqueryKANBAN.SQL.Text);
   zQueryKANBAN.Open;
end;
fehlt in der Query irgendwo vielleicht eine Klammer ?

mfg
nachtstreuner

mkinzler 28. Jan 2007 13:46

Re: SQL mit Union und Unterabfragen liefert falsches Ergebni
 
Wenn Datum und Zeit 2 Felder sind würde ich sie auch getrennt abfragen. Oder besser nur ein Feld in der Datenbank verwenden.

Hawkeye219 28. Jan 2007 14:02

Re: SQL mit Union und Unterabfragen liefert falsches Ergebni
 
Hallo,

die Komponente TDateTimePicker enthält einen Implementierungsfehler: in den Eigenschaften .Date und .Time werden immer Datum- und Zeitanteil geliefert. Benötigst du nur das Datum, muß du den Nachkommaanteil mit Delphi-Referenz durchsuchenInt oder Delphi-Referenz durchsuchenTrunc abschneiden. Zum Isolieren des Zeitanteils kannst du die Funktion Delphi-Referenz durchsuchenFrac verwenden.

Gruß Hawkeye

hoika 29. Jan 2007 07:04

Re: SQL mit Union und Unterabfragen liefert falsches Ergebni
 
Hallo,

voDatbiZeit hast du im ParamByName stehen,
voDatvoZeit in der SQL-Abfrage.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 Uhr.
Seite 2 von 3     12 3      

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