procedure TForm2.ToolButton2Click(Sender: TObject);
var
MyFile: TMemoryStream;
begin
If OLEContainer1.State<> osEmpty then
begin
MyFile:=TMemoryStream.Create;
OLEContainer1.SaveToStream(MyFile);
MyFile.Position :=0;
// CompressStream(MyFile);
with ADOQuery5 do begin
Open;
edit;
TBlobField(FieldByName('wjnr')).LoadFromStream(MyFile);
MyFile.Free;
Post;
end;
PageControl1.Show;
PageControl1.SetFocus;
end;end;
ADOQuery5.Active:=false;
ADOQuery5.Parameters.ParamByName('bianhao').Value:=trim(bianhao);
ADOQuery5.Parameters.ParamByName('wjlb').Value:='招标答疑';
ADOQuery5.Open;
ADOQuery5.Active:=true;end;
if not ADOQuery5.FieldByName('wjnr').IsNull then begin
with ADOQuery5 do
begin
OleContainer1.DestroyObject;
MyFile:=TMemoryStream.Create;
TBlobField(FieldByName('wjnr')).SaveToStream(MyFile);
MyFile.Position:=0;
OleContainer1.loadfromstream(MyFile);
MyFile.Free;
OleContainer1.DoVerb(ovshow);
PageControl1.SetFocus;
end;
回复人: wwwwwwww(我我) (2002-1-28 9:46:44) 得0分
保存word文档:
procedure Tfrmdyqk1.BitBtn3Click(Sender: TObject);
var ms:TMemoryStream;
begin
ms:= TMemoryStream.create;
OleContainer1.SaveToStream (ms);
ms.Position := 0; Query1.close;
Query1.sql.clear;
Query1.sql.text:='select * from oadbo.bw_qwb';
Query1.open;
Query1.append;
Query1.fieldbyname('wjid').value:=77777777 ;
Query1.fieldbyname('wjdid').value:=7;
Query1.fieldbyname('kzm').value:='txt';
TBlobField(Query1.fieldbyname('qw')).loadfromstream(ms);
ms.free;
Query1.post;
//Query1.applyupdates;
Query1.close;
end;取出word文档:
procedure Tfrmdyqk1.Button2Click(Sender: TObject);
var strstream:Tmemorystream;
//ls_qw:string;
begin OleContainer1.DestroyObject;
strstream := Tmemorystream.Create; query1.Close;
query1.sql.clear;
query1.SQL.Add('select qw from oadbo.bw_qwb where wjid =' + inttostr(77777777));
query1.open ;
query1.First;
Tblobfield(query1.fieldbyname('qw')).savetostream(strstream);
strstream.position:=0;
OleContainer1.loadfromstream(strstream); strstream.free;
end;
如果
1.给定一个文件名和序号作为参数,保存到数据库中(针对两种情况:插入,更新)
假设表为
表名:报表
字段:序号:INT,模板:IMAGE2.从数据库中读出该表中某序号的模板到文件名参数中
Answer:
The main problem I faced when trying to do this was to deal with the fact that TField.Value returns a varOleStr no matter what was written into it, so the data needed to be converted into a more usable format. Note that there is no checking here that the TField is in fact of the correct type, and that the stream must be created and free-ed elsewhere manually. Also, additional memory equal to the size of the stream/blob is required, so be cautious if large amounts of data are involved. For ease of use in my own application, I incorporated this functionality into my descendent of TADOQuery.
function LoadFromBlob(const AField: TField; const Stream: TStream): boolean;
var
ResultStr: string;
PResultStr: PChar;
begin
Result := false;
if (Assigned(AField)) and (Assigned(Stream)) then begin
try
ResultStr := AField.Value;
PResultStr := PChar(ResultStr);
Stream.Write(PResultStr^, Length(ResultStr));
Stream.Seek(0,0);
Result := true;
except
end;
end;
end; function SaveToBlob(const Stream: TStream; const AField: TField): boolean;
var
FieldStr: string;
PFieldStr: PChar;
begin
Result := false;
if (Assigned(AField)) and (Assigned(Stream)) then begin
try
Stream.Seek(0,0);
SetLength(FieldStr, Stream.Size);
PFieldStr := PChar(FieldStr);
Stream.Read(PFieldStr^, Stream.Size);
AField.Value := FieldStr;
Result := true;
except
end;
end;
end; ------------------------------------------------------- Examples: If you have an ADO query "qryBlobTest" with the following fields: nFileIcon: Image; nFileData: Image; // Store an icon in an Image field
function StoreFileIcon: boolean;
var
AFileIcon: TIcon;
MS: TMemoryStream;
begin
Result := false;
AFileIcon := TIcon.Create;
MS := TMemoryStream.Create;
try
AFileIcon.handle := ExtractAssociatedIcon('c:\temp\Test.doc'); // Pseudocode !!
AFileIcon.SaveToStream(MS);
Result := SaveToBlob(MS, qryBlobTest.FieldByName('nFileIcon'));
finally
AFileIcon.Free;
MS.Free;
end;
end; // Load an icon from an Image field
function LoadFileIcon: boolean;
var
AFileIcon: TIcon;
MS: TMemoryStream;
begin
Result := false;
AFileIcon := TIcon.Create;
MS := TMemoryStream.Create;
try
if (LoadFromBlob(qryBlobTest.FieldByName('nFileIcon'), MS)) then begin
AFileIcon.LoadFromStream(MS);
// Do something with the Icon?
Result := true;
end;
finally
AFileIcon.Free;
MS.Free;
end;
end; // Save a binary file in an Image field
function StoreFileData: boolean;
var
FS: TFileStream;
begin
FS := TFileStream.Create('c:\temp\Test.doc', fmOpenRead);
Result := SaveToBlob(FS, qryBlobTest.FieldByName('nFileData'));
FS.Free;
end; // Load a file from an Image field (save it to a file name)
function LoadFileData: boolean;
var
FS: TFileStream;
begin
FS := TFileStream.Create('c:\temp\Test2.doc', fmCreate);
LoadFromBlob(qryBlobTest.FieldByName('nFileData'), FS);
FS.Free;
end;