zoukankan      html  css  js  c++  java
  • 在Delphi中处理word文档与数据库的互联 1

    在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: emp.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: emp.DOC') then 
     DeleteFile('c: emp.DOC');
          if FileExists('c: emp.tmp') then 
          begin
            RenameFile('c: emp.tmp', 'c: emp.DOC');
            Doc_ole.CreateObjectFromFile('c: emp.DOC',False);
            Doc_ole.Run;
          end;
    end;

    ---- 以上程序为从数据库从将WORD文档取出,并放在temp.doc的临时文件上并在ToleContainer构件中显示。 

    ---- 在程序的其他部份应准确控制表记录指针,使WORD文档的存取发生在正确的记录位置。 

  • 相关阅读:
    75. Sort Colors
    101. Symmetric Tree
    121. Best Time to Buy and Sell Stock
    136. Single Number
    104. Maximum Depth of Binary Tree
    70. Climbing Stairs
    64. Minimum Path Sum
    62. Unique Paths
    css知识点3
    css知识点2
  • 原文地址:https://www.cnblogs.com/westsoft/p/8964817.html
Copyright © 2011-2022 走看看