网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
Delphi中对Oracle存取RTF文档
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式
ant;
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;
C2 := Ch;
O1 := Ord(C1);
O2 := Ord(C2);
S := Format(''\''''''''%2X'', [O1]) + Format(''\''''''''%2X'', [O2]);
Result := Lowercase(S);{ 转换为小写 }
e
  • 下一篇资讯: Delphi 4中TTreeView的bug
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号