![]() |
Datenbank: Oracle • Version: 9.2 • Zugriff über: Odac
Datei in einem Blob feld auf einem Oracle 9.2 Server speiche
Hallo,
Ich versuche auf einem Ora Server eine Datei Binär in einem Blobfeld zu speichern und wieder auszulesen, es werden aber nicht immer Daten gespeichert, laden funktioniert garnicht. Das speichern mach ich folgendermassen:
Delphi-Quellcode:
oder so:
var
Stream1: TFileStream; Stream2: TStream; begin opendialog1.Execute; Stream1:= TFileStream.Create (Opendialog1.Filename, fmOpenread); Oratable1.Active:= True; Oratable1.Edit; OraTable1.FieldByName ('ID').asinteger:= 1; Stream2:= OraTable1.CreateBlobStream (OraTable1.FieldByName ('DAT'), bmWrite); Stream2.CopyFrom (Stream1, 0); Oratable1.Post; Oratable1.Active:= False; Stream2.Free; Stream1.Free; end;
Delphi-Quellcode:
das 2 Bsp. funktionierte Anfangs glaube ich, das erste funktionierte garnicht.
var
Stream1: TFileStream; begin opendialog1.Execute; Stream1:= TFileStream.Create (Opendialog1.Filename, fmOpenread); Oratable1.Active:= True; Oratable1.Edit; OraTable1.FieldByName ('ID').asinteger:= 1; TBlobField (OraTable1.FieldByName ('DAT')).LoadFromStream (Stream1); Oratable1.Post; Oratable1.Active:= False; Stream1.Free; end; Dass das speichern nicht klappt merke ich daran das er einfach zu schnell ist wenn man eine etwas größere Datei nimmt. Das Lesen des Blobs hab ich so gemacht:
Delphi-Quellcode:
Die Datei die ich aber aus dem Blob heraus gespeichert habe, hatte immer 0 bytes, obwohl ich vermuten kann das das Blob Feld Daten hatte.
var
Stream1: TFileStream; begin Savedialog1.Execute; Stream1:= TFileStream.Create (Savedialog1.Filename, fmCreate); Oratable1.Active:= True; TBlobField (OraTable1.FieldByName ('DAT')).SaveToStream (Stream1); Stream1.Free; Oratable1.Active:= False; end; Wäre für Hilfe sehr Dankbar. Mfg lordcroc |
Re: Datei in einem Blob feld auf einem Oracle 9.2 Server
Hallo,
mit den CLOBs hatte ich auch schon meine Erlebnisse, bspw. funktionierten NCLOBs bei bestimmten Textlängen nicht. Zugriff allerdings über ADO und den Provider von Oracle. Aber zumindest ein Statement zum Prüfen, ob die Daten angekommen sind, kann ich beitragen:
SQL-Code:
Gruß
SELECT DBMS_LOB.GETLENGTH(<fieldname>) FROM <tablename>;
Christoph |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:20 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