首 页 教育新闻课件中心论文中心教学教案试题中心语文专题综合下载技术教程公务员  
设为首页
加入收藏
联系我们
您当前的位置:中国教育资源网 -> 技术教程 -> 软件开发 -> Delphi -> 技术内容 退出登录 用户管理

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

论文作者:佚名  论文来源:不详  论文发布时间:2006-6-19 22:24:31  论文发布人:chjchjchj

减小字体 增大字体

 

  
  关系数据库都提供大文档的存储和提取。对于视频资料、音频资料、图象资料等大文档,一般需要 另外开辟字段用于存储摘要信息,因此在查询和检索时并不访问大字段,而只是在存储和提取时才操作 大字段。例如,你不能对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);

 
[] [返回上一页] [打 印] [收 藏]  
 ∷相关技术评论  (评论内容只代表网友观点,与本站立场无关!) [查看发表评论...]
 
 中国教育资源网免费技术教程下载中心-站内广告 站内广告 中国教育资源网免费技术教程下载中心-站内广告 
 中国教育资源网站内搜索 站内搜索 中国教育资源网站内搜索 
 

   
 中国教育资源网免费技术教程下载中心-栏目导航 栏目导航 中国教育资源网免费技术教程下载中心-栏目导航 
· C · Delphi
· Java · vb
 
中国教育资源网免费技术教程下载中心-相关教程  相关技术 中国教育资源网免费技术教程下载中心-相关教程
· 具有不同字体的列表
· Delphi中易混淆的概
· 在Delphi中巧改窗体
· Delphi 中自做动态显
· 利用Delphi编程发送
· Delphi中怎样监视PO
· DELPHI和注册表Delp
· Delphi参考手册Delp
· 用Delphi 3.0编制MP
· 用Delphi制作动态有
 中国教育资源网免费技术教程下载中心-本月热门教程 本月热门 中国教育资源网免费技术教程下载中心-本月热门教程 
 
 中国教育资源网免费技术教程下载中心-本日热门论文 本日热门 中国教育资源网免费技术教程下载中心-本日热门论文 
 
关于本站 - 网站帮助 - 免费课件 - 美容 - 绿色软件 - 软件下载 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 网站留言
浙ICP备06010405号 Email:cnkjz@163.com 技术支持:名流设计
版权所有 Copyright© 2002-2004 名流