Announcement

Collapse
No announcement yet.

Datei in BLOB speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datei in BLOB speichern

    Hi,
    Habe folgende Fehlermeldung:
    "Exception der Klasse EDBEngineError aufgetreten. Meldung:'Blob nicht geöffnet'."

    Warum nicht??
    Wer kann helfen?

    Hier mein Code:
    <PRE>
    procedure TForm1.btnMemoAuswahlClick(Sender: TObject);
    Var Blob :TStream;
    Memo :TFileStream;
    begin
    If OpenDialog1.Execute Then
    Begin
    //Table1.CacheBlobs := False;
    Memo :=TFileStream.Create(OpenDialog1.FileName,fmOpenRe ad or fmShareDenyWrite);
    Try
    Table1.Open;
    Table1.Edit;
    //Memo.Seek(0,soFromBeginning);
    Blob :=Table1.CreateBlobStream(Table1.FieldByName(edtFe ldMemo.Text),bmWrite);
    Try
    Blob.CopyFrom(Memo,Memo.Size);
    Table1.Post;
    Finally
    Blob.Free;
    End;
    Finally
    Memo.Free;
    End;
    End;
    end;
    </PRE>

  • #2
    Hallo,

    für diese Aufgabe (BLOb) ist TTable nun wahrlich am wenigsten geeignet. Mit dem Wechsel zu TQuery und dem Abschicken einer expliziten parametisierten INSERT- bzw. UPDATE-Anweisung sollte das Problem gegessen sein.

    Wie viele Datensätze sind betroffen, wenn TTable geöffnet wird? Welche Datenbank steckt dahinter? Wie wurde die BDE (Bsp: Eigenschaft <i>BLOBS TO CACHE</i>) konfiguriert

    Comment


    • #3
      Es soll ein kleines Programm werden, welches mir ermöglichen soll Dateien unterschiedlichster Art (*.bmp,*.jpg,*.txt,*.rtf,*.doc etc.) an einen Datensatz anzuhängen.
      Momentan probiere ich das mit Paradox7 Datenbanken

      Comment


      • #4
        Hallo,

        das folgende Beispiel demonstriert das Updaten von BLOb-Daten einer Paradox-Tabelle über TQuery. Im Kommentarblock ist die Konfiguration für den Objektinspektor zu finden:

        <pre>

        { ************************************************** **************
        Source File Name : BLOBQueryMainForm.PAS
        Typ : Formular-Unit
        Autor : Andreas Kosch
        Erstellt am : 03.08.97
        Compiler : Delphi 3.0
        Betriebssystem : Windows 95
        Beschreibung : BLOB-Feld einer Paradox-Tabelle via TQuery
        updaten. In diesem Fall werden drei direkte
        Updates via SQL vorgestellt:
        - AsMemo
        - SetBlobData
        - LoadFromFile
        Revisionen :
        ************************************************** ************** }

        unit BLOBQuery2MainForm;

        interface

        uses
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
        Db, StdCtrls, ComCtrls, DBCtrls, Mask, ExtCtrls, DBTables;

        type
        TFormMain = class(TForm)
        QueryBLOB: TQuery;
        Table1: TTable;
        DataSource1: TDataSource;
        RichEdit1: TRichEdit;
        Table1Hinweis: TStringField;
        Table1RTFMemo: TBlobField;
        QueryBLOBHinweis: TStringField;
        QueryBLOBRTFMemo: TBlobField;
        Splitter1: TSplitter;
        Panel1: TPanel;
        ButtonAsMemo: TButton;
        Panel2: TPanel;
        DBRichEdit1: TDBRichEdit;
        Panel3: TPanel;
        DBNavigator1: TDBNavigator;
        DBEdit1: TDBEdit;
        ButtonSetBlobData: TButton;
        ButtonLoadFromFile: TButton;
        procedure ButtonAsMemoClick(Sender: TObject);
        procedure ButtonSetBlobDataClick(Sender: TObject);
        procedure ButtonLoadFromFileClick(Sender: TObject);
        private
        { Private-Deklarationen }
        public
        { Public-Deklarationen }
        end;

        var
        FormMain: TFormMain;

        implementation

        {$R *.DFM}

        (* QueryBLOB.SQL = UPDATE rtfmemo
        SET RTFMemo = :mRTFMemo
        WHERE Hinweis = :sHinweis

        QueryBLOB.Params = mRTFMemo : BLOB
        sHinweis : String

        Alle drei Varianten verwenden die gleiche QueryBLOB-
        Konfiguration. *)

        procedure TFormMain.ButtonAsMemoClick(Sender: TObject);
        begin
        with QueryBLOB do
        begin
        // Update-Variable via AsMemo-Zuweisung füllen
        Params[0].AsMemo := RichEdit1.Lines.Text;
        // Primärschlüssel des ausgewählten Datensatzes übergeben
        Params[1].Value := Table1Hinweis.AsString;
        ExecSQL;
        end;
        // zur Kontrolle die Anzeige via TTable aktualisieren
        Table1.Refresh;
        end;

        procedure TFormMain.ButtonSetBlobDataClick(Sender: TObject);
        var
        pBlobText : PChar;
        begin
        with QueryBLOB do
        begin
        // Old-Fashion-Way über einen PChar
        pBlobText := RichEdit1.Lines.GetText;
        Params[0].SetBlobData(pBlobText, Length(pBlobText));
        // Primärschlüssel des ausgewählten Datensatzes übergeben
        Params[1].Value := Table1Hinweis.AsString;
        ExecSQL;
        end;
        Table1.Refresh;
        end;

        procedure TFormMain.ButtonLoadFromFileClick(Sender: TObject);
        const
        sDOCName = 'C:\ablage\d3fs.htm';
        begin
        with QueryBLOB do
        begin
        // direkt aus einer externen Datei importieren
        Params[0].LoadFromFile(sDOCName, ftBlob);
        // Primärschlüssel des ausgewählten Datensatzes übergeben
        Params[1].Value := Table1Hinweis.AsString;
        ExecSQL
        end;
        Table1.Refresh;
        end;

        end.

        </pre&gt

        Comment

        Working...
        X