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

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

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

    在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...

  2. 如何在程序中给word文档加上标和下标

    如何在程序中给word文档加上标和下标 上标或下标是一个小于普通行格式的数字,图形,标志或者指示通常它的设置与行相比偏上或偏下.下标通常显示于或者低于基准线,而上标则高于.上标和下标通常被用于表达公式 ...

  3. C# 中使用Word文档对图像进行操作

    C# 中使用Word文档对图像进行操作 Download Files: ImageOperationsInWord.zip 简介 在这篇文章中我们可以学到在C#程序中使用一个Word文档对图像的各种操 ...

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

    转自:http://blog.csdn.net/ruby97/article/details/7406806 Word对象模型  (.Net Perspective) 本文主要针对在Visual St ...

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

    转载自:http://blog.csdn.net/fujie724/article/details/5443322 适合模板写入 今天正好有人问我,怎么生成一个报表式的Word文档. 就是文字的样式和 ...

  6. 在C#中创建word文档

    在下面文档中  首先引用word组件:Microsoft.Office.Interop.Word 在头文件中写上 using Word = Microsoft.Office.Interop.Word; ...

  7. 2.QT中操作word文档

     Qt/Windows桌面版提供了ActiveQt框架,用以为Qt和ActiveX提供完美结合.ActiveQt由两个模块组成: A   QAxContainer模块允许我们使用COM对象并且可以 ...

  8. django admin 中实现word文档下载

    为了实现此功能,需要用到的知识点: (1)django  admin  自定义字段:   参考:http://www.cnblogs.com/wumingxiaoyao/p/6928297.html ...

  9. java中读取word文档里的内容

    package com.cn.peitest.excel.word; import java.io.FileInputStream; import java.io.FileOutputStream; ...

随机推荐

  1. Spring ConversionService 类型转换(二) ConversionService

    Spring ConversionService 类型转换(二) ConversionService Spring 系列目录(https://www.cnblogs.com/binarylei/p/1 ...

  2. vs2008 安装部署 启动项

    具体操作办法如下: 鼠标右键安装项目->视图->注册表 依次创建键: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion ...

  3. Android中fragment之间和Activity的传值、切换

    功能介绍:通过一个activity下方的三个按钮,分别是发送消息(sendButton).聊天记录(chatButton).常用语(commonButton).当单击按钮是,来切换上方的fragmen ...

  4. ubuntu 配置ftp server(zz)

    ubuntu 配置 ftp server   安装vsftpd sudo apt-get install vsftpd # vsftp(Very Secure FTP)是一种在Unix/Linux中非 ...

  5. Nodejs学习笔记:基础

    本文章主要记录Nodejs基础知识点 安装 首先从Node.js官网下载安装包,并添加到环境变量.然后打开命令行,输入 node --version ,可查看版本信息 npm是Node.js的包管理工 ...

  6. Viewer.js 是一款强大的 jQuery 图像浏览插件。

    https://blog.csdn.net/qq_29132907/article/details/80136023 一.效果图  二.代码<!DOCTYPE html><html ...

  7. mysql之索引查询1

    一 备份数据 备份库: mysqldump:拷贝数据 --database:数据库 基本语法是:mysqldump -h服务器名 -u用户名 -p密码 --database 库名 > 备份路径. ...

  8. matlab柱面图

    f=@(x,y)log(y);  % ln(x)函数,平行于x轴ezsurf(f,[-pi*2,pi*2,0,20])

  9. s4-2 ALOHA 协议

    多路访问协议  随机访问协议(Random Access) 特点:站点争用信道,可能出现站点之间的冲突 典型的随机访问协议 • ALOHA协议 • CSMA协议 • CSMA/CD协议(以太网采 ...

  10. java术语(PO/POJO/VO/BO/DAO/DTO)

    PO(persistant object) 持久对象在o/r 映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了.通常对应数据模型(数据库),本身还有部分业务逻辑的处理.可以看成是与数据库 ...