var
sCommandLine:string;
bCreateProcess:boolean;
lpStartupInfo:TStartupInfo;
lpProcessInformation:TProcessInformation;
MemSize:Integer;
Buffer:PChar;
MyFile:TFileStream;
Stream:TADOBlobStream;
RegF:TRegistry;
begin
RegF:=TRegistry.Create;//查看.doc文档的打开程序
RegF.RootKey:=HKEY_classes_root;
try
RegF.OpenKey('worddocumentprotocolstdfileeditingserver',True);
sCommandLine:=regf.ReadString('')+''+ExtractFilePath(Application.EXEName)+'temp.doc';
except
End;
RegF.CloseKey;
RegF.Free;
dataset.Close;
dataset.commandtext:='select*from二进制文档where来源='''+sourcetablename+'''and来源id='+inttostr(sourceid);
dataset.open;
ifnotdataset.eofthen
begin
MyFile:=TFileStream.Create(ExtractFilePath(Application.EXEName)+'temp.tmp',fmCreate);
Stream:=TADOBlobStream.Create(dataset.FieldByName('内容')asTBlobField,bmRead);
MemSize:=Stream.Size;
Inc(MemSize);
Buffer:=AllocMem(MemSize);
try
Stream.Read(Buffer^,MemSize);
MyFile.Write(Buffer^,MemSize);
finally
MyFile.Free;Stream.Free;
end;
ifFileExists(ExtractFilePath(Application.EXEName)+'temp.DOC')thenDeleteFile(ExtractFilePath(Application.EXEName)+'temp.DOC');
ifFileExists(ExtractFilePath(Application.EXEName)+'temp.tmp')thenRenameFile(ExtractFilePath(Application.EXEName)+'temp.tmp',ExtractFilePath(Application.EXEName)+'temp.DOC');
end
else
begin
ifFileExists(ExtractFilePath(Application.EXEName)+'empty.DOC')then
copyfile(pchar(ExtractFilePath(Application.EXEName)+'empty.DOC'),pchar(ExtractFilePath(Application.EXEName)+'temp.DOC'),false)
elsebegin
ShowMessage('<'+ExtractFilePath(Application.EXEName)+'empty.DOC>不存在!');
dataset.close;
exit;
end;
end;
dataset.close;
//sCommandLine:='C:ProgramFilesMicrosoftOfficeOfficewinword.exe'+ExtractFilePath(Application.EXEName)+'temp.doc';
FillChar(lpStartupInfo,Sizeof(TStartupInfo),#0);
lpStartupInfo.cb:=Sizeof(TStartupInfo);
lpStartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
lpStartupInfo.wShowWindow:=SW_NORMAL;
bCreateProcess:=CreateProcess(nil,PChar(sCommandLine),nil,nil,True,CREATE_NEW_CONSOLEorNORMAL_PRIORITY_CLASS,nil,nil,lpStartupInfo,lpProcessInformation);
//ShellExecute(zxdcc.Handle,'save',pchar(ExtractFilePath(Application.EXEName)+'empty.doc'),'','',SW_SHOWNORMAL);
ifbCreateProcessthen
WaitForSingleObject(lpProcessInformation.hProcess,INFINITE);
dataset.Close;
dataset.commandtext:='select*from二进制文档where来源='''+sourcetablename+'''and来源id='+inttostr(sourceid);
dataset.open;
ifnotdataset.eofthen
dataset.Edit
elsebegin
dataset.close;
dataset.commandtext:='select*from二进制文档';
dataset.open;
dataset.append;
end;
dataset.FieldValues['来源']:=sourcetablename;
dataset.FieldValues['来源id']:=sourceid;
MyFile:=TFileStream.Create(ExtractFilePath(Application.EXEName)+'temp.doc',fmOpenRead);
Stream:=TADOBlobStream.Create(dataset.FieldByName('内容')asTBlobField,bmWrite);{‘Doc’为BLOB字段名}
MemSize:=MyFile.Size;
Inc(MemSize);//增加的一字节给结尾的null
Buffer:=AllocMem(MemSize);
try
Stream.Seek(0,soFromBeginning);//流指针位置放到最前
MyFile.Read(Buffer^,MemSize);
Stream.Write(Buffer^,MemSize);
finally
MyFile.Free;
Stream.Free;

end;
dataset.post;
dataset.close;
end;
我做的一个过程!