怎样把word的内容存进sql数据库,并且读出来

donaldtyp 2004-11-22 11:35:06
var memsize:integer;
buffer:pchar;
myfile:Tfilestream;
stream:Tblobstream;
myfilename:string;
mystream:Tstream;
begin
myfilename:='d:\11.doc';
self.OleContainer1.SaveAsDocument(myfilename);
myfile:=Tfilestream.Create(myfilename,fmcreate); 为什么有了这一句存的文件就是空的了

mystream:=Tstream.Create;
OleContainer1.SaveToStream(mystream);
这个有什么错误阿 提示 abstract error

self.ADOQuery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into w_table(w_word)');
adoquery1.SQL.Add('values(:w_word)');
adoquery1.parameters.ParamByName('w_word').LoadFromStream(stream,ftblob);
adoquery1.ExecSQL;
end;
...全文
212 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
donaldtyp 2004-11-24
  • 打赏
  • 举报
回复
谢谢各位,我还想问一个,怎样在word上添加一个菜单。
xjwy 2004-11-23
  • 打赏
  • 举报
回复
myfilename:='d:\11.doc';
self.OleContainer1.SaveAsDocument(myfilename);
myfile:=Tfilestream.Create(myfilename,fmcreate); 为什么有了这一句存的文件就是
我做了测试,因为的OleContainer1里没有任何的内容,
我想你还补台了解OLE的流程,你应该先

self.OleContainer1.LoadFromFile()然后再
self.OleContainer1.SaveAsDocument(myfilename);就不会有错误了
xjwy 2004-11-23
  • 打赏
  • 举报
回复
搞不明白你的那句是什么意思,有什么作用?????/》???
self.OleContainer1.SaveAsDocument(myfilename);
xjwy 2004-11-23
  • 打赏
  • 举报
回复
myfilename:='d:\11.doc';
self.OleContainer1.SaveAsDocument(myfilename);
似乎你写错了哦,你在这里应该是打开一个文件
我虽然没用DELPHI的OFFICE
控件开发过,但是我在DELPHI中直接用OLE调用VBA 的命令所以对OFFICE 的开发有点了解
princesd 2004-11-23
  • 打赏
  • 举报
回复
Delphi与Word之间的融合技术
http://princed.mblogger.cn/posts/11880.aspx
princesd 2004-11-23
  • 打赏
  • 举报
回复
//uses ActiveX;
procedure TForm1.MenuPreviewClick(Sender: TObject);//这是在我自己的FILE菜单里
var
IOO: IOleInPlaceObject ;
begin
OleContainer1.DoVerb(ovShow);
if OleContainer1.State in [osUIActive] then
begin
OleContainer1.OleObjectInterface.QueryInterface(IOleInPlaceObject,IOO);
IOO.UIDeactivate;
IOO :=nil;
end;
OleContainer1.OleObject.PrintPreview;
OleContainer1.DoVerb(ovShow);
OleContainer1.Align := OleContainer1.Align;
end;

donaldtyp 2004-11-22
  • 打赏
  • 举报
回复
没人,我自己顶,
donaldtyp 2004-11-22
  • 打赏
  • 举报
回复
OleContainer1这个怎么打印阿,还有打印预览
princesd 2004-11-22
  • 打赏
  • 举报
回复
我这里有一些解决办法,你看看
procedure TsampleForm.OpenDOCClick(Sender: TObject);
var
MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TBlobStream;
begin
OpenDialog1.Filter:='WORD文档(*.DOC)|*.DOC'
;{从对话窗选择文件}
if OpenDialog1.Execute then begin
MyFile:=TFileStream.Create
(OpenDialog1.FileName,fmOpenRead);
with table1 do {‘table1’为含BLOB字段的表名}
begin
Open;
Edit;
Stream := TBlobStream.Create(FieldByName('Doc')
as TBlobField, bmWrite);
{‘Doc’为BLOB字段名}
MemSize := MyFile.Size;
Inc(MemSize); {Make room for the
buffer's null terminator.}
Buffer := AllocMem(MemSize);
{Allocate the memory.}
try
Stream.Seek(0, soFromBeginning);
{Seek 0 bytes from the stream's end point}
MyFile.Read(Buffer^,MemSize);
Stream.Write(Buffer^,MemSize);
finally
MyFile.Free;
Stream.Free;
end;
try
Post;
except
on E: EDatabaseError do
if HandelException(E)< >0 then exit
else
raise;
end;
end;
Doc_ole.CreateObjectFromFile
(OpenDialog1.FileName,False);
Doc_ole.Run;{Doc_ole为ToleContainer构件名}
end;
end;

---- 以上为向数据库中写入的程序,应用中从对话窗取出文件在ToleContainer构件中显示的同时存入数据库。

procedure TsampleForm.GetDocClick
(Sender: TObject);
var
MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TBlobStream;
begin
MyFile:=TFileStream.Create('c:\temp.tmp',fmCreate);
with Query1 do
begin
Stream := TBlobStream.Create
(FieldByName('Doc') as TBlobField, bmRead);
MemSize := Stream.Size;
Inc(MemSize);
{Make room for the buffer's null terminator.}
Buffer := AllocMem(MemSize);
{Allocate the memory.}
try
Stream.Read(Buffer^,MemSize);
MyFile.Write(Buffer^,MemSize);
finally
MyFile.Free;
Stream.Free;
end;
end;
if FileExists('c:\temp.DOC')
then DeleteFile('c:\temp.DOC');
if FileExists('c:\temp.tmp')
then begin
RenameFile('c:\temp.tmp', 'c:\temp.DOC');
Doc_ole.CreateObjectFromFile
('c:\temp.DOC',False);
Doc_ole.Run;
end;
end;

---- 以上程序为从数据库从将WORD文档取出,并放在temp.doc的临时文件上并在ToleContainer构件中显示。

---- 在程序的其他部份应准确控制表记录指针,使WORD文档的存取发生在正确的记录位置。
donaldtyp 2004-11-22
  • 打赏
  • 举报
回复
没人阿,呜呜呜,怎么知道 OleContainer1 这个连接的是word,还是excl 阿
postfxj 2004-11-22
  • 打赏
  • 举报
回复
你用流過以實現呀。
zwb666 2004-11-22
  • 打赏
  • 举报
回复
学习

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧