以sqlserver为例,其中“字段1”为image类型(存放文件),“字段2”为char类型(存放文件名)。单元引用加上shellapi。 存入数据库: if not OpenDialog1.Execute then exit; table1.insert; (table1.FieldByName('字段1') as TBlobField).LoadFromFile(OpenDialog1.filename); table1.FieldByName('字段2').value:=OpenDialog1.filename; table1.post; 打开文件: (table1.FieldByName('字段1') as TBlobField).savetoFile(table1.FieldByName('字段2').value); shellexecute(handle,nil,pchar(table1.FieldByName('字段2').value),nil,nil,sw_shownormal);如果是tquery需要配合tupdatesql使用,方法相同。
// 个通过 , 'doc' 的数据库中为image 类型 // 不管是WORD,EXCLE,还中JPG的都能用unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls, shellapi,Buttons;type TForm1 = class(TForm) OpenDialog1: TOpenDialog; BitBtn1: TBitBtn; BitBtn2: TBitBtn; ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; s:string; implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);begin if OpenDialog1.Execute then begin if not ADOQuery1.Active then ADOQuery1.Open; ADOQuery1.Append; s :=ExtractFileName(OpenDialog1.FileName); (ADOQuery1.FieldByName('doc') as TBlobField).LoadFromFile(OpenDialog1.filename); ADOQuery1.Post;end; end;procedure TForm1.BitBtn2Click(Sender: TObject); begin (ADOQuery1.FieldByName('doc') as TBlobField).savetoFile(ExtractFileDir(Application.ExeName)+s); shellexecute(handle,nil,pchar(s),nil,nil,sw_shownormal);end;end.
boytomato(深爱一人叫颖的女孩!) 你写的是做什么用的阿
// 个通过 , 'doc' 的数据库中为image 类型 // 不管是WORD,EXCLE,还中JPG的都能用 // 注意打开文件时一定要先定位(即要先写sql 查询确定有个再打开 ),要不然会出错,还有就是临时文件的删除。。 // delphi 7+sql2000通过。。unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls, shellapi,Buttons, OleCtnrs; type TForm1 = class(TForm) ADOConnection1: TADOConnection; Button1: TButton; Button2: TButton; OpenDialog1: TOpenDialog; ADOQuery1: TADOQuery; OleContainer1: TOleContainer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; s:string; implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then begin if not ADOQuery1.Active then ADOQuery1.Open; ADOQuery1.Append; s :=ExtractFileName(OpenDialog1.FileName); (ADOQuery1.FieldByName('doc') as TBlobField).LoadFromFile(OpenDialog1.filename); ADOQuery1.Post;end; end; procedure TForm1.Button2Click(Sender: TObject); begin (ADOQuery1.FieldByName('doc') as TBlobField).savetoFile(ExtractFileDir(Application.ExeName)+'\'+s); olecontainer1.CreateObjectFromFile(ExtractFileDir(Application.ExeName)+'\'+s,false); olecontainer1.DoVerb(1);// shellexecute(handle,nil,pchar(s),nil,nil,sw_shownormal); end;end.
OleContainer1.CreateObjectFromFile('c:\net.doc',False);
var filename:olevariant;
begin
try
WordApplication1.Connect;
except
messagedlg('请检查是否安装了Word?',mterror,[mbok],0);
abort;
end;
WordApplication1.Visible:=true;
filename:= ExtractFilePath(application.ExeName)+'test.doc';//路径根据你的实际情况,这里是和你的可执行文件放在一个目录
WordApplication1.Documents.Open(filename,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
wordapplication1.ActiveDocument;
end;
我觉得OleContainer需要调用Ole接口才能实现其功能,ACCESS和SQL SERVER数据库都是可以z这样操作的,接口函数说明可以在OFFICE的安装盘中找到
zhengtao1980(丛人) 可以实现,但不符合题意,给50分。
已经通过可用分捐赠给分了,请注意接收
2题还没有答案。
存入数据库:
if not OpenDialog1.Execute then exit;
table1.insert;
(table1.FieldByName('字段1') as TBlobField).LoadFromFile(OpenDialog1.filename);
table1.FieldByName('字段2').value:=OpenDialog1.filename;
table1.post;
打开文件:
(table1.FieldByName('字段1') as TBlobField).savetoFile(table1.FieldByName('字段2').value);
shellexecute(handle,nil,pchar(table1.FieldByName('字段2').value),nil,nil,sw_shownormal);如果是tquery需要配合tupdatesql使用,方法相同。
// 不管是WORD,EXCLE,还中JPG的都能用unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, shellapi,Buttons;type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
s:string;
implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);begin
if OpenDialog1.Execute then
begin
if not ADOQuery1.Active then ADOQuery1.Open;
ADOQuery1.Append;
s :=ExtractFileName(OpenDialog1.FileName);
(ADOQuery1.FieldByName('doc') as TBlobField).LoadFromFile(OpenDialog1.filename);
ADOQuery1.Post;end;
end;procedure TForm1.BitBtn2Click(Sender: TObject); begin
(ADOQuery1.FieldByName('doc') as TBlobField).savetoFile(ExtractFileDir(Application.ExeName)+s);
shellexecute(handle,nil,pchar(s),nil,nil,sw_shownormal);end;end.
你写的是做什么用的阿
// 不管是WORD,EXCLE,还中JPG的都能用
// 注意打开文件时一定要先定位(即要先写sql 查询确定有个再打开 ),要不然会出错,还有就是临时文件的删除。。
// delphi 7+sql2000通过。。unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, shellapi,Buttons, OleCtnrs;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
ADOQuery1: TADOQuery;
OleContainer1: TOleContainer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
s:string;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
if not ADOQuery1.Active then ADOQuery1.Open;
ADOQuery1.Append;
s :=ExtractFileName(OpenDialog1.FileName);
(ADOQuery1.FieldByName('doc') as TBlobField).LoadFromFile(OpenDialog1.filename);
ADOQuery1.Post;end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
(ADOQuery1.FieldByName('doc') as TBlobField).savetoFile(ExtractFileDir(Application.ExeName)+'\'+s); olecontainer1.CreateObjectFromFile(ExtractFileDir(Application.ExeName)+'\'+s,false);
olecontainer1.DoVerb(1);// shellexecute(handle,nil,pchar(s),nil,nil,sw_shownormal);
end;end.
在数据库上使用Image二进制字段保存,使用Stream流的方式。
创建文件流:
Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite or fmCreate);
Word_FileStream.Position:=0;
保存到数据库的Image字段:
TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);
从数据库读取文件到本地硬盘:
TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);
释放文件流:
Word_FileStream.Free;配合 OleContainer1.LoadFromStream(); 就可>>3。请问用OleContainer打开一个doc文档之后,如何在OleContainer修改此文档并保存?
在 diglog 页。
采用 OleContainer1.LoadFromStream() ,并不是我们想象的那样可以直接赋值给他一个Tstream 的对象,总是出错。
请教: