Forum Delphi.cz

Delphi => FireDAC => Téma založeno: František 12-06-2018, 22:35:49

Název: Blob - read/write z Firebirdu cez FireDAC
Přispěvatel: František 12-06-2018, 22:35:49
takto čítam
Kód: [Vybrat]
  function GetBlobText(SQLQ:TFDQuery; bField:string ):string;
  var
    bs: TMemoryStream;
    sl: TStringList;
  begin
    sl := TStringList.Create;
    bs := TMemoryStream.Create;
    try
      TBlobField(SQLQ.FieldByName(bField)).SaveToStream(bs);
      bs.Position := 0;
      if bs.Size > 0
        then begin
                sl.LoadFromStream(bs);
                result := sl.Text;
        end
        else result := '';

    finally
      bS.Free;
      sl.Free;
    end;
  end;

a takto zapisujem
Kód: [Vybrat]
procedure SetBlobText(trQuery:TFDQuery; text:string );
var
    msp: TMemoryStream;
    pSL: TStringList;
    trQuery: TFDQuery;
begin
        msp := TMemoryStream.Create();
        pSL := TStringList.create;
        pSL.Text := text;
        pSL.SaveToStream(msp);
        try
          trQuery.sql.DefaultEncoding := System.SysUtils.TEncoding.UTF8;
          trQuery.SQL.Clear;
          trQuery.SQL.Add('UPDATE XXX SET ');
          trQuery.SQL.Add('POZITIV = :POZITIV ');
          trQuery.SQL.Add('WHERE IDT = 1');
          trQuery.ParamByName('POZITIV').SetBlobRawData(msp.Size,msp.Memory);
          trQuery.ExecSQL;
        finally
             pSL.Free;
             msp.Free;
        end;
end;
v podstate to funguje, ale bol som upozornený, že existuje niečo elegantnejšie
(pre XE5)
ak máte nejaké vylepšenie, sem s ním,
vďaka aj za iných
Název: Re:Blob - read/write z Firebirdu cez FireDAC
Přispěvatel: KarelHorky 13-06-2018, 08:05:47
Toto teď používám k plné spokojenosti v XE6, v XE5 to snad pojede taky. Přenáším obsah blobu z jedné tabulky do jiné tabulky:
Kód: Delphi [Vybrat]
  1. var
  2.   Pozn: TStream;
  3.  
  4. if not FDQuery1.FieldByName('PAR_BLOB').IsNull then
  5. begin
  6.   Pozn := FDQuery1.CreateBlobStream(FDQuery1.FieldByName('PAR_BLOB'), bmRead);
  7.   Pozn.Position := 0;
  8.   FDQuery2.ParamByName('BLOB_CIL').LoadFromStream(Pozn, ftBlob);
  9.   Pozn.Free;
  10. end;
  11.