oracle有rtf函数,oracle存取rtf文档
(*
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);
try
docid := { 产生新的文档编号 }
selectsql(''select nvl(max(docid) + 1, 101) from test'');
with atable do if not active then active := true;{ 确认表打开 }
subid := 0; { 初始化子编号 }
while not eof(f) do begin
inc(subid);
blockread(f, buf, bufsize, l); { 读取两千个字符 }
s := buf;
setlength(s, l); { 取实际读取到的字节数 }
with atable do begin { 增加一条子文档 }
append;
fieldbyname(''docid'').asinteger := docid;
fieldbyname(''docname'').asstring := docname;
fieldbyname(''subid'').asinteger := subid;
fieldbyname(''text'').asstring := s;
post;
end;
end;
result := true; { 存储成功 }
except
result := false;{ 存储失败 }
end;
closefile(f); { 关闭文件 }
deletefile(tmpfilename);{ 删除文件 }
end;
{ 下面的函数从数据库中读取rtf文档,并在指定的容器中显示 }
function rtffromdb(arichedit: trichedit;{ rtf文档容器 }
docname: string; { 文档标题 }
aquery: tadoquery { 操作的数据集 }
): boolean; { 返回类型 }
const
tmpfilename = ''c:\temp\x.rtf''; { 临时文件 }
var
s: string; { 局部串变量 }
f: tfileofchar; { 字符文件 }
buf: tbuffer; { 串缓存 }
i, l: integer; { 局部变量 }
begin
arichedit.clear; { 清除当前显示的内容 }
assignfile(f, tmpfilename); { 关联文件 }
try
rewrite(f); { 打开文件,准备写入从数据库读出的数据 }
with aquery do begin
active := false; { 关闭数据集 }
sql.clear; { 重建sql语句 }
sql.append(''select subid, text from test where docname = '''''' +
docname + '''''' order by subid'');
open; { 打开数据集 }
if recordcount <> 0 then begin { 确认数据集非空 }
first; { 移到首记录-子文档 }
repeat { 读出一条子文档并写入文件 }
s := fieldbyname(''text'').asstring;
l := length(s);
for i := 1 to l do buf[i] := s[i];
blockwrite(f, buf, l);
next;
until eof;
end;
end;
closefile(f);{ 关闭文件 }
arichedit.lines.loadfromfile(tmpfilename);{ 从文件中装入rtf文档 }
result := true; { 读取成功 }
except { 读取失败 }
try closefile(f); except end;
result := false;
end;
deletefile(tmpfilename); { 删除临时文件 }
end;
{ 下面的函数将汉字单字转换成rtf中表示的形式。 }
{ 如表示汉字“国”的是ascii(b9)和ascii(fa),这里是十六进制; }
{ 那么在 rtf文件中对“国”字的表示占用了 8个字节: }
{ \''b9\''fa }
{ 因此,需要在查询之前进行转换。由于表示方法中含有delphi用于 }
{ 字符串的分解符:单撇号“''”,因此在转换时需要考虑这一点, }
{ 否则就不能构造出正确的 sql查询语句 }
function chnchartortfcode(ch: tchnchar): string;
var
c1, c2: char;
o1, o2: byte;
s: string;
begin
c1 := ch[1];
c2 := ch[2];
o1 := ord(c1);
o2 := ord(c2);
s := format(''\''''''''%2x'', [o1]) + format(''\''''''''%2x'', [o2]);
result := lowercase(s);{ 转换为小写 }
end;
{ 根据需要检索的关键字转换成like中使用的串。 }
{ 这里用于区别汉字的方法是根据编码。 }
{ 按照windows 中的双字节编码规则,对于双字节字符 }
{ 如汉字字符,是由两个字节构成,其中第一个字节是 }
{ 引导字符。汉字引导字符的ascii 码大于 127,因此 }
{ 可以根据此特点来区分汉字和单字节字符。 }
function makelikertfstring(strtofind: string): string;
var
i: integer;
chnchar: tchnchar;
s: string;
begin
s := '''';
i := 0;
while i < length(strtofind) do begin
inc(i);
if integer(strtofind[i]) >= $80 then begin{ 汉字的首字节一定不小于128 }
chnchar := strtofind[i] + strtofind[i + 1];
inc(i);
s := s + chnchartortfcode(chnchar);
end else begin{ 单字节字符 }
s := s + strtofind[i];
if strtofind[i] = '''''''' then s := s + strtofind[i];{ 单撇号的特殊处理 }
end;
end;
result := s;
end;
{ 构造对关键字进行全文检索的查询语句 }
function makelikestring(strtofind: string): string;
var
s: string;
begin
s := makelikertfstring(strtofind);
s := ''select distinct docname from test where text like ''''%'' + s + ''%'''''';
result := s;
end;
{ ... ... }
oracle有rtf函数,oracle存取rtf文档相关推荐
- oracle关于字符串函数,Oracle字符串处理函数
Oracle字符串处理函数 Oracle字符串处理函数 2008年10月18日 星期六 23:45 项目中有涉及存储过程对字符串的处理,所以就将在网上查找到的资料汇总,做一个信息拼接式的总结. 以下信 ...
- 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档
在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档 一直以来,我都想为 PDF 补丁丁添加一个 PDF 渲染引擎.可是,目前并没有可以在 .NET 框架上运行的免费 PDF ...
- oracle字符串提取函数,oracle字符串分割和提取函数定义
oracle字符串分割和提取函数定义 oracle字符串分割和提取 分割 create or replace function Get_StrArrayLength ( av_str varchar2 ...
- oracle空格转换函数,ORACLE TO_CHAR函数格式化数字的出现空格的缘故
ORACLE TO_CHAR函数格式化数字的出现空格的原因 在这篇博客SQL挑战--如何高效生成编码里面我由于需要将数字格式化为字符,像12需要格式化0012这样的字符,所以使用了TO_CHAR(数字 ...
- oracle判断if函数,ORACLE判断奇偶数函数
ORACLE判断奇偶数函数 create or replace function f_isodd(p_num in number) return number as begin if mod(p_nu ...
- oracle中嵌套函数,Oracle的嵌套函数语法
Oracle的嵌套函数语法 单行函数可以嵌套任意层: 嵌套函数从最深层开始执行. 通用函数: BFILENAME(directory,file_name) 返回操作系统中与物理文件 file_name ...
- oracle中各种函数,oracle中常用函数大全
1.数值型常用函数 函数 返回值 样例 显示 ceil(n) 大于或等于数值n的最小整数 select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数 s ...
- oracle中lead函数,oracle lead()函数 | 学步园
ead()是一个分析函数,适用于oracle 8i以后的版本, 使用这个函数,你可以一次性从表中查询多条记录, 而不需要进行表的自连接. 返回值:返回与当前行偏离offset行的列值. 语法: lea ...
- oracle的连接函数,Oracle各种连接函数总结
1.前言 Oracle可用连接函数会介绍以下几个 Oracle列转行函数 Listagg() strcat() wmsys.wm_concat() 2.Oracle列转行函数 Listagg() 2. ...
- oracle对象权限 函数,oracle的系统和对象权限
alter any cluster 修改任意簇的权限 alter any index 修改任意索引的权限 alter any role 修改任意角色的权限 alter any sequence 修改任 ...
最新文章
- wavelet tutorial
- JMeter使用碰到的问题
- Python Django手写分页代码
- iOS9 判断微信qq是否安装
- python实现雪花飘落效果_jQuery实现雪花飘落效果
- miui秒解bl锁_MIUI12解锁bl篇(原谅我的过失,接上篇文章)
- php怎么遍历json字符串数组,php-使用jquery遍历json数组
- 自考的那些事儿(二):第二次自考完了???
- matlab 高级函数 —— circshift、squeeze
- 基于SSM的商旅系统
- 微软在Windows 8之后将放弃Windows品牌
- 非关系数据库-NoSQL探讨
- 校园卡管理系统实验报告c语言,校园卡管理系统-C语言.doc
- 计算机科学中的张量,杨晓伟教授到我院做“张量学习的几个关键问题”学术报告...
- 渗透测试工具包 | 开源安全测试工具 | 网络安全工具
- e430c参数 thinkpad,联想ThinkPad E430c的详细参数
- Think:研究生期间的迷茫、困惑——放平心态,奋力拼搏
- 通过阿里云或清华镜像站安装tensorflow2.0
- Τεχνική υποστήριξη
- android email分析,QQ邮箱Android客户端产品体验报告