怎么保存word文档的内容到sql server2000中去?(100分)

  • 主题发起人 主题发起人 zyr76
  • 开始时间 开始时间
Z

zyr76

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi中通过调用打开word程序后,在word中编辑修改了文档后想保存到数据库sql server2000中去,文档包含了图片,公式,表格,文本等信息,请问怎么完成写数据库这个具体代码,是不是要用流文件什么的,又如何读出该信息输出到word中?谢谢!
 
先把WORD保存到一个临时的地方,如 保存到 C:/TEMP下,然后给数据库的字段赋值
保存到数据库:
ADOQuery1.append;
//其他字段
TBlobField(ADOQuery1.FieldByName('image')).LoadFromFile('C:/TEMP/文件名');
ADOQuery1.post;
读取数据库中的文件:
TBlobField(ADOQuery1.FieldByName('image')).SaveToFile('文件名');
 
//就是把整个WORD文件保存进去是吧?
//不只是WORD,其他所有的文件都适用的。。。
//保存
procedure SaveWordToSQL;
var
MyStream: TMemoryStream;
FileStream: TFileStream; // 将写入的文件
size: Cardinal;
iPosition: Cardinal;
blocksize:Cardinal;
begin
blocksize:=1024; //1M

FileStream:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
MyStream:=TMemoryStream.Create();
MyStream.Position:=0;
size:=FileStream.Size;

iPosition := 0;
ADOQ_input.Close;
ADOQ_input.SQL.Clear;
ADOQ_input.SQL.Add('update file_ver set file_ver=:ID where uid=''1''');

while iPosition<size do
begin
application.ProcessMessages;
FileStream.Position:=iPosition;
if (iPosition+BlockSize)<=size then
MyStream.CopyFrom(FileStream,BlockSize)
else
MyStream.CopyFrom(FileStream,Size-iPosition);
iPosition:=iPosition+BlockSize;
MyStream.Position:=iPosition;
end;
ADOQ_input.Parameters.ParamByName('ID').LoadFromStream(MyStream,ftTypedBinary);
ADOQ_input.ExecSQL;

FileStream.Free;
MyStream.Free;
showmessage('数据导入成功');
end;
//读取
procedure LoadWordFromSQL;
var
FileName:Olevariant;
verfield:string;
MyStream,FileStream:TMemoryStream;
filen:string;
path:string;

size: Cardinal;
iPosition: Cardinal;
blocksize:Cardinal;
begin
blocksize:=1024; //1M

MyStream:=TMemoryStream.Create();
FileStream:=TMemoryStream.Create();

ADOQ_file.Close;
ADOQ_file.SQL.Clear;
ADOQ_file.SQL.Add('select file_ver from file_ver where uid=''1''');
ADOQ_file.Open;
ADOQ_file.ExecSQL;


if ADOQ_file.RecordCount<>0 then
begin
TBlobField(ADOQ_file.FieldByName('file_ver')).SaveToStream(FileStream);

FileStream.Position:=0;
size:=FileStream.Size;
iPosition := 0;
while iPosition<size do
begin
application.ProcessMessages;
FileStream.Position:=iPosition;
if (iPosition+BlockSize)<=size then
MyStream.CopyFrom(FileStream,BlockSize)
else
MyStream.CopyFrom(FileStream,Size-iPosition);

iPosition:=iPosition+BlockSize;
MyStream.Position:=iPosition;
end;
MyStream.SaveToFile(FileName);
end;
MyStream.Free;
FileStream.Free;
end;
//给分,HOHO...
 
谢谢回答,procedure SaveWordToSQL;这个方法可能好用的,可是我要在点击word保存按钮或关闭word时保存到数据库,不希望弹出word的保存对话框保存到文件中,而是直接保存到数据库中,这个时候OpenDialog1.FileName好像不可用吧,另外procedure LoadWordFromSQL;这个方法中没有打开word的代码呀?怎么会把保存的word数据读到word中了,请lngdtommy兄弟再帮忙一下,马上给分了。
 
再回答一下吧,谢了
 
对这个问题我也很关注!
包括Excel也有同样的问题,怎么样捕获Excel里的保存后直接把该文档load到数据库
 
兄弟再回答一下吧,总不能每次都保存到临时文件又从临时文件再保存进去吧,procedure LoadWordFromSQL;好像没有打开word的语句呀,怎么显示保存的文档到word呢?
 
必须先到文件中再打开,不能直接从数据库打开。
 
我一般都是用二楼的方法,三楼的太麻烦
 
不是吧,这样了还不会,直接调用SHELLEXECUTE打开WORD文件不就行了吗?
 
其实 偶尔幽默的方法是最简单的
 
接受答案了.
 
系统怎么把我的分给错了呢?郁闷我是想给lngdtommy等人的呀?
 

Similar threads

后退
顶部