oracle中clob字段的写入与读取问题(200分)

  • 主题发起人 主题发起人 教父
  • 开始时间 开始时间

教父

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序在写入SQL Server数据库时正常,但是往oracle中写时内容就会乱了,中间会掉一
部分,很奇怪,在跟踪过程中,变量是没有问题的,就是写进去后出错。
文本内容如下:
在SQL Server中:
[特别提示]
股票代码 :600000 股票简称:浦发银行
停牌公告时间:2002.03.21 复牌时间:
停牌原因:
浦发银行 上午停牌
备注:


[最近分红配股]
方案公布日期:2000.07.01
实施方案内容:10派1.5元(含税)
每股收益 :0.38500

[最新股本状况(单位:万股)]
总股本 :241000.0000 流通股 :40000.0000

国家股 :0.0000 国有法人股:0.0000
募集法人股:122100.0000 发起人股 :78900.0000
转配股 :0.0000 B股 :0.0000
H股 :0.0000

[最新财务指标(2001年度)]
每股收益 :0.44100 资本公积金 :3890037000.00
每股未分配利润:0.00 净资产收益率 :15.03
每股净资产 :2.93 市盈率1 :0.00
市盈率2 :0.00 市净率 :0.00

在oracle中:
<最新资料>

[特别提示]
股票代码 :600000 股票简称:浦发银行
停牌公告时间:2002.03.21 复牌时间:
停牌原因:
浦发银行 上午停牌
备注:


[最近分红配股]
方案公布日期:2000.07.01
实施方案内容:10派1.5元(含税)
每股收益 :0.38500

[最新股本状况(单位:万股)]
总股本 :241000.0000 流通股 :40000.0000
国家股
每股净资产 :2.93 市盈率1 :0.00
市盈率2 :0.00 市净率 :0.00

可以看到从倒数第三行丢失了一部分,但是最后两行还在,所以才想不通,请各位
指点。
我用的代码是:
FieldByName('F1').AsString := Text;
 
是用BDE还是ADO连接的。
 
ADO连ORACLE不是很好的,你用BDE试试看。
 
BDE在处理oracle时问题更多。
经过测试发现,Post之后马上读出来是好的,而且库中的内容确定是正常的,但是如果
在窗体上加一个按钮,加上代码:
with ADOQueryTarget do begin
Close;
SQL.Text := 'select f1 from cninfo.F10_main where stockid = :StockID';
Parameters.ParamByName('StockID').Value := 'H600000';
Open;
MemoErrMsg.Text := FieldByName('F1').AsString;
Close;
end;
这时读出来的内容又是错的,而且错的都是一样,不是随机的,会不会有什么控制字符?
 
我也发现有时在窗口添加一个按钮会出错, 但不知道原因.
写入数据库时换种方法呢? 试过把字段类型强制类型转换成 TBlobField, 然后调用
LoadFromStream 方法(先把字符串读到流里面) 没有?
 
肯定跟写入没有关系,因为数据库里面的内容是正确的,就是读出来时出问题了。
我用了流的方法,还是一样的结果,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
MS : TBlobStream;
begin
with ADOQuery1 do begin
close;
SQL.Text := 'select f1 from cninfo.f10_main where stockid = :stockid';
Parameters.ParamByName('stockid').value := 'H600001';
Open;
MS := TBlobStream(CreateBlobStream(Fields.FieldByName('F1'), bmRead));
try
Memo1.Lines.LoadFromStream(MS);
finally
MS.Free;
end;
end;
end;
 
我看了你前面说的
>我的程序在写入SQL Server数据库时正常,但是往oracle中写时内容就会乱了
认为可能是clob字段写进去的方法有问题. 后来说写进数据库对, 用相应的方法读出来
时却出错, 我倒没想到这点. 不是代码的问题吗? 听课, 等待高手来解决这个问题.
 
最新发现有几条记录写入的时候就有问题,吐血啊。
 
建议:不要用clob字段保存大容量数据,转用blob。blob在delphi中经过封装,可以用流的
方式对字段内容进行操作。只须在写入和读出的地方保持一致,你都可以将图片放入数据库。

query对lob的支持不是很好,可以选择使用table + filter。
(fieldbyname as TBlobField).LoadFromFile
(fieldbyname as TBlobField).SaveToFile
 
不是说clob是保存大容量的文本文字,blob是保存二进制的文件吗?我要保存的就是文本文字,
难道也要用blob吗?那我再试试看。

我发现BDE对clob的支持反而是没有问题的,读写都不会出现错误,只有在ADOQuery中会
出现问题。为些我还专门重载了一个BDE的版本。 :(
 
我把CLOB改为BLOB了,真的是没有问题了,我们的主任说可能在字符集转换的时候会出
问题,不知道是不是。
 
后退
顶部