sql server存取文件,存前用delphi自带的压缩单元zlib对文件进行压缩,读取的时候解压缩,但是图片文件(jpg,jpeg,bmp,icon等),在image上显示总是出错,论坛上搜索了很多帖子,也解决不了!不知道各位有何高招,还有就是对于存放的word,excel等文件,怎么读取(不允许用户拷贝文件)。
解决方案 »
- 请问:adoquery中查询的是一个视图,显示在gird中,如何在grid中增删改数据后更新到相应的表中?
- 很急,请帮忙
- 请问大虾们这句简单的WORD宏代码怎么翻译
- 请推荐有什么学习报表的好文章? 70分全送他。
- 如何捕获其它程序控件上的值
- ADOQuery的过滤事件
- delphi网络版软件,帮忙呀--------解决问题既给分(破产了)
- (只要回答就有分啊)财务软件中那些用来输入金额的复杂窗体是怎么做的
- 紧急求救:如何在DbGrid里面的单元格里放CHECKBOX.
- 刚找到formula one的几个delphi的例子,有没有人要?for d2 d4
- 如何在d7里使用DX9?
- 我在delphi中实现了手写文字的功能,保存后成为图片,但是背景总是白色的,能不能变成透明的背景
存储存在问题,如果愿意就贴出数据库存储代码,我帮你改
var
I: Integer;
vBuffer: array[0..cBufferSize]of Char;
begin
Result := -1;
if not (Assigned(mInputStream) and Assigned(mOutputStream)) then Exit;
with TCompressionStream.Create(clMax, mOutputStream) do try
for I := 1 to mInputStream.Size div cBufferSize do begin
mInputStream.Read(vBuffer, cBufferSize);
Write(vBuffer, cBufferSize);
end;
I := mInputStream.Size mod cBufferSize;
if I > 0 then begin
mInputStream.Read(vBuffer, I);
Write(vBuffer, I);
end;
finally
Free;
end;
end; { StreamCompression }function TModuleFm.StreamDecompression(mInputStream: TStream; mOutputStream: TStream): Integer;
var
vBuffer: array[0..cBufferSize]of Char;
I: Integer;
begin
Result := -1;
if not (Assigned(mInputStream) and Assigned(mOutputStream)) then Exit;
with TDecompressionStream.Create(mInputStream) do try
repeat
I := Read(vBuffer, cBufferSize);
mOutputStream.Write(vBuffer, I);
until I = 0;
Result := mOutputStream.Size;
finally
Free;
end;
end; { StreamDecompression }存储文件(图片,其他任何格式的文件,都用流存储,读出来则根据字段‘fileext’来分类处理)
if ModuleFm.OpenDialog.Execute then
begin
InputStream:=TFileStream.Create(ModuleFm.OpenDialog.FileName,fmOpenRead);
OutputStream:=TMemoryStream.Create;
try
ModuleFm.StreamCompression(InputStream,OutputStream);
ModuleFm.M_FileReg.Close;
ModuleFm.M_FileReg.Open;
ModuleFm.M_FileReg.Append;
ModuleFm.M_FileReg.FieldByName('ID').AsInteger:=integer(tree.Selected.Data);
ModuleFm.M_FileReg.FieldByName('FileName').AsString:=ExtractFileName(ModuleFm.OpenDialog.FileName);
OutputStream.Position:=0; TBlobField(ModuleFm.M_FileReg.FieldByName('image')).LoadFromStream(InputStream);
ModuleFm.M_FileReg.Post;
finally
InputStream.Free;
OutputStream.Free;
end;
end;
//取图片
var
Stream1,stream2:TmemoryStream;
FJpegImage:TJpegImage;
begin
ModuleFm.M_FileReg.Close;
ModuleFm.M_FileReg.SQL.Clear;
ModuleFm.M_FileReg.SQL.Add('select * from M_FileReg where filename='+#39+tree.Selected.Text+#39'');
ModuleFm.M_FileReg.SQL.Add('and id='+inttostr(integer(tree.Selected.Parent.Data))+' and fileext=’+’jpg’+’');
ModuleFm.M_FileReg.Prepared;
ModuleFm.M_FileReg.Open; if ModuleFm.M_FileReg.FieldByName('image').IsNull then exit; Stream1:=TMemoryStream.Create;
Stream2:=TMemoryStream.Create;
FJpegImage:=TJpegImage.Create;
TBlobField(ModuleFm.M_FileReg.FieldByName('image')).SaveToStream(stream1);
stream1.Position := 0;
ModuleFm.StreamDecompression(stream1,stream2);//将stream1解压缩到stream2
stream2.Seek(0,0);//stream2.position;=0;
FJpegImage.LoadFromStream(stream2);
TJpegImage(Image.Picture).Assign(FJpegImage);
End;
var
StringStream : TStringStream;//存储文件(图片,其他任何格式的文件,都用流存储,读出来则根据字段‘fileext’来分类处理)
if ModuleFm.OpenDialog.Execute then
begin
InputStream:=TFileStream.Create(ModuleFm.OpenDialog.FileName,fmOpenRead);
OutputStream:=TMemoryStream.Create; //
StringStream:=TStringStream.create;
try
ModuleFm.StreamCompression(InputStream,OutputStream);
ModuleFm.M_FileReg.Close;
ModuleFm.M_FileReg.Open;
ModuleFm.M_FileReg.Append;
ModuleFm.M_FileReg.FieldByName('ID').AsInteger:=integer(tree.Selected.Data);
ModuleFm.M_FileReg.FieldByName('FileName').AsString:=ExtractFileName(ModuleFm.OpenDialog.FileName);
StringStream.CopyFrom(OutputStream,OutputStream.Size);//InputStream为
ModuleFm.M_FileReg.FieldByName('image')).LoadFromStream(StringStream);
ModuleFm.M_FileReg.Post;
finally
freeandnil(InputStream);
freeandnil(OutputStream.Free);
freeandnil(StringStream);
end;
end;
我不知道是那一个
StreamCompression(inputstream,outputstream);//压缩流
StreamDeCompression(inputstream,outputstream);//解压流
存储文件没有问题,关键是从数据库读出来以后就会先解压缩,然后在显示图片,图片的显示过程出错了!
OutputStream.SaveToFile //看文件的大小入库
再库中读
TBlobField(ModuleFm.M_FileReg.FieldByName('image')).SaveToFile //看文件的大小
看有没有问题(有问题就是入库的问题)如果没有然后解压
解压有是不是和原来文件一样大(有问题就是解压的问题)
如果一样大就没有理由错误