Einzelnen Beitrag anzeigen

Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#1

SQLite Datentyp Affinitäten

  Alt 11. Apr 2015, 19:35
Datenbank: SQLite • Version: 3 • Zugriff über: sqlite3.dll
Hallo Leute,
ich hab ein etwas größeres Projekt in Aussicht und auch gleich eine Frage dazu. Sicherlich kennen einige (vielleicht auch alle) von euch das Programm HeidiSQL. HeidiSQL unterstützt zur Zeit ja "nur" MySQL (hauptsächlich), MSSQL und PostgreSQL. SQLite sollte vielleicht irgendwann einmal integriert werden, steht aber aktuell noch nicht wirklich fest. Zumindest ist es das, was ich aus den Blogeinträgen und dem Forum rauslesen kann.

Da ich in letzter Zeit aber viel mit SQLite mache, dachte ich mir, ich brauche eine vernünftige Software, um den Inhalt einer Datenbank anzeigen und bearbeiten zu können. Hierfür gibt es zwar schon einige Programme wie z.B. den SQLite Administrator oder den SQLiteBrowser, die sind aber alle sehr spartanisch gehalten und sehr eingeschränkt in den Funktionen, die sie bieten. Kurz und knapp habe ich mich dazu entschlossen, einen eigenen SQLite Datenbank Browser (oder wie auch immer man das nennt) zu programmieren. Es ist zwar einiges an Arbeit und wird sich auch über einen sehr langen Zeitraum ziehen, bis das Programm etwas bieten kann, aber das soll es mir Wert sein. Wir haben in der letzten Zeit hier im Forum ja schon öfters Projekte gesehen, die seit mehreren Jahren programmiert werden, obwohl keiner daran geglaubt hätte. (Bsp.: das MMORPG in Delphi von Zudomon)

Meine Frage ist allerdings gleich zu beginn schon folgende: In SQLite gibt es ja keine direkten Datentypen wie man es von anderen Datenbanken kennt. Sondern nur noch solche Storage Classes (5 an der Zahl wenn ich mich richtig erinnere). Hierbei besteht das Problem, dass in eine Integer Spalte z.B. ein Text gespeichert werden kann. Wenn ich jetzt bspw. mit Zeos diese Spalte als Integer auslese mit Fields[x].AsInteger, dann kommt da logischerweise 0 raus, da ein Text nicht in einen Integer gewandelt werden kann. Allerdings muss es ja möglich sein, diesen Wert (als Text) wieder auslesen zu können. Der SQLiteBrowser beweist uns ja auch, dass das funktioniert. Nur ist die Frage, wie er das macht. Es gibt zwar in der DLL die Funktion sqlite_column_value(), aber ich weiß ja nicht, wann ich diese Funktion aufrufen muss, da ich ja nicht weiß, dass in der Spalte aktuell ein Text anstatt eine Zahl steht.

Wenn das möglich ist, dann wäre die nächste Frage, wie ich denn die Werte intern abspeichere, da ich nach Ausführung eines Statements alle Daten in einer eigenen Klasse, deren Instanzen in einer ObjectList verwaltet werden, vorhalten möchte. Nur weiß ich ja den Datentyp des aktuellen Feldes nicht, das ausgelesen wird. Ich dachte mir, man könnte so etwas mit Generics machen. Nur wollte ich die Klasseninstanz erzeugen und den Datentyp der Spalte übergeben. An dieser Stelle stehe ich jedoch wieder vor dem Problem mit den Affinitäten, da ja in Delphi kein in einer Variable vom Typ Integer gespeichert werden kann.

Ich weiß, dass war jetzt viel Text und ich hoffe es wurde alles verstanden. Aber vielleicht hat ja jemand die Lösung für mich. Wahrscheinlich werde ich mich aber wieder erst morgen früh melden können. Danke schonmal.
  Mit Zitat antworten Zitat