全部博文(788)
分类:
2009-05-26 17:33:23
试试直接保存和读取看看
tempClient.Params.ParamByName ('ImageData').LoadFromFile('d:\1.jpg');
TBlobField(tempClient.FieldByName('Image')).SaveToFile('d:\1.jpg');
谢谢。
回xxmmmx(踢踏) ( ) 直接loadFromeFile和SaveToFile的结果一样。
SaveToFile保存的新文件仍然变大了。数据也变了
我测试了一下。 没有问题的。但我用的是ADOQuery;
var
tempJpeg:TJPEGImage;
tempStream:TMemoryStream;
begin
tempStream := TMemoryStream.Create;
tempJpeg := TJPEGImage.Create;
tempJpeg.LoadFromFile('C:\1.jpg'); //原文件大小148884Byte
tempJpeg.SaveToStream(tempStream);
ShowMessage(FloatToStr(tempStream.Size)); //148884Byte
tempQuery.SQL.Text:='Insert Into TImage(ImageSize,Image) values(:Size,:ImageData)';
tempQuery.Parameters.ParamByName('Size').Value:=tempStream.Size;
tempQuery.Parameters.ParamByName('ImageData').LoadFromStream(tempStream,ftGraphic);
tempQuery.ExecSQL;
end;
procedure TFormDemo.BExportClick(Sender: TObject);
var
tempJpeg:TJPEGImage;
tempStream:TMemoryStream;
begin
tempStream := TMemoryStream.Create;
tempQuery.SQL.Text:='Select Image From TImage Where ImageID = 1';
tempQuery.Open;
TBlobField(tempQuery.FieldByName('Image')).SaveToStream(tempStream);
ShowMessage(FloatToStr(tempStream.Size)); //148884Byte
end;
另外把xxmmmx(踢踏)的建议也测试了一下
写入
tempQuery.Parameters.ParamByName('ImageData').LoadFromFile('C:\1.JPG', ftBlob);
读出
TBlobField(tempQuery.FieldByName('Image')).SaveToFile('C:\2.JPG');
结果完全一样。很正确('C:\1.JPG'和'C:\2.JPG'完全一样)
你用TClientDataSet呢看看呢。
我用的是TClientDataSet。
是不是TClientDataSet不支持呢?工程里都用的是TClientDataSet。晕。
我这么用过是没问题的
Ado+DataSetProvider+TClientDataSet
例如:
保存
if cdsERFiles.IsEmpty then
begin
cdsERFiles.Append;
cdsERFiles.FieldByName('RecID').AsString:=trim(owExamineRepairID.Text);
cdsERFiles.FieldByName('State').AsInteger:=0;
cdsERFiles.FieldByName('Type').AsInteger:=0;
end else
cdsERFiles.Edit;
cdsERFiles.FieldByName('FileName').AsString:=ExtractFileName(OpenDialog.FileName);
TBlobField(cdsERFiles.FieldByName('FileContent')).LoadFromFile(OpenDialog.FileName);
cdsERFiles.ApplyUpdates(0);
读出,保存成文件:
sFileName:=sFileName+'\'+cdsERFiles.FieldByName('FileName').AsString;
TBlobField(cdsERFiles.FieldByName('FileContent')).SaveToFile(sFileName);
if FileExists(sFileName) then
ShellExecute(Handle,'open',PChar(sFileName),nil,nil,SW_SHOWNORMAL)