首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图 ┆ 虚拟主机 ┆ 中文域名
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 软件开发 → Delphi编程 → 文章内容

Delphi中对Oracle存取RTF文档(1)

作者:佚名  来源:网上收集  发布时间:2005-12-10 0:19:50
 

  
  关系数据库都提供大文档的存储和提取。对于视频资料、音频资料、图象资料等大文档,一般需要 另外开辟字段用于存储摘要信息,因此在查询和检索时并不访问大字段,而只是在存储和提取时才操作 大字段。例如,你不能对Oracle中的LONG RAW类型进行LIKE介词的查询,更不能使用等号“ =”查询。 这对于存储大段文本(容量超过2K)同时又需要全文检索是相当不便的。本文将介绍如何利用数据库的 字符串数据类型存取和查询大段文本。这里以Oracle数据库和Delphi应用程序为例,重点介绍如何在数据库中存取 RTF文档。

  对于纯文本,可以简单地将其分割成若干个串,分别存储到VARCHAR(2000)字段中即可。在查询时 可以使用LIKE比较,从而达到全文检索的目的。为了保留换行等段落信息,应当将回车换行(#13#10) 也作为串的一部分进行保存。数据录入时可以提供Memo控件(不是DBMemo)进行录入,然后顺序连接各行,当连接成的串临近2000个字符(单字节字符)长度时,就存入一条记录,然后对剩余的行重复上述操作。这样,最终将纯文本存成若干长度不超过2000的VARCHAR(2000) 字段中。这里需要另外开辟字段 用于存储文本编号和子序号,以便区分不同的文本和读取文本时顺序连接所有的子串。查询纯文本时, 就可以象查询普通的VARCHAR 字段一样,可以使用LIKE,也可以使用等号“ =”(几乎不需要使用)。 需要注意的是,可能用户提供的关键字正好被存储在不同的子串中,这时是查询不到的。因此,在设计时应当考虑存储重复的串。例如,每个子串中仅有前1900个字符是有效字符,最后100 个字符用于存储 下一个子串的前100 个字符。这样就避免了关键字被分开的情况。唯一的不足是,必须限制用户输入的 查询关键字长度不得超过100 个字符(50个汉字),但这很正常,算不上不足。

  事实上,同样可以利用这一技巧对 RTF文档进行存取和查询。这时,用于录入和显示 RTF文档的是 RichEdit控件(不是DBRichEdit),而不再是Memo控件。对于 RTF文档的存取,不能象存取纯文本那样 通过Memo的属性Lines.Strings[Index]进行操作(尽管RichEdit控件具有相同的属性),因为这样做就 无法保存文档的格式了。需要利用的是RichEdit的两个方法:SaveToFile和LoadFromFile。需要了解的 是, RTF文件中用纯字符描述字体、字号、文本等各种格式信息和内容信息。因此,存储和提取时可以 视为纯文本进行操作。但对于查询,就不能直接用LIKE加关键字的方式进行。因为 RTF文档中的每一个 汉字都是用特殊的表示方法存储,只有单字节字符是原样存储。所以在查询时要对关键字进行处理才能 用在查询语句中。 [page]在测试这个例子之前,必须有如下的数据结构,这里以Oracle创建表的 SQL语句形式给出:

  (*
  CREATE TABLE TEST( { 表名为 TEST }
   DOCID NUMBER NOT NULL, { 文档编号 }
   DOCNAME VARCHAR(40) NOT NULL, { 文档标题 }
   SUBID NUMBER NOT NULL, { 文档子编号 }
   TEXT VARCHAR(2000) NOT NULL, { 子文档内容 }
   PRIMARY KEY(DOCID, SUBID)); { 联合主键 }
  *)

   下面是程序实例中的主要部分:

  { ... ... }

  const
   BufSize = 2000; { 串的最大容量 }

  type
   TBuffer = array [1..BufSize] of Char; { 串缓存 }
   TFileOfChar = file of Char; { 字符类型文件 }

   TChnChar = string[2]; { 汉字字符类型 }

  { SQL查询,返回首记录首字段的值 }
  function SelectSQL(S: string): Variant;
  begin
   Result := NULL;
   with TADOQuery.Create(Application) do try
   Connection := FMain.ADOConnection1;
   SQL.Append(S);
   SQL.SaveToFile(‘c:a.txt‘);
   Open;
   Result := Fields[0].AsVariant;
   finally
   Free;
   end;
  end;

  { 下面的函数将RTF文档存入数据库 }
  function RTFToDB(ARichEdit: TRichEdit; { 文档容器 }
   DocName: string; { 文档标题 }
   ATable: TADOTable { 操作的表 }
   ): Boolean; { 返回类型 }
  const
   TmpFileName = ‘c:x.rtf‘; { 临时文档 }
  var
   DocID, SubID, L: Integer; { 局部变量 }
   S: string; { 串 }
   F: TFileOfChar; { 字符文件 }
   Buf: TBuffer; { 文本缓存 }
  begin
   ARichEdit.Lines.SaveToFile(TmpFileName);{ 先存入文件 }
   AssignFile(F, TmpFileName); { 打开文件 }
   Reset(F);

 

[] [返回上一页] [打 印]
  • 上一篇文章:Delphi5实现多层Client/Server应用程序(1)
  • 下一篇文章:Delphi中实现多线程同步查询(2)

  • 相关文章:
  • [图文]利用Delphi编制IP地址转换器
  • 简析XML及其在Delphi中的应用
  • Delphi模拟最小化恢复关闭按纽
  • Delphi实现远程串口的数据采集
  • [图文]Delphi开发基于DCOM的聊天室
  • 在Delphi中使用电子邮件
  • Delphi托盘编程实战演练
  • Delphi实现同类型文档自动合并
  • Delphi开发98屏幕保护预览程序
  • [图文]Delphi 8 For .NET 抢先预览
  • [图文]用Delphi实现动态获取版本信息
  • Delphi图像存取另类解决方案
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号