如何用DELPHI实现把WORD、EXCEL和图片等存储到数据库中
来源:互联网 发布:淘宝彩妆店铺名字 编辑:程序博客网 时间:2024/05/17 07:23
用image字段保存这些文档。
var
word_stream: TMemoryStream;
filename: string;
begin
if odgDoc.Execute then//odgDoc:OpenDialog
begin
filename := ExtractFileName(odgDoc.FileName);
word_stream := TMemoryStream.Create;
word_stream.LoadFromFile(odgDoc.FileName);
word_stream.Position := 0;
cdsPACT.Append
cdsPACT.FieldByName('DocName').Value := filename;
TBlobField(cdsPACT.FieldByName('PactText')).LoadFromStream(word_stream);
cdsPACT.Post;
word_stream.Free;
end;
end;
---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具。在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可避 免;即从以Delphi开发的前台界面输入图形,并保存到相应的数据库字段中。在这种形式的图形处理中,BMP文件的处理比较简单,因为Delphi本身 有Image和DBImage构件,用这些构件与数据库中可以保存图形的大型字段BLOB比较容易地进行数据交换。以这种方式进行图形处理已应用在许多 MIS软件中,包括处理人员照片的人事档案系统等。
---- 但是,BMP文件一般都比较大。而且有时要录入的是自己在计算机上画的简图,并伴随大量文字说明。这种情况用Win95中的画图板等处理BMP文件的工具 处理就比较困难。一般应用人员都喜欢用WORD画图和写说明文字,然后保存到数据库中。
---- 经过一段时间的摸索,我们解决了这个问题,并经过完善,在应用中运行较好。程序如下:
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文档的存取发生在正确的记录位置。
var
word_stream: TMemoryStream;
filename: string;
begin
if odgDoc.Execute then//odgDoc:OpenDialog
begin
filename := ExtractFileName(odgDoc.FileName);
word_stream := TMemoryStream.Create;
word_stream.LoadFromFile(odgDoc.FileName);
word_stream.Position := 0;
cdsPACT.Append
cdsPACT.FieldByName('DocName').Value := filename;
TBlobField(cdsPACT.FieldByName('PactText')).LoadFromStream(word_stream);
cdsPACT.Post;
word_stream.Free;
end;
end;
---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具。在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可避 免;即从以Delphi开发的前台界面输入图形,并保存到相应的数据库字段中。在这种形式的图形处理中,BMP文件的处理比较简单,因为Delphi本身 有Image和DBImage构件,用这些构件与数据库中可以保存图形的大型字段BLOB比较容易地进行数据交换。以这种方式进行图形处理已应用在许多 MIS软件中,包括处理人员照片的人事档案系统等。
---- 但是,BMP文件一般都比较大。而且有时要录入的是自己在计算机上画的简图,并伴随大量文字说明。这种情况用Win95中的画图板等处理BMP文件的工具 处理就比较困难。一般应用人员都喜欢用WORD画图和写说明文字,然后保存到数据库中。
---- 经过一段时间的摸索,我们解决了这个问题,并经过完善,在应用中运行较好。程序如下:
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文档的存取发生在正确的记录位置。
- 如何用DELPHI实现把WORD、EXCEL和图片等存储到数据库中
- 如何用Java把数据从数据库导入到Excel中
- 如何用java把excel.xls的数据存放在MySql数据库中
- 如何用poi包把数据导到excel
- 如何把图片、声音等存储到sql中
- 如何把图片、声音等存储到sql中
- 把图片、声音等存储到sql中
- 如何用PHP把EXCEL表导入Mysql数据库
- 如何用c#连接到oracle数据库并用DataGrid把表中字段显示出来
- 如何用一条语句把一张表的数据插入到另一张数据库表中
- 如何用一条语句把一张表的数据插入到另一张数据库表中
- 【OFFICE自动化】如何用VC6.0绘制Excel和Word
- 关于如何用WORD实现图片转文字
- delphi中如何用image控件显示网络图片
- 如何用vb将计算结果输出到word中?
- 在Delphi中如何把数据库中的记录引到word中
- 在Delphi中如何把数据库中的记录引到word中
- 如何用Delphi实现WINDOWS XP中“本地连接”的启用和禁用 ?
- Web乱码与字符集的理解
- new links
- 有可能去看の书
- 怎么成为优秀的软件模型设计者?
- 简单去除迅雷中的广告
- 如何用DELPHI实现把WORD、EXCEL和图片等存储到数据库中
- 动态改变Picture控件上的位图
- 微软office系列产品介绍(包括Office SharePoint Server 2007等)
- AOL的面试题,看似很简单
- 使用水晶报表11.5 问题 is already open. Do you want to close it?
- 几个正则表达式(1.ZF翻页url:保存其他参数,).
- int、char、double与byte相互转换的程序
- 用PlSql导出数据到Excel文件
- VC++中利用MSXML解析XML文档