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

本文介绍如何使用Delphi读取并保存Word文档至数据库BLOB字段,包括从数据库读取文档并显示的方法。

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

 

不需Excel也可讀寫xls檔的Delphi控件 用来读取Excel,Access的控件 读写任何单元值 数字型、字符型、布尔型以及错误型。但是你了解日期时间型单元吗?在Excel中没有这样的单元。ExcelDelphi一样的方式来存储日期时间的,即浮点型。那是什么制造了日期或时间值啦,是格式化。 完全支持公式。你可以使用Excel一样的函数,也支持对外部工作簿引用的公式,你甚至可以从外部引用读取结果。 与操作Delphi的TStringGrid一样的方式操作单元格,或则通过给单元格命名,比如:”D7” 根据单元格的规则以字符串格式读取单元值 根据你的需求格式化单元 格式化很简单。通过获取单元格,你就可以操作单元的格式属性。例如:XLSReadWriteII.Sheet[n].Cell[Col,Row].FontSize := 12; 你也可以对域进行格式化,比如设置边框。 支持所有的Excel格式选项 合单元格 操作所有的打印选项 选择页面大小,设置边距 设置标题页脚,包括格式码。 定义打印区域 设置分页符 XLSReadWriteII完全支持Unicode 所有的字符型都是宽字符型。你完全不必担心非英语字符。 控件 你可以插入控件以及定义他们的源目的单元 绘图 插入所有种类的绘图,从简单的线条到AutoShapes 多行文本文本框 创建编辑文本框以及多行文本 图表 创建Excel中一样选项的图表 复制/移动/删除 可以以Excel一样的行为复制、移动删除单元 行列也可以像单元一样复制移动 支持工作簿之间的复制移动 可以复制整个工作簿 使用命名的域/单元 你可以在你想要的任何地方命名 通过命名访问单元格,例如:XLS.NameAsFloat['MyCell'] := 202.5; 支持指定、内置的名称 支持所有超链接类型 网页E-mail地址 本地文件 服务器文件 工作薄引用 加密文档 你可以读写加密文件。条件是你需要知道文件的密码。 计算 可计算单元以及整个工作薄 计算引擎将依据单元进行计算。 可读取引用的外部工作薄。这通过一个特殊的快速查询程序进行执行 Rich Text单元 为了轻松地创建多字体格式的单元,单元可以以RTF格式读写 VBA宏 可以读写文件中的宏,使用XLSReadWriteII可以为控件比如:按钮、组合框等添加宏 导入及导出 从下列导入数据… Open Office Calc文档 CSV文件以及其他可以自动识别分隔符、小数分隔符文本引用字符的文本文件 HTML表格(标签) 数据库 导出数据为… CSV文件 HTML文件 其他 自动过滤 单元验证 有条件的格式 合单元 PaintCell方法:将单元内容渲染到TCanvas对象的 XLSReadWriteII包还包含下列组件: 从任何数据库中导入数据到工作薄 工作薄导出为HTML文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值