在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. jQuery操作(一)

    基本语法:$(selector).action() 寻找元素(重要的选择器和筛选器) 一:选择器 1.1 基本选择器: $("*") $("#id") $(&q ...

  2. jquery动态出操作select

    var citys = {1:'北京',2:'上海',3:'广州',4:'深圳'}; $("#city option:gt(0)").remove(); for(var k in ...

  3. windows + php7.1 + redis3.1.4

    首先确定PHP版本(MSVC14 x64 NTS) 下载redis扩展 拷贝php ext目录,修改php.ini配置,添加 extension=php_redis.dll 重启apache,确认re ...

  4. Java学习笔记:知识总结

    概述 1991年由sun公司开发的名称为Oak的语言,1994年更名为Java. JDK:Java Development Kit,Java的开发和运行环境,Java的开发工具和JRE. JRE:Ja ...

  5. 计算器的改良(NOIP2000)

    题目链接:计算器的改良 这道题,不是很难,但代码也短不到哪去. 我们这里决定采取边读入边计算的方法,因为题目没有明确说式子有多长. 我们需要计算什么? 我们需要知道等号两边未知数的系数和常数项即可. ...

  6. 【转】linux tar 压缩

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...

  7. oracle 锁表查看与解锁

    查看被锁的表: select l.session_id,o.owner,o.object_name from v$locked_object l,dba_objects o where l.objec ...

  8. jQuery Growl插件(消息提醒)

    ps:菜鸟教程 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <s ...

  9. IntelliJ IDEA 2017版 spring-boot 2.0.5 邮件发送简单实例 (三)

    一.搭建SpringBoot项目 详见此文:https://www.cnblogs.com/liuyangfirst/p/8298588.html 注意: 需要添加mail依赖的包,同时还添加了lom ...

  10. typecho 文章归档调用

    <style> div { display: block; } .title { position: relative; margin: 0; line-height: 32px; fon ...