Zeos 6.6.4 stable und SQLite3

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Zeos 6.6.4 stable und SQLite3

Beitrag von bembulak »

Guten Morgen!

Nachdem ich mit "TSQLite3Connection" nicht weitergekommen bin, dachte ich mir: versuchen wir es doch mit Zeos.
Aktuelles Paket also geholt, installiert und los geht's. Sogar einen "denglischen" Eintrag im Wiki habe ich gefunden, der mir mit eben den Schritten ein wenig geholfen hat, die mir noch unbekannt sind/waren. (http://wiki.freepascal.org/Zeos_tutorial/de)

Funktioniert auch sehr gut und zur Designzeit wird auch schon fleißig auf die DB zugegriffen, da im DBGrid schon Spalten angelegt werden. (siehe Bild 1)

BildBild

Toll, dachte ich mir - gleich mal kompilieren. Meine Query ist ja ohnehin nur ein

Code: Alles auswählen

SELECT * FROM colours
, was kann da also schon schief gehen? Erster Durchlauf: Error. Ich habe vergessen die sqlite3.dll ins richtige Verzeichnis zu packen. Fehlende Datei nachgereicht und los...

Jetzt kommt der Teil, den ich nicht verstehe (sieh Bild 2):
BildBild
Die Anzahl und der Typ der Spalten ist richtig - nur wird eben statt dem Inhalt des Memofeldes, wie auf dem Bild zu sehen ist, auch zur Laufzeit nur das Wort "(MEMO)" an Stelle des Inhalts angezeigt.

Das entzieht sich leider meinem Verständnis.
Hat jemand einen Tip für mich?
Danke.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeos 6.6.4 stable und SQLite3

Beitrag von mse »

bembulak hat geschrieben:Die Anzahl und der Typ der Spalten ist richtig - nur wird eben statt dem Inhalt des Memofeldes, wie auf dem Bild zu sehen ist, auch zur Laufzeit nur das Wort "(MEMO)" an Stelle des Inhalts angezeigt.

Memo Felder werden als BLOB angesprochen welche nicht von allen Komponenten 100% unterstützt werden. Da du vermutlich nicht überall die "unbegrenzte" Feldlänge der Memo Felder benötigst, solltest du die Textfelder beim Anlegen der Datenbank mit "VARCHAR(nnn)" statt "TEXT" definieren, möglicherweise erzeugt ZEOS dann ftString statt ftMemo Felder.
Wie gesagt kenne ich Lazarus zuwenig gut um korrekte Antworten zu geben.
In MSEgui ist es grundsätzlich anders gelöst, die Speicherung der Textfelder in tmsesqlquery geschieht hier ohne feste Länge und es gibt die Option tmsesqlquery.controller.options dso_stringmemo um Memos als String-Felder abzubilden.

Martin

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Re: Zeos 6.6.4 stable und SQLite3

Beitrag von bembulak »

Hm, die DB existiert bereits, da ist nix mehr mit ändern. Aber gut. Danke für die Info - ich werde sehen, wie ich das lösen kann.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Zeos 6.6.4 stable und SQLite3

Beitrag von Christian »

Das kannst du nur lösen indem du ein Ownerdraw im Grid benutzt.
Es ist schon richtig das da nur (memo) oder (blob) angezeigt wird stell dir mal vor da ist die Bibel hinterlegt ...
Ich würde auch eher die DB ändern kann man ja jederzeit. Bei sqlite ist auch ein SQL Beispiel auf der Seite wie du die Felder in andere hineinkopieren kannst und damit den feldtypen ändern kannst.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Zeos 6.6.4 stable und SQLite3

Beitrag von monta »

Ich werf es einfach mal ein:

Code: Alles auswählen

SELECT DISTINCT substring ( Feld FROM 1 FOR 100 )

ich weis jetzt allerdings nicht, ob das unter SQLite geht und ab das dann als Char interpretiert wird, oder immernoch Blob zurückliefert. Eventuell auch als View und dann halt den View abfragen.
Johannes

Antworten