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 |
Re: Alle Datensätze finden, die kleine als akt. Zeit-60 min
Zitat:
|
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. |
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.
|
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: |
Re: Alle Datensätze finden, die kleine als akt. Zeit-60 min
Zitat:
|
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:
Hier erhalte ich aber eine Fehlermeldung !
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; |
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 |
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:
dWarten hat den Wert 2, hiermit werden mir alle Datensätze angezeigt, die
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; 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