在Delphi中处理word文档与数据库的互联

---- 目前,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文档的存取发生在正确的记录位置。

原文地址:https://www.cnblogs.com/westsoft/p/8964762.html

时间: 2024-10-11 01:23:56

在Delphi中处理word文档与数据库的互联的相关文章

在Delphi中处理word文档与数据库的互联 1

在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可避免:即从以Delphi开发的前台界面输入图形,并保存到相应的数据库字段中.在这种形式的图形处理中,BMP文件的处理比较简单,因为Delphi本身有Image和DBImage构件,用这些构件与数据库中可以保存图形的大型字段BLOB比较容易地进行数据交换.以这种方式进行图形处理已应用在许多MIS软件中

C# 中使用word文档对图像进行操作

C# 中使用Word文档对图像进行操作 Download Files: ImageOperationsInWord.zip 简介 在这篇文章中我们可以学到在C#程序中使用一个Word文档对图像的各种操作.图像会比阅读文字更有吸引力,而且图像是与内容紧密相关的.有时图像可以将内容描述的更为清晰,就像使用图表显示某一周期内的数据变化. Spire.Doc for .NET(http://www.e-iceblue.com/Introduce/Word-for-net-introduce.html)是

c#中操作word文档-一、模板方式写入

转载自:http://blog.csdn.net/fujie724/article/details/5443322 适合模板写入 今天正好有人问我,怎么生成一个报表式的Word文档. 就是文字的样式和位置相对固定不变,只是里面的内容从数据中读取. 我觉得类似这种的一般用第三方报表来做比较简便.但既然要求了Word,只好硬着头皮来. 网上的方法大多数都是从一个GridView或表中获得数据后向Word中添加一个表格. 但不方便实现下面的效果(图1).(以下插图可能需要CSDN用户登录后才能看到)

c#中操作word文档-二、比较全的一份示例

最近两天研究了一下如何使用VS2008(C#语言)输出Word文档.以下是几点总结: 1.非常简单. 2.开发及运行环境要求.操作系统为:WindowsXP(安装.net framework2.0)/Vista/Win7:在操作系统必须安装Word2003完全安装版.这里必须要强调是Word2003完全安装版,因为软件开发及运行都需要一个com组件:Microsoft word 11.0 Object Library.如果不是Word2003完全安装版,可以下载这个com组件,并手动的安装这个c

c#中操作word文档-四、对象模型

转自:http://blog.csdn.net/ruby97/article/details/7406806 Word对象模型  (.Net Perspective) 本文主要针对在Visual Studio中使用C# 开发关于Word的应用程序 来源:Understandingthe Word Object Model from a .NET Developer's Perspective 五大对象 Application           :代表Microsoft Word应用程序本身 D

2.QT中操作word文档

 Qt/Windows桌面版提供了ActiveQt框架,用以为Qt和ActiveX提供完美结合.ActiveQt由两个模块组成: A   QAxContainer模块允许我们使用COM对象并且可以在Qt应用程序中嵌入QActive控件. B   QAxServer模块允许我们导出使用Qt编写的自定义的COM对象和Active控件. C   在这里,我们使用了QAxContainer模块,所以在.pro中,需要使用下面这一项来链接这个QAxContainer模块:CONFIG+=qaxcont

ios在项目中打开word文档、ppt等总结

最近在项目开发中遇到下载附件文档预览需求,在这里总结一下我的实现方法,本文最后会附带我写的demo下载地址 这里我总结了三种实现方法(1)用webView预览(2)通过UIDocumentInteractionController实现跳转(3)应用Quick Look系统框架,下面依次介绍各个方法实现 首先来看用webView这个比较常用,不做过多解释,代码如下: _webView = [[UIWebView alloc]initWithFrame:self.view.bounds]; _web

Java环境中,word文档转PDF直接打开浏览而非下载

在平台上,需要把文档直接浏览而非下载,实现方法是先把文档转为PDF文件, 但在linux系统中确实汉字字库,所以转换失败,以下是解决方法 后面正式服务器也要添加字库,不然会转换出乱码文件,处理步骤如下:1.将Windows上字体文件 C:\Windows\Fonts目录,复制到服务器的/usr/share/fonts目录2.运行sudo fc-cache -f -v命令刷新字体缓存3.重启服务器 但正式服务器转换文件出错,tomcat没报错误,显示程序卡住,查错方法写个demo跑, 报“Can'

win7下delphi中的help文档问题

一,要安装WinHlp32.exe 文件 二, 三,在安装目录下: