![]() |
Datenbank: SQLite • Version: 2.8 • Zugriff über: ZEOS 7.0.0 Alpha
SQLiteDB und BLOB(text) auslesen
Hallo,
mal wieder stehe ich total auf dem Schlauch. Ich bekomme eine fertige SQLite Datenbank als Datei bereitgestellt und soll diese nun weiter bearbeiten. Dazu muss ich ein paar SQL Abfragen erstellen. Soweit so gut. Unter anderem müsste ich auch den Inhalt eines BLOB-Feldes auslesen. Es handelt sich um ein Textblob. Das bekomme ich nicht hin. Wenn ich versuche die Daten direkt als String auszulesen bekomme ich folgendes Ergebnis: '湏祬䤠'#$206E'湩彺摩' Obwohl es das sein sollte: Only In Amerika Habe bisher keinerlei Erfahrungen mit BLOB Feldern, weiß jedoch das diese nicht direkt in der Tabelle gespeichert werden. Leider bin auch mit suchen nicht wirklich weitergekommen. Ich finde meistens nur Beiträge zum arbeiten mit Bilder als BLOB. Was mache ich hier falsch? Vielen Dank für Eure Hilfe! |
AW: SQLiteDB und BLOB(text) auslesen
Asl was für einen Stringtyp ist es in der DB gespeichert? Ansi oder Widestring?
Deine Beispielstring schaut danach aus das in der DB Ansistrings liegen und du (D2009: String = Unicodestring) falsch das ausliest. Ersetz mal in deiner Auslesefunktion String durch AnsiString. |
AW: SQLiteDB und BLOB(text) auslesen
Vielen Dank für die schnelle Antwort.
Bin mir nicht sicher welcher Stringtyp verwendet wird. Habe aber gerade die Auslesefunktion auf AnsiString geändert und es klappt zur Hälfte. Nun bekomme ich als Ausgabe: 'Only In inz_id'#0 Anstelle von: Only In America Das Programm ist aktuell nur zum Testen um erstmal die Rahmenbedingungen abzugrenzen: So versuche ich aktuell an den Inhalt zu kommen.
Delphi-Quellcode:
s := DM.ZQ_Alben.FieldByName('title').AsAnsiString;
|
AW: SQLiteDB und BLOB(text) auslesen
Das liest sich, als sei es ein "verunglückter Fremdschlüssel", der beim Einfügen in den BLOB-Daten gelandet ist. Bist Du sicher, dass in dem Feld wirklich der gesuchte String enthalten ist?
|
AW: SQLiteDB und BLOB(text) auslesen
Liste der Anhänge anzeigen (Anzahl: 2)
Ich bin mir sicher, dass der Text enthalten sein soll.
Wenn ich die DB-Datei in einem externen Explorer (SQL Maestro) öffne habe ich den Zugriff auf die Daten. Ich verstehe dass nicht so richtig. Im externen Explorer werden mir die Daten wie folgt angezeigt: Anhang 36134 Im Programm aber wie folgt: Anhang 36135 Scheinbar wird nur der HEX Code entsprechend in die Zeichen umgewandelt. Habe die ersten 20 Datensätze mal verglichen und es passt bei keinem einzigen Datensatz. Kann mich mal jemand auf die richtige Spur bringen? Das ist mein erstes Project mit Delphi2009 und mit ZEOS hab ich bisher keine Erfahrungen. Eventuell ist auch hier irgendwas falsch eingestellt :oops: |
AW: SQLiteDB und BLOB(text) auslesen
Und wenn Du das Feld zunächst in einen BLOBStream liest und von da in einen StringStream kopierst? Leider kenne ich mich mit ZEOS nicht aus, aber ich hoffe (vermute), die können mit TBLOBStream umgehen.
|
AW: SQLiteDB und BLOB(text) auslesen
Ich tipp auf einen ZEOS-Fehler. Läne string wird mit Stream.size initialisisert aber daten mit Stream.size div SizeOf(Char) gelesen ...
|
AW: SQLiteDB und BLOB(text) auslesen
Hallo DeedyH,
Zitat:
Wie bekomme ich die Daten wieder aus dem TStringStream wieder zur Laufzeit auslesen? Oder muss ich diese dann einer Komponente (z.B. TDBMemo) zuweisen? Hallo Bernhard, Zitat:
Hast Du eventuell andere (bessere) Vorschläge den lesenden Zugriff auf die SQLite DB zu realisieren? |
AW: SQLiteDB und BLOB(text) auslesen
Zitat:
Poste doch mal etwas mehr Code Zitat:
|
AW: SQLiteDB und BLOB(text) auslesen
Aus dem Kopf, Fehler vorbehalten:
Delphi-Quellcode:
var
BStream: TStream; SStream: TStringStream; begin BStream := CreateBlobStream(Feld, bmRead); try SStream := TStringStream.Create; try // SStream.Encoding := <Passendes aussuchen>; SStream.CopyFrom(BStream, 0); ShowMessage(SStream.DataString); finally SStream.Free; end; finally BStream.Free; end; end; |
AW: SQLiteDB und BLOB(text) auslesen
Hallo DeedyH,
habe Deinen Ansatz probiert:
Delphi-Quellcode:
Var i: Integer;
BStream: TStream; SStream: TStringStream; begin DM.ZCon.Connect; DM.ZQ_Alben.SQL.Clear; DM.ZQ_Alben.SQL.Add('select titlesort, title from albums;'); DM.ZQ_Alben.Open; DM.ZQ_Alben.First; ShowMessage(IntToStr(DM.ZQ_Alben.RecordCount)); // Nur um zu sehen ob DB-Verbindung läuft BStream := DM.ZQ_Alben.CreateBlobStream(DM.ZQ_Alben.FieldByName('title'), bmRead); try SStream := TStringStream.Create; try //SStream.Encoding.ASCII; //SStream.Encoding.UTF8; //SStream.Encoding.UTF7; //SStream.Encoding.Unicode; //SStream.Encoding.BigEndianUnicode; //SStream.Encoding.Default; // Alle Varianten bringen dasselbe Ergebnis :-( SStream.CopyFrom(BStream, 0); ShowMessage(SStream.DataString); finally SStream.Free; end; finally BStream.Free; end; DM.ZQ_Alben.Close; DM.ZCon.Disconnect; end; Leider alles mit dem selben Erfolg. Die Daten werden nach wie vor falsch ausgegeben. Vielleicht nochmal die Frage ob andere/bessere Alternativen zu ZEOS gibt? An der DB kann ich leider nicht ändern... |
AW: SQLiteDB und BLOB(text) auslesen
Welchen Wert hat BStream.Size?
|
AW: SQLiteDB und BLOB(text) auslesen
Zur Not kann man auch hier einmal nachsehen:
![]() |
AW: SQLiteDB und BLOB(text) auslesen
Hallo Bernhard,
Zitat:
Den Link von DeddyH werde ich später nachlesen, da ich gerade mal kurz weg muss. |
AW: SQLiteDB und BLOB(text) auslesen
Hmm... wie ist es so?
Delphi-Quellcode:
SStream := TStringStream.Create('', TEncoding.Ansi);
|
AW: SQLiteDB und BLOB(text) auslesen
DeddyH Du bist mein Held!! :-D
Code:
Das war das Geheimnis. Hab die ersten 30 Datensätze getestet und das Ergebnis erhalten, welches ich erwartet hab.
SStream := TStringStream.Create('', TEncoding.ASCII);
Jetzt versuche ich das noch zu verstehen und alles wird gut :wink: Nur der Form halber: Hab mir den Link ![]() Du könntest Recht haben, das der letzte Eintrag was wäre. Jedoch steht in der Beschreibung dass es sich um einen Zugriff auf SQLite3 DB handelt ich arbeite zwangsläufig mit V2.8. Wie ich bei ZEOS schon schmerzlich feststellen musste ist der Zugriff nicht der selbe :( Aber wie gesagt ich habe es nicht getestet.. Nochmals vielen Dank für Eure Hilfe!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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 by Thomas Breitkreuz