Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQLiteDB und BLOB(text) auslesen (https://www.delphipraxis.net/165993-sqlitedb-und-blob-text-auslesen.html)

Werwurm 25. Jan 2012 10:41

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!

Bernhard Geyer 25. Jan 2012 10:48

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.

Werwurm 25. Jan 2012 11:04

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;

DeddyH 25. Jan 2012 12:56

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?

Werwurm 25. Jan 2012 13:17

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:

DeddyH 25. Jan 2012 13:23

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.

Bernhard Geyer 25. Jan 2012 13:34

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 ...

Werwurm 25. Jan 2012 13:46

AW: SQLiteDB und BLOB(text) auslesen
 
Hallo DeedyH,

Zitat:

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.
Kannst Du mir ein wenig mehr Informationen geben?
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:

Ich tipp auf einen ZEOS-Fehler. Läne string wird mit Stream.size initialisisert aber daten mit Stream.size div SizeOf(Char) gelesen ...
Das heißt für mich?
Hast Du eventuell andere (bessere) Vorschläge den lesenden Zugriff auf die SQLite DB zu realisieren?

Bernhard Geyer 25. Jan 2012 13:57

AW: SQLiteDB und BLOB(text) auslesen
 
Zitat:

Zitat von Werwurm (Beitrag 1147542)
Kannst Du mir ein wenig mehr Informationen geben?
Wie bekomme ich die Daten wieder aus dem TStringStream wieder zur Laufzeit auslesen? Oder muss ich diese dann einer Komponente (z.B. TDBMemo) zuweisen?

Woher kommt TStringStream? Hast du wirklich ein Blob oder doch ein Textblob?
Poste doch mal etwas mehr Code


Zitat:

Zitat von Werwurm (Beitrag 1147542)
Das heißt für mich?
Hast Du eventuell andere (bessere) Vorschläge den lesenden Zugriff auf die SQLite DB zu realisieren?

Siehe post von DeddyH

DeddyH 25. Jan 2012 14:03

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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:18 Uhr.
Seite 1 von 2  1 2      

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