各两种方式
二进制字段
保存:
(query1.FieldByName('img') as TBlobField).LoadFromFile('e:\temp.bmp');
TBlobField(Table1.FieldByName('Image')).Assign(Image1.Picture.Bitmap);
取出:
(query1.FieldByName('img') as TBlobField).Savetofile('e:\temp.bmp');
Image1.Picture.Bitmap.assign(TBlobField(Table1.FieldByName('Image')));
二进制字段
保存:
(query1.FieldByName('img') as TBlobField).LoadFromFile('e:\temp.bmp');
TBlobField(Table1.FieldByName('Image')).Assign(Image1.Picture.Bitmap);
取出:
(query1.FieldByName('img') as TBlobField).Savetofile('e:\temp.bmp');
Image1.Picture.Bitmap.assign(TBlobField(Table1.FieldByName('Image')));
建议你到sql论坛去问。
SQL:Insert Into ...set ... Picture = :NewPic;var
vtData:OleVariant;
PtrData:PByte;
Stream:TStream;
DataSize:Integer;
begin
Stream := TFileStream.Create('e:\pics\1.bmp',fmOpenRead);
DataSize := Stream.Size;
vtData := VarArrayCreate([0,DataSize-1],varByte);
PtrData := VarArrayLock(vtData);
Stream.Position := 0;
Stream.Read(PtrData^,DataSize);
Stream.Free;
VarArrayOnlock(vtData);
ADOQuery1.Parameters.ParamByName('NewPic').Value := vtData;
vtData := Unassigned;
...//设置其它参数
ADOQuery.ExecSQL;
end;
如果我修改信息时,没有重新打开图象文件,只不过是改了用户地址之类的东西,我就无法知道文件目录地址,也就是'e:\pics\1.bmp',请问如何处理?
然后用Query 的SaveToStream和LoadFromStream方法;