Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Alle Datensätze finden, die kleine als akt. Zeit-60 min sind (https://www.delphipraxis.net/110056-alle-datensaetze-finden-die-kleine-als-akt-zeit-60-min-sind.html)

nachtstreuner60 12. Mär 2008 10:27


Alle Datensätze finden, die kleine als akt. Zeit-60 min sind
 
Hallo SQL-Experten,

ich greife über ZEOS auf Firebird DB zu, hier habe ich zwei Felder definiert :

1.) Datum als Date (01.01.2008)
2.) Zeit als String (14:30:05)

nun würde ich gerne mittels einer SQl-Abfrage alle Datensätze filtern, die
älter sind als die aktuelle Abfragezeit - 60 minuten.

ich weiss das sowas mit between geht, habe aber mal wieder einen Kurzschluss,
da ja vorher als Parameter die aktuelle Abfragzeit abzüglich 60 Minuten übergeben werden
muss.

Vielen dank schonmal für eure kreativen Anregungen

Gruß
Nachtstreuner60

mkinzler 12. Mär 2008 10:30

Re: Alle Datensätze finden, die kleine als akt. Zeit-60 min
 
Zitat:

Zeit als String (14:30:05)
Warum ?

nachtstreuner60 12. Mär 2008 10:31

Re: Alle Datensätze finden, die kleine als akt. Zeit-60 min
 
Hallo mKinzler,

wurde von meinen Chefs so vorgegeben, stammt noch aus alten dbase Zeiten.

mkinzler 12. Mär 2008 10:34

Re: Alle Datensätze finden, die kleine als akt. Zeit-60 min
 
Das ist aber ein ganz ganz schlechte Idee. So musst du zuerst den String-Wert zerlegen um diese Prüfen zu können. Hier würde ich an deiner Stelle nochmal mit deinem Chef reden.

nachtstreuner60 12. Mär 2008 10:39

Re: Alle Datensätze finden, die kleine als akt. Zeit-60 min
 
Hallo mKinzler,

wie würde das aussehen, wenn ich ein zusätzliches Feld als Time einfüge, und die bisherigen Zeitwerte(string) per Programm in einen Time-Wert umwandle?

Geht so was überhaupt so einfach?

Gruß nachtstreuner60

Hab gleich mal einen termin bei meinem Chefi.. :zwinker:

mkinzler 12. Mär 2008 10:48

Re: Alle Datensätze finden, die kleine als akt. Zeit-60 min
 
Zitat:

Wie würde das aussehen, wenn ich ein zusätzliches Feld als Time einfüge, und die bisherigen Zeitwerte(string) per Programm in einen Time-Wert umwandle?
Musst du wohl so machen.

nachtstreuner60 12. Mär 2008 11:21

Re: Alle Datensätze finden, die kleine als akt. Zeit-60 min
 
Hallo SQL-Experten,

ich habe also jetzt ein Datumsfeld Typ Date
und ein Zeitfeld Typ Time

habe auch ein paar Testdatensätze drin.

Wie würde jetzt die Abfrage aussehen ?

SQL-Code:
Select Datum,Zeit from Bestell where Datum =< :ddatum and ZEIT =< :dZEIT
Delphi-Quellcode:
with zQueryIDOC do begin
    zQUeryIDOC.Active := false;
    dSQL := 'Select Datum,ZEIT from BESTELL where (DATUM =< :dDATUM) '+
     'and (ZEIT =< :dZEIT) order by SATZID';
    zQueryIDOC.SQL.Text := dSQL;
    ZQUERYIDOC.ParamByName('dDATUM').AsDATE := date;
    ZqueryIDOC.ParamByName('dZEIT').AsTime := IncMinute(time,-60);

    zQueryIDOC.ExecSQL;
    zQUeryIDOC.Active := true;
   end;
Hier erhalte ich aber eine Fehlermeldung !

mkinzler 12. Mär 2008 11:29

Re: Alle Datensätze finden, die kleine als akt. Zeit-60 min
 
Welche FB-Version?
In FB < 2.1 würde ich eine UDf heranziehen z.B. F_AGEINHOURS der FreeAdHocUDF sonst DATEDIFF

nachtstreuner60 12. Mär 2008 13:44

Re: Alle Datensätze finden, die kleine als akt. Zeit-60 min
 
Danke mKinzler für den Hinweis,

habe mit UDF noch nichts zu tun gehabt, werde mich aber mit dem Thema mal genauer beschäftigen.

Habe aber nun zu meinem Problem folgende Lösung gefunden :
Delphi-Quellcode:
    zroUNQUIT.Active := false;
    dSQL := 'Select * from BESTELL where (DATUM < :dDATUM and QUITTUNG = :dQuit) '+
     'or ( Datum = :dDATUM and ZEIT <= :dZEIT and QUITTUNG = :dQUIT )'+
     ' order by SATZID';
    zroUNQUIT.SQL.Text := dSQL;
    zroUNQUIT.ParamByName('dDATUM').AsDATE := date;
    zroUNQUIT.ParamByName('dZEIT').AsTime := IncHour(time,-dWarten);
    zroUNQUIT.ParamByName('dQUIT').AsInteger := 0;
    zroUNQUIT.ExecSQL;
    zroUNQUIT.Active := true;
dWarten hat den Wert 2, hiermit werden mir alle Datensätze angezeigt, die
a) älter als zwei Stunden zum Abfragezeitpunkt sind und die
b) generell vom Vortag (zeitunabhängig) sind

dQuit hat nur einen Status 0 oder 1

IncHour(time,-dWarten) zieht von der aktuellen Zeit zwei Stunden ab.

Stellt diese Lösung einen passablen Weg gegenüber UDF dar ?

mfg
nachtstreuner60


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