用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导致的。不过不知道有没有其他原因,或对这个问题好的解决办法。
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导致的。不过不知道有没有其他原因,或对这个问题好的解决办法。
↑執行後、F2己不是null。Oracle更不可能把空串自动变成null。可執行: select * from csn.test where F2 IS NULL 検証多半是在csn.test表中没有primary key造成的。
我想你可以简单地在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可能提供设置是否转换空串。而且你的设置和我的不一样,那就找找设置的问题
可能你设置使ADO查询时,where f1=?? f2:='';(出现错误)
你数据库中有几个字段?