Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Feld 'Datum' kann nicht als Typ DateTime angesprochen werden. (https://www.delphipraxis.net/190299-feld-datum-kann-nicht-als-typ-datetime-angesprochen-werden.html)

Devil1925 21. Sep 2016 11:16

Datenbank: SQLITE • Version: ??? • Zugriff über: uniDAC

Feld 'Datum' kann nicht als Typ DateTime angesprochen werden.
 
Moin Leute, ich habe folgendes Problem:

Ich mache eine SQL-Abfrage auf eine SQLITE - Datenbank

Code:
Select Erstellt as Datum, ID from Tabelle
UNION
Select datetime('now', 'localtime') as Datum, id from Tabelle2
Erstellt ist vom Typ DateTime, ID vom Typ Integer

nun möchte ich über

Delphi-Quellcode:

Quey1.FieldByname('Datum').AsDatetime
auf das Feld zugreifen. allerdings wird mir hier immer die Fehlermeldung
Code:
Feld 'Datum' kann nicht als Typ DateTime angesprochen werden.
ausgegeben.

Hat hier jemand eine zündende Idee?

Vielen Dank schonmal im Vorraus!

MrSpock 21. Sep 2016 11:40

AW: Feld 'Datum' kann nicht als Typ DateTime angesprochen werden.
 
Habe noch nicht mit SQLITE gearbeitet, aver gerade mal nachgeschaut. Die Funktion datetime liefert einen String zurück. Grundsätzlich könnte man den Typ mit CAST in der SQL Abfrage umwandel, aber ich habe keinen Datumstyp in SQLITE gefunden.

Bleibt wohl nur die Umwandlung in Delphi von String in DateTime.

Stevie 21. Sep 2016 11:50

AW: Feld 'Datum' kann nicht als Typ DateTime angesprochen werden.
 
Quey1.FieldByname('Datum').DataType = ?

himitsu 21. Sep 2016 12:17

AW: Feld 'Datum' kann nicht als Typ DateTime angesprochen werden.
 
SQLite kennt keine Zeit-Typen (praktisch ... nutze kein SQLite, aber hab das grade erst vor Kurzem gelernt :lol:)

Bezüglich TDateTime muß der String im lokalen Datumsformat vorlitextegen, oder als Float (der interne TDateTime-Typ) oder Integer aus der Datenbank kommen, damit AsDateTime das umwandeln kann. (das automatische Umwandeln passiert dabei im Client, daher auch das lokale Datumsformat, beim String)

SQLite kennt nur TEXT, NUMERIC, INTEGER, REAL und BLOB und und versucht alle anderen Typen darauf abzubilden.
Alles, was es nicht zuordnen kann, wird als TEXT NUMERIC behandelt.
https://www.sqlite.org/datatype3.html
http://perfect-knowhow.de/best-pract...-type-affinity

Stevie 21. Sep 2016 12:29

AW: Feld 'Datum' kann nicht als Typ DateTime angesprochen werden.
 
How does UniDAC handle SQLite DateTime fields?

Aviator 21. Sep 2016 13:31

AW: Feld 'Datum' kann nicht als Typ DateTime angesprochen werden.
 
Zitat:

Zitat von himitsu (Beitrag 1348278)
Alles, was es nicht zuordnen kann, wird als TEXT behandelt.

Das ist so nicht richtig. Die Erkennung des Datentyps wird nach einem festen Schema abgearbeitet. Trifft keine Regeln zu, dann ist der Datentyp Numeric.

Zitat:

Zitat von SQLite Documentation
3.1. Determination Of Column Affinity
The affinity of a column is determined by the declared type of the column, according to the following rules in the order shown:
  1. If the declared type contains the string "INT" then it is assigned INTEGER affinity.
  2. If the declared type of the column contains any of the strings "CHAR", "CLOB", or "TEXT" then that column has TEXT affinity. Notice that the type VARCHAR contains the string "CHAR" and is thus assigned TEXT affinity.
  3. If the declared type for a column contains the string "BLOB" or if no type is specified then the column has affinity BLOB.
  4. If the declared type for a column contains any of the strings "REAL", "FLOA", or "DOUB" then the column has REAL affinity.
  5. Otherwise, the affinity is NUMERIC.

Note that the order of the rules for determining column affinity is important. A column whose declared type is "CHARINT" will match both rules 1 and 2 but the first rule takes precedence and so the column affinity will be INTEGER.

Quelle: https://www.sqlite.org/datatype3.htm...olumn_affinity

DeddyH 21. Sep 2016 13:35

AW: Feld 'Datum' kann nicht als Typ DateTime angesprochen werden.
 
Und ergänzend dazu:
Zitat:

2.2. Date and Time Datatype

SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:

TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.
Applications can chose to store dates and times in any of these formats and freely convert between formats using the built-in date and time functions.

Devil1925 21. Sep 2016 14:20

AW: Feld 'Datum' kann nicht als Typ DateTime angesprochen werden.
 
Vielen Dank! Ihr habt mir viel weiter geholfen! jetzt funktioniert alles!


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