去那儿看看
http://www.inprise.com.cn/support/word.htm
http://www.inprise.com.cn/support/word.htm
解决方案 »
- delphi怎么调用JAVA写的hessian方法?
- edit的故事,一辈子的追求.
- 熟悉 OOP 和C#。NET,但是由于工作需要需要开发一个DELPHI的传输软件,应该看哪些书?
- 简单问题
- 怎么调用SHELL命令啊?在DOS下好像可以的。
- 怎样把WORD型数据(小于100)转换为HEX赋给BYTE型?(UP有分)
- 怎样触发鼠标移动事件以取消屏保?
- 找李维的两本书,要电子版可下载的,下载好了立即给分,谢谢
- 请问怎样实现: 有两个主MDI窗体在一个应用程序里?
- 紧急高分求解(150分)
- 谁用过SYBASE SQL ANYWHERE,能否两个WIN98连同一个数据库
- 问一个关于ServerSocket的问题
procedure TForm3.Button1Click(Sender: TObject);
var MSWord:Variant;
i,j:Integer;
begin
SaveDialog1.Filter:='*.DOC|*.DOC';
SaveDialog1.DefaultExt:='DOC';
if SaveDialog1.Execute then
begin
MSWord:=CreateOLEObject('Word.Application');
MSWord.Documents.Open(FileName:=SaveDialog1.FileName,ReadOnly:=False);
MSWord.Visible:=False;
MSWord.ActiveDocument.Range(Start:=0,End:=0);
Table1.Open;
j:=Table1.RecordCount;
Table1.First;
for i:=1 to j do
begin
MSWord.ActiveDocument.Range.InsertAfter(Text:=Table1.FieldByName('CODE').AsString+Table1.FieldByName('COLOR').AsString+Chr(13));
Table1.Next;
end;
MSWord.Documents.Close;
end;
end;
我是想在C/S模式下将Word文档内容存储在服务器的数据库中,让所有的客户端都能看到,并非只想在本地存取Word文档。
procedure TForm1.savetostramClick(Sender: TObject);
var str:wideString;
FromF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
begin
if Od.Execute then
begin
AssignFile(FromF,Od.FileName);
Reset(FromF,1); { Record size = 1 }
repeat
BlockRead(FromF,buf,SizeOf(Buf),NumRead);
str:=str+buf;
until (NumRead = 0);
CloseFile(FromF);
end;//****************
table1.Insert;
table1.FieldByName('doc').asstring:=str;
table1.post;end;
用savetostream时:
bs:= TBlobstream.create( fieldname as TBlobfield,bmwrite );
tolecontainer.savetostream( bs );
bs.free;
前提是使用Tolecontainer,具体可查看delphi的帮助。
如保存文件,用TFilestream.
简单一点的办法是将读出的流存入一个临时文件,然后用OLEContainer的CreateLinkFromFile函数。
procedure TForm_ole.BitBtn2Click(Sender: TObject);
var
l_Stream:TStream;
begin
Table1.Insert;
l_Stream:=TBlobStream.Create(Table1DOC as TBlobField,bmWrite);
ole1.SaveToStream(l_Stream);
Table1DOC.SaveToStream(l_Stream);
Table1.Post;
l_Stream.Free;
end;
另外BLOB字段最大长度是多少,如果有100M的Word文档是否能保存。
在DB2中有没有比BLOB更长的数据类型。
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文档的存取发生在正确的记录位置。
不会这么复杂吧?用TBlobField存取就行了,代码职下:
存:
if not OpenDialog.Execute then
Exit ;
sFileName := OpenDialog.FileName ;
tblTable.Insert;
tblTableIndex.AsInteger := 20000727001 ;
TBlobField(tblTableDOC).LoadFromFile(sFileName) ;
tblTable.Post;
读:
sFileName := GetTempFileName ;//自定义函数,生成临时文件名。
sFileName := sFileName + '.DOC' ;
//定位记录 略
TBlobField(tblTableDOC).SaveToFile(sFileName) ;
ShellExecute(handle,'OPEN',PChar(sFileName),'','',SW_SHOWNORMAL) ;
//API函数,要用到ShellAPI单元。