Delphi7. Baca bidang BLOB dengan data WideString di dalamnya

Adakah yang bisa membantu? Saya menyimpan proyek Delphi7 lama dan mengalami masalah berikutnya. Bagaimana cara menyimpan nilai bidang BLOB jika berisi string Unicode? Saya mencoba:

var
  str: WideString;
begin
  ...
  str := WideString(Fields[1].AsString); - but I get empty string
  ...

  ...
  str := VarToWideStr(Fields[1].AsVariant); - but I get "(BLOB)" result in str varible.
  ...
end;

Solusi saya: Penggunaan kode:

...
stream := TMemoryStream.Create;
try
  Fields[1].SaveToStream(stream);
  ss := MemStreamToWStr(stream);
finally
  stream.Destroy;
end;
...

Dan fungsinya:

function TSnsFrame.MemStreamToWStr(Mstream: TMemoryStream): WideString;
begin
  Mstream.Seek(0, soFromBeginning);
  SetLength(Result, Mstream.size div 2);
  MStream.ReadBuffer(Result[1], Mstream.size);
end;

person Artem E    schedule 09.08.2013    source sumber


Jawaban (1)


Lihat TDataSet.CreateBlobStream(). Ia mengembalikan TStream yang dapat digunakan untuk membaca/menulis data mentah bidang blob.

person Remy Lebeau    schedule 09.08.2013
comment
Saya menggunakan SaveToStream untuk menyimpan data ke streaming dan kemudian membuat Treader dan mencoba membaca WideString. Tapi saya mendapatkan kesalahan saat mengatur stream.position := 0; - person Artem E; 14.08.2013
comment
Harap perbarui pertanyaan Anda dengan kode terbaru yang Anda gunakan. - person Remy Lebeau; 14.08.2013