用文件内存影射操作Image字段怎样写?(200分)

G

gdgt

Unregistered / Unconfirmed
GUEST, unregistred user!
因为要上传很大的文件(>100M)到数据库,所以我想用文件内存影射操作
但在程序中我写完
FData := MapViewOfFile (MapHandle, FILE_MAP_READ, 0, 0, 0);
之后,下一步不会写
ADOQuery.Parameters.ParamByName('attach').LoadFromStream(???,ftBlob);
其中attach是image类型
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var
AStream: TStream;
LwFile : TSearchRec;
begin
memo1.Clear;
adoquery1.Open;
ADOQuery1.Edit;
if FindFirst('d:/jpg/*.jpg',0,LwFile)=0 then
begin
memo1.Lines.Add(LwFile.Name);
AStream :=TFileStream.Create(LwFile.Name, fmOpenRead);
adoquery1.Append;
TBlobField(ADOQuery1.FieldByName('jpg')).LoadFromStream(AStream);
ADOQuery1.Post;
AStream.Free;
end;
while FindNext(LwFile)=0 do
begin
memo1.Lines.Add(LwFile.Name);
AStream :=TFileStream.Create(LwFile.Name, fmOpenRead);
adoquery1.Append;
TBlobField(ADOQuery1.FieldByName('jpg')).LoadFromStream(AStream);
ADOQuery1.Post;
AStream.Free;
end;
showmessage('aaa');
end;
 
昱昱你好:
我用Query Analyzer查询了一下,如果量大的话,可能会导致一个错误,我以前看别人
写的一个不知道怎么写的,用查询的话,它的图像写段内容大概是这样的:
0xff........................
0xff.......................
我用你写的方法写入的照片查询后是:
0x3c.......................
ox7b.......................

不知道怎么才能写成上面的,请指教一二!
 
>>因为要上传很大的文件(>100M)到数据库,所以我想用文件内存影射操作
个人认为完全没有必要。 你看一下TBlobField.LoadFromFile源代码,其实它就是调用
TFileStream的方法,而TFileStream也是直接调用API:CreateFile、ReadFile等来操作
文件的。 也就是说,Delphi本身并没有做什么多余的动作,只是调用操作系统的功能
而已。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
回复
0
查看
690
天地弦
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
714
import
I
顶部