AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Blob

Ein Thema von ledoerr · begonnen am 13. Dez 2005 · letzter Beitrag vom 21. Feb 2007
Antwort Antwort
ledoerr

Registriert seit: 29. Jan 2004
15 Beiträge
 
#1

Probleme mit Blob

  Alt 13. Dez 2005, 17:37
Datenbank: MS-SQL • Version: 2000 • Zugriff über: ADO (Query)
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:
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;
Das Vorgehen sollte folgendes sein: ich speicher alle Daten rund um dieses Dokument/Datei und erst dann lade ich sie in die Datenbank.

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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Probleme mit Blob

  Alt 13. Dez 2005, 18:53
Hallo,

probiere es mal so:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Probleme mit Blob

  Alt 13. Dez 2005, 19:35
Ich hab hier was gefunden, das auch funktioniert hat:
Delphi-Quellcode:
ADODataSet.Append;
TBlobField (ADODataSet.FieldByName('DOC_FIELD')).LoadFromFile (MyFileName);
ADODataSet.Post;
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:

MyBlobField.LoadFromFile (MyFileName);
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#4

Re: Probleme mit Blob

  Alt 21. Feb 2007, 12:36
Zitat von alzaimar:
Ich hab hier was gefunden, das auch funktioniert hat:
Delphi-Quellcode:
ADODataSet.Append;
TBlobField (ADODataSet.FieldByName('DOC_FIELD')).LoadFromFile (MyFileName);
ADODataSet.Post;
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:

MyBlobField.LoadFromFile (MyFileName);
Wo geht hier heraus hervor, um welchen Datensatz es sich handelt?`

Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr.
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