用ADODataSet对Oracle的表数据做处理,表中有F1和F2两个字段
F1 F2
a  1
b  2
c  3
仅对New Application添加如下代码
procedure TForm1.Button1Click(Sender: TObject);
begin
  ADODataSet1.Edit;
  ADODataSet1.FieldByName('F2').AsString := '';
  ADODataSet1.Post;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  ADODataSet1.CommandText := 'select * from csn.test'
  ADODataSet1.Open;
end;
两次点击Button1即出现错误信息:无法定位行,可能值已经改变。
我估计是因为Oracle把空串自动变成null导致的。不过不知道有没有其他原因,或对这个问题好的解决办法。

解决方案 »

  1.   

    ADODataSet1.FieldByName('F2').AsString := '';
    ↑執行後、F2己不是null。Oracle更不可能把空串自动变成null。可執行: select * from csn.test where F2 IS NULL  検証多半是在csn.test表中没有primary key造成的。
      

  2.   

    你所说的情况都验证过了,很抱歉地说结果和设想全部相反。
    我想你可以简单地在Oracle试一下
    前提:table csn.test (f1 primary, f2) 空表
    insert into csn.test (f1,f2) values ('a','')
    select * from csn.test where f2 is null
    结果:f1 f2
          a  
    如果结果不是这样,说明oracle可能提供设置是否转换空串。而且你的设置和我的不一样,那就找找设置的问题
      

  3.   

    ADODataSet1.CommandText := 'select * from csn.test'
    可能你设置使ADO查询时,where f1=?? f2:='';(出现错误)
    你数据库中有几个字段?
      

  4.   

    Oracle中 空串 和 null 是一样的,都应该应该用 is null 判断。