基于 TADOQuery 为 Oracle 的 CLOB 字段赋值,发现中文输入进去不全?(200)

  • 主题发起人 主题发起人 cpj7406
  • 开始时间 开始时间
C

cpj7406

Unregistered / Unconfirmed
GUEST, unregistred user!
var Qry: TADOQuery; strSQL: string;begin try strSQL := 'select * from t where 1=0'; Qry := TADOQuery.Create(nil); with Qry do begin Active := False; Connection := Conn; SQL.Clear; SQl.Add(strSQL); Active := True; end; Qry.Edit; Qry.Append; Qry.FieldByName('C').AsString := '中国'; Qry.Post; finally Qry.Free; end;其中, conn 为窗体上的一个 TADOConnection 对象,其连接字符串为 "DRIVER=Oracle in OraHome92;UID=???;PWD=???;DBQ=???;SERVER=???"。Oracle:9.2.1,运行于 Windows Server 2003。Delphi:7测试程序Exe,运行于 Windows Xp sp2。测试的数据表:create table t (c clob);如上所示,如果试图赋值 “中国”,只会搞进去“中”;如果试图赋值“ab”,则能够正常写入。这个问题,不知哪位能够提出一些解决方法。我已经花费若干小时遍览了 Internet 上的各种文章,居然未解。什么 TMemoField.LoadFromFile,什么对字符串的 Unicode 编码都尝试过了。
 
oracle安装时最好选择支持UNICODE字符集
 
Oracle 的 char、varchar2、nchar、nvarchar2 使用起来都没有问题,单单是这个 clob 有问题,不太象和 oracle 的字符集相关。另外,如果采用 insert into t(c) values('中国'),也是很正常的。
 
数据库格式不对
 
我自已强烈关注一下!希望高手能够在百忙之中赐教一二。
 
我在我电脑上测试了类似的问题,没有这种情况》ORA921,D7
 
唉,看来这是命运。说实话,做为业务基础平台产品,怎么可能对这种基础的问题没有测试过了!?Oracle、MS SQL、Access每种数据类型,基于ODBC、ADO的不同访问访问,都进行过深入的、多方位的测试!问题是,没有检查点列表,没有阶段性地由专人按检查点列表逐项进行“冒烟测试”,可能在3个月或6个月前的某个夜晚,这个问题悄悄地发生了......只是我们全然不知!过去的日子里,觉得软件工程的那些方法、觉得CMM/CMMI、ISO的那些标准完全是吃饱了没事干,觉得怎么会有人去写工作日志呢?怎么会定期什么 review 呢?怎么会经常要什么冒烟测试呢?^_^,慢慢地,今天,想起美国人的那些书、那些话,哦,原来是这样......只有长期关注了!
 
楼主真是感慨万千呀!
 
继续等待答案中······我自己可没闲着,有时间就尝试和分析。非把这个问题处理掉不可!(其实,改用 nvarchar2(2000) 或 varchar2(4000) 也没有什么大不了的,而且,基于数据库自动更新工具也很容易做,但是不能轻易放掉问题!我现在就暂时改用 nvarchar2)。
 
Oracle 是一个相对稳定和透明的产品。但是仍然有诸多令人琢磨不透之处,可能太复杂的原因。请收我给你发的一些资料,希望能帮助你。
 
接受答案了.
 
后退
顶部