![]() |
Datenbank: MS-SQL • Version: 2000 • Zugriff über: ADO (Query)
Probleme mit Blob
Hallo
im voraus möchte ich schon einmal danke sagen für die Hilfe die mir geboten wird. Also mein Problem: Ich versuche einfache Dateien in eine SQL-Datenbank hinein zukriegen. Im Momment handelt es sich um einfache TxT-Dateien, doch später können es auch andere bis jetzt unbekannte Formate sein. Mein Quelltext der dieses Problem betrifft sieht im Moment so aus :
Delphi-Quellcode:
Das Vorgehen sollte folgendes sein: ich speicher alle Daten rund um dieses Dokument/Datei und erst dann lade ich sie in die Datenbank.
procedure TFImportieren.SpeichernClick(Sender: TObject);
var SQLString:String; StateID,i : integer; fs : TFileStream; begin SQLString := 'SELECT STA_ID AS ID '; SQLString := SQLString + 'FROM STATE '; SQLString := SQLString + 'WHERE (STA_NAME LIKE '+Quotedstr(Fimportieren.CBDokumentenstatus.Text)+')'; UDaten.TFDaten.Create.ADOQOpen(SQLString,FMain.ADOQMainSelect1); StateID := FMain.ADOQMainSelect1.FieldValues['ID']; SQLString := 'INSERT INTO DOCUMENT (DOC_NAME, DOC_DESC, DOC_DATETIME, DOC_STATE ,DOC_VERSION) '; SQLString := SQLString + 'VALUES ('+Quotedstr(Fimportieren.LblEdtDokName.Text)+','+Quotedstr(Fimportieren.MBeschreibung.Text)+',CONVERT(datetime, '+quotedstr(FormatDateTime( 'dd/mm/yyyy HH:mm:ss', Now ))+', 104),'+Inttostr(StateID)+','+Fimportieren.LblEdtVersion.Text+' ) '; UDaten.TFDaten.Create.ADOQExce(SQLString,FMain.ADOQMainSelect1); SQLString := 'SELECT DOC_FILE FROM DOCUMENT WHERE (DOC_NAME LIKE '+Quotedstr(Fimportieren.LblEdtDokName.Text)+') AND (DOC_DESC LIKE '+Quotedstr(Fimportieren.MBeschreibung.Text)+') '; showmessage(SQLstring); UDaten.TFDaten.Create.ADOQopen(SQLString,FMain.ADOQMainSelect1); fs:= Tfilestream.Create(Fimportieren.LblEdtDateipfad.Text,fmOpenReadWrite); Fmain.ADOQMainSelect1.Edit; fs.Position:= 0; showmessage(inttostr(fs.size)+':'+inttostr(fs.Position)); \\Dient der hilfe ob fs wirklich daten enthält Fmain.ADOQMainSelect1.CreateBlobStream(Fmain.ADOQMainSelect1.FieldByName('DOC_FILE'),bmWrite).CopyFrom(fs,fs.Size); Fmain.ADOQMainSelect1.Post; Fmain.ADOQMainSelect1.Refresh; fs.Free; end; Aber ganz am ende der geschichte ist mein Feld immer noch leer. und ich weiss nicht wieso. Es ist einfach leer obwohl der Stream fs gefüllt ist. wenn jemand mir helfen könnte wäre ich sehr glücklich, denn ich quäle mich seit gut eine Woche mit diesem Problem Danke |
Re: Probleme mit Blob
Hallo,
probiere es mal so:
Delphi-Quellcode:
Grüße vom marabu
var
bs: TBlobStream; begin // ... fs := TFileStream.Create(Fimportieren.LblEdtDateipfad.Text, fmOpenRead); with Fmain.ADOQMainSelect1 do begin Edit; bs := CreateBlobStream(FieldByName('DOC_FILE'), bmWrite); bs.CopyFrom(fs, fs.Size); bs.Free; // könnte wichtig sein ... Post; Refresh; fs.Free; end; end; |
Re: Probleme mit Blob
Ich hab hier was gefunden, das auch funktioniert hat:
Delphi-Quellcode:
Eigentlich habe ich ein persistentes Feld 'MyField' vom Typ 'TBlobField', aber ich denke, das o.g. Code auch geht. Wenn nicht, dann geht der hier auf jeden Fall:
ADODataSet.Append;
TBlobField (ADODataSet.FieldByName('DOC_FIELD')).LoadFromFile (MyFileName); ADODataSet.Post;
Delphi-Quellcode:
MyBlobField.LoadFromFile (MyFileName);
|
Re: Probleme mit Blob
Zitat:
Gruss EL |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 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