• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

如何用DELPHI实现把WORD、EXCEL和图片等存储到数据库中

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DELPHI将金额转换成中文大写,与英文大写发布时间:2022-07-18
下一篇:
Delphi与DirectX之DelphiX(37):TDIB.AddRGB();发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap