BDE: Mit Daten (DateTime) rechnen



  • Hi

    Ich weiß, das ist eigentlich kein BDE Forum, aber ich hab sonst keine passende Quelle gefunden. Ich arbeite mit BDE auf einer Paradox Datenbank (also Local SQL 😞 ) und möchte in einem Statement gerne nach Datasets suchen deren Datum kleiner als ein anderer Abfragewert + 20min ist.

    Mein Problem ist, wie ich in Local SQL eine Zeit addiere. Laut Doku kann DateTime in Paradox mit dem '+' Operator umgehen. Aber in welchem Format möchte es das Intervall vorgesetzt bekommen? 😕

    Viele Grüße
    Banzai!



  • In genau dem gleichen Format. Nur eben bei Tag, Monat, Jahr 0 angeben.
    Meiner Erfahrung nach ist es bei Statements mit Datum und Zeitangaben parametrisierte Statements zu verwenden. Diese Parameter lassen sich dann sehr einfach, ohne irgendwelche Anpassungen des Formats durchführen zu müssen, über ein TDateTime-Objekt setzen.



  • Hi

    Das habe ich versucht.

    SELECT *
    FROM 'test.db'
    WHERE AcDate2 <= ('05.09.2005 12:03:18'+'00.00.0000 00:20:00');
    

    Gibt mir die Fehlermeldung "Keine Übereinstimmung der Typen im Ausdruck"

    SELECT *
    FROM 'test.db'
    WHERE AcDate2 <= ('05.09.2005 12:03:18');
    

    geht aber.

    Was meinst Du mit parametrisierten Statements? Die Berechnung im Code ausführen, und dann wieder als Parameter übergeben? Ich würde wegen der Geschwindigkeit eigentlich lieber die ganze Abefrage in ein Statement packen.



  • Hm, woher hast Du die Information, dass die BDE Datum-/Zeitwerte addieren kann?
    Ich finde in der Local SQL Hilfe dazu nichts. Notfalls nach Numeric CASTen, addieren und wieder zurück casten.

    Außerdem stimmt das Format, meiner Meinung, nach nicht. Hab zwar lange nix mehr mit Paradox gemacht, aber mußte da nicht ein spezielles Format verwendet werden? Oder waren nur Tag und Monat vertauscht? Weiß ich nicht mehr. Wenn Du Parameter verwendest, hast Du diese Probleme nicht.
    Da ich davon ausgehe, dass sich das Datum, nach dem Du selektierst ändert, mußt Du doch eh das Statement neu schreiben. Es ist weniger Arbeit nur die Parameter neu zu setzen. Die Performance leidet darunter nicht. Eigentlich sollte die Verwendung von Parametern günstiger sein. Zumindest auf echten SQL-Servern bleibt die Abfrage 'prepared' und muß nicht erneut vorbereitet werden.



  • Joe_M schrieb:

    Hm, woher hast Du die Information, dass die BDE Datum-/Zeitwerte addieren kann?

    Es gibt in der Doku eine Seite Paradox-Feldtypen, die arithmetische Operatoren zulassen. (Die ist auf Arithmetische Operatoren verlinkt.) Daraus hab ich das mal gedeutet.

    Joe_M. schrieb:

    Da ich davon ausgehe, dass sich das Datum, nach dem Du selektierst ändert, mußt Du doch eh das Statement neu schreiben

    Ich selektiere ein MIN(imum) und will dann alles was bis auf 20 min da ran kommt. Es wäre also nett sowas wie

    (SELECT MIN(Date) FROM 'test.db') + 20min
    

    machen zu können. Irgendwie scheint das aber nicht zu wollen, also hol ich eben das Minimum, addier im Code und schick eine neue Anfrage ab ... Gefällt mir nicht wirklich, aber anders geht's wohl nicht.

    Grüße,
    Banzai!



  • In meiner Local-SQL Hilfe steht:

    Anwendungsbereich

    Arithmetische Operatoren lassen sich nur auf numerische Werte anwenden. Sollen nicht-numerische Werte verarbeitet werden, muß die betreffende Spalte zuerst mit Hilfe der Funktion CAST in einen numerischen Datentyp konvertiert werden.

    Mit CAST AS sollte sich das Problem also lösen lassen.


Anmelden zum Antworten