【发布时间】:2011-03-14 17:37:38
【问题描述】:
最终我的目标是能够将记录数据结构数组保存在 sqlite BLOB 字段中,但在此期间,我正在尝试序列化记录数组并将其存储在 TMemoryStream 中。如果可能相关,我将Tim Anderson's sqlite wrapper (unicode) 与 Delphi 2010 一起使用。
这是我的记录声明数组:
type
TPerson = array of packed record
sCountry: string[50];
sFullName: string[100];
sAddress: string[100];
sCity: string[30];
sEmployer: string[100];
end;
var
MyPeople : TPerson;
这是我目前用来将此记录数组序列化为 TMemoryStream 的代码。问题是它不起作用:
var
i : integer;
ms : TMemoryStream:
ms2 : TMemoryStream;
TestPeople : TPerson;
sldb : TSQLiteDatabase;
begin
ms := TMemoryStream.Create;
ms2 := TMemoryStream.Create;
sldb := TSQLiteDatabase.Create(slDBPath); //sldBPath is a global variable with path to sqlite db
try
i := Length(MyPeople);
ms.Write(i, 4);
ms.Write(pointer(MyPeople)^, i * sizeOf(MyPeople));
///
ms2.Read(i, 4);
SetLength(ms2, i);
ms2.Read(pointer(TestPeople)^, i * sizeOf(TestPeople));
WriteLn('#############' + ms2[0].sFullName); //check if we can read data back
sQuery := 'UPDATE PersonDirectory SET fldPersonBlob = ? WHERE id = "' + 42 + '";';
sldb.UpdateBlob(sQuery, ms);
finally
ms.Free;
ms2.Free;
sqldb.Free;
end;
end;
关于如何将记录数组序列化为 TMemoryStream 或将记录数组存储在 sqlite BLOB 字段中的更好方法的任何想法?
【问题讨论】:
标签: delphi sqlite delphi-2010