![]() |
Datenbank: SQLite • Version: 3.9.2 • Zugriff über: Firedac
Problem mit Date in SQLite3 und Firedac
Hallo,
ich habe hier ein seltsames Problem SQLLITE, Berlin U2 , Firedac Ich bin daran ein altes Project (nicht von mir) von der BDE nach Firedac zu konvertieren jetzt steh ich echt auf dem Schlauch Die Daten sind schon alle in einer neuen SQLite DB Folgende Tabelle (gekürzt) :
Code:
CREATE TABLE "rechnungen"(
"ID" INTEGER PRIMARY KEY, "Zahlbis" DATE, "Mahnstufe" INTEGER DEFAULT 0, "Gebucht" BOOLEAN DEFAULT false, "istBezahlt" BOOLEAN DEFAULT false, "istTeil" BOOLEAN DEFAULT false, "Gesamtbetrag" CURRENCY, "Zahlbetrag" CURRENCY ); Mit dieser Query:
Code:
Das funktioniert und liefert das gewünschte Ergebnis
SELECT
SUM(Gesamtbetrag) as ZAHLUNG , Mahnstufe FROM RECHNUNGEN WHERE (Gebucht and ((not istbezahlt) or istteil)) and ( coalesce (Gesamtbetrag, 0) > coalesce(Zahlbetrag, 0) /* and ( ZAHLBIS <= :HEUTE ) */ /* and ( ZAHLBIS <= CURRENT_DATE ) */ ) GROUP BY MAHNSTUFE ORDER BY MAHNSTUFE Nehme ich eine der Zeilen mit dem ZAHLBIS in die Abfrage kommen keine Ergebnisse mehr zurück Das erste Feld wird zu einem BLOB??? Im SQLite expert funktioniert das ohne Probleme Hat jemand ne Idee? |
AW: Problem mit Date in SQLite3 und Firedac
"kommt kein Ergebnis"
also leere Menge? Oder vielleicht unterdrückter Fehler in Try Finally/Except? Wenn Du die Tabelle mit dem Date Typ in Delphi persistierst, welcher Datentyp wird dann in Delphi angezeigt? Und was bedeutet ".Nehme ich eine der Zeilen mit dem ZAHLBIS in die Abfrage .." Als Where Bedingung? Oder nur zur Ausgabe? Wenn als "Where", wie übergibst Du den Datentyp? fYI: sqLite arbeitet intern nicht mit Datentypen, dazu gibt es hier auch schon Threads, die das bearbeiten. Bei sqLite selbst auf der HP ist das auch erläutert. |
AW: Problem mit Date in SQLite3 und Firedac
Zitat:
SQL-Code:
gelöscht wird.
/* and ( ZAHLBIS <= :HEUTE ) */
Da suche ich erst einmal nach den üblichen Verdächtigen Was steht in :HEUTE ? passt das Format/der Typ überhaupt zu ZAHLBIS? Zitat:
Gruß K-H |
AW: Problem mit Date in SQLite3 und Firedac
Jobo:
Gemeint sind die 2 auskommentierten Zeilen im SQL-Code :) Bei der 2. Variante mit CURRENT_DATE stellt sich die Frage nach dem Type nicht, da es eine SQL-Funktion ist (die es auch in SQLite gibt). @Fritzew: Bei 1. Variante (mit :HEUTE) ist wirklich die Frage, was reingeht. Aber die CURRENT_DATE Variante sollte auf alle Fälle funktionieren. |
AW: Problem mit Date in SQLite3 und Firedac
Es ist tatsächlich so das mit dem CURRENT_DATE der Feldtyp
Code:
als Blob zurückkommt als leere Menge
SUM(Gesamtbetrag) as ZAHLUNG
Wenn ich den Parameter benutze mit
Delphi-Quellcode:
Habe ich auch eine leere Menge und der Feldtyp ist ein Blob
opSum.Params[0].AsDate := Date;
Zitat:
Code:
Lasse ich den Vergleich mit CURRENT_DATE weg klappt es
select Zahlbis from rechnungen
where Zahlbis not NULL and zahlbis <= CURRENT_DATE order by Zahlbis |
AW: Problem mit Date in SQLite3 und Firedac
In der Connetion mal das SQL loggen?
Nicht dass FireDAC auf die geniale Idee kommt und CURRENT_DATE local ersetzt. |
AW: Problem mit Date in SQLite3 und Firedac
![]() Zitat:
|
AW: Problem mit Date in SQLite3 und Firedac
Zitat:
|
AW: Problem mit Date in SQLite3 und Firedac
Zitat:
Ggf könnte man sqLite mal per Union Clause oder sum(gesamtsumme)+0 zu einem anderen Typen zwingen. |
AW: Problem mit Date in SQLite3 und Firedac
Ich persönlich speicher Datum und Zeitwerte generell als Unixtimestamp (integer). Lediglich für die Anzeige im Programm selbst wandel ich das mal um. Dafür bieten die Programmiersprachen, die ich kenne, alle in irgendeiner Form eine Konvertierung an (Bei Delphi UnixToTDateTime bzw. TDateTimeToUnix), sofern sie nicht selbst diesen Typ nutzen.
|
AW: Problem mit Date in SQLite3 und Firedac
Tja habe jetzt noch etwas "herumgespielt "
Neue Datenbank angelegt mit 1 Tabelle
Code:
CREATE TABLE [Test](
[ID] INTEGER PRIMARY KEY NOT NULL, [DATE2] DATETIME );
Code:
funktioniert mit Firedac nicht.
Select DATE2
from Test where DATE2 <= CURRENT_DATE Ohne den Vergleich geht es. |
AW: Problem mit Date in SQLite3 und Firedac
Sieht so danach aus als hätte Firedac da wohl ein Problem.
Probier in deinem Test doch mal folgende Variante:
Delphi-Quellcode:
Select DATE2
from Test where NOT (DATE2 > CURRENT_DATE ) |
AW: Problem mit Date in SQLite3 und Firedac
Als was wird die Date2-Spalte denn in der SQLite-Datenbank erstellt? SQLite hat selbst keinen Date/Datetime-Typ.
|
AW: Problem mit Date in SQLite3 und Firedac
Hallo
Zitat:
Habe jetzt eine Lösung gefunden
Code:
daß funktioniert
Anstatt CURRENT_DATE benutze ich Date('now')
|
AW: Problem mit Date in SQLite3 und Firedac
SQLite kann DateTimes in verschiedenen Formaten darstellen (hatte hier schon wer verlinkt).
SQL-Code:
SELECT CURRENT_DATE, Date('now')
Was kommen hier denn für Feldtypen bei raus? Eventuell benötigt man für Vergleiche die selben internen Typen. |
AW: Problem mit Date in SQLite3 und Firedac
Zitat:
CURRENT_DATE liefert einen Double DATE('now') einen String Habe jetzt noch mal in der Documentation zu SQlite nachgelesen, ist wohl tatsächlich so dass man sich auf einen Typ für Datetime und Co innerhalb einer DB festlegen sollte. Und dann dem entsprechend die passenden functionen benutzt. Das "versteckt" Firedac denke ich zu gut..... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 Uhr. |
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-2025 by Thomas Breitkreuz