Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Blob in DB Speichern (https://www.delphipraxis.net/108445-blob-db-speichern.html)

RStorm 13. Feb 2008 21:22

Datenbank: Intebase/Firebird • Version: 6.x / 2.0 • Zugriff über: IB components

Blob in DB Speichern
 
Hallo Leute,

bin am verzweifeln habe schon die Suche versucht aber nichts brauchbares gefunden. Ich bräuchte eure hilfe Bitte. Wie kann ich Daten, einen String oder Text der ungewiss lang ist in ein Blob Feld speichern. Egal was ich mache ich bekomme es nicht hin habe es schon

Delphi-Quellcode:
IBQuery1ERGEBNIS_T1.LoadFromFile('test.txt');
veruscht oder

Delphi-Quellcode:
IBquery1.ParamByName('ERGEBNIS_T1').AsBlob := 'TEST TEST TEST';
ich bekomme dann immer einen Fehlermeldung "nicht im Bearbeitungs-modus" was genau heist das? Kann mir einer helfen wie ich die daten da rein bekomme? Oder weiss einer wie ich es mit ner SQL Syntax hinbekomme "UPDATE ..."

Danke schon mal und gruss

Rudolf

Hansa 14. Feb 2008 00:04

Re: Blob in DB Speichern
 
Wie wäre es mit DbMemo.LoadMemo ?

peschai 14. Feb 2008 05:41

Re: Blob in DB Speichern
 
Hallo
Schematisch in etwa so

"DataSet" symbolisiert deine Tabelle ...

1.) Daten in Stream zwischenlagern
2.) Zum schreiben öffnen mit "Edit"
3.) Stream in Blobfield schreiben
4.) Schreiben abschliessen mit "Post"

Delphi-Quellcode:
function MyObject.FieldWriteAsBlob(const FieldName:String;Const aStream:TStream):Boolean;
var
  j1:TField;
begin
  Result := False;
  j1 := Nil;
  Try
    if Assigned(DataSet) then
      begin
        j1 := DataSet.FieldByName(FieldName);
        If assigned(j1) then
          begin  
            if j1.IsBlob then
               begin
                 DataSet.Edit;
                 if Assigned(aStream)
                   then TBlobField(j1).LoadFromStream(aStream)
                   else TBlobField(j1).Clear;
                 DataSet.Post;
                 Result := True;
               end;
          end;
        end;
    except
      on e:exception do
        begin
          Result := False;
          DataSet.Cancel;
          //.... Exception melden ?
        end;
    end;
end;

procedure MyObject.btnPictureWriteClick(Sender: TObject);
var
  ms1:TMemoryStream;
  s2:STring;
  i9:integer;
begin
  // local init
  ms1  := Nil;
  s2   := '';
  i9 := 0;
  { Action }
  try
    try
      if Assigned(DataSet) then
        begin
          if Not(DataSet.ReadOnly) then
            begin
              DataSet.Activate;
              ms1 := TMemoryStream.Create;
              if OpenPictureDialog1.Execute then
                begin
                  ms1.LoadFromFile(OpenPictureDialog1.FileName);
                  ms1.Seek(0, soFromBeginning);
                  MyObject.FieldWriteAsBlob('BlobFeldName',ms1);
                  ms1.Clear;
                end;
            end;
        end;
    except
      on E:Exception do
        begin
          s2 := e.Message;
          // ....
        end;
    end;
  finally
    FreeAndNil(ms1);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:03 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