เดลฟี7. อ่านฟิลด์ BLOB โดยมีข้อมูล WideString อยู่ในนั้น

ใครสามารถช่วยได้บ้าง? ฉันกำลังเก็บโปรเจ็กต์ Delphi7 เก่าไว้และมีปัญหาครั้งต่อไป ฉันจะเก็บค่าฟิลด์ BLOB ได้อย่างไรหากมีสตริง Unicode ฉันเหนื่อย:

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;

โซลูชันของฉัน: การใช้รหัส:

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

และฟังก์ชั่น:

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 แหล่งที่มา


คำตอบ (1)


ลองดูที่ TDataSet.CreateBlobStream() โดยจะส่งกลับ TStream ที่สามารถใช้เพื่ออ่าน/เขียนข้อมูลดิบของฟิลด์หยด

person Remy Lebeau    schedule 09.08.2013
comment
ฉันใช้ SaveToStream เพื่อบันทึกข้อมูลเพื่อสตรีม จากนั้นสร้าง Treader และลองอ่าน WideString แต่ฉันได้รับข้อผิดพลาดเมื่อตั้งค่า stream.position := 0; - person Artem E; 14.08.2013
comment
โปรดอัปเดตคำถามของคุณด้วยรหัสล่าสุดที่คุณใช้ - person Remy Lebeau; 14.08.2013