关于 ADODataSet 控件的问题 请大家帮助解决 (100分)

  • 主题发起人 主题发起人 jiping
  • 开始时间 开始时间
J

jiping

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DBgrid通过DataSource控件向数据库里添加数据的,但在我增加新记录时出现错误提示
project fan.exe raised exception class EOleException with message "无法为更新
集定位,一些值可能在最后读取后改变。“ fan.exe 是我的程序的可执行文件。

请大家帮助解决 。多谢
 
1,必须定义主键
2,升级ado
 
我定义主键了,我的ADO版本是 2.6
 
你的环境是怎样的?
 
pwin98 delphi6 access2000 Ado2.6
 
Possible reasons:

1. some field doesn't allow NULL

2. primay key identity property is not set, which means PK won't increase
by 1 automatically.
 
先看看代码再说,否则太费时间了。。。
 
procedure TFirstFRm.AddBtnClick(Sender: TObject);
var
dTnow : Tdatetime;

begin
with DataSource.DataSet ,dbgrid do
begin
if RecordCount<>0 then
begin
if (Fields[1].AsString<>'') And (Fields[2].AsString<>'') then
begin
Append ;
AppendMode := true;
end
else
begin
AppendMode := false;
dbgrid.Fields[0].FocusControl;
end;
end // if RecordCount<>0 then
else
begin
Append;
AppendMode := true;
end;
end;
if AppendMode then
begin
Dtnow := strtodatetime(copy(Datetimetostr(now),1,10));
with DbGrid do
begin
case flage of
1,2,6: Fields[1].AsDateTime := Dtnow;
3: Fields[2].AsDateTime := Dtnow;
4: Fields[3].AsDateTime := DtNow;
5: Fields[5].AsDateTime := DtNow;
end;
fields[0].FocusControl;
end;
end;

end;
 
試試在
with DataSource.DataSet ,dbgrid do
begin

后面加這么兩行:

Close;
Open;

應該可以解決問題...
 
看Delphi 帮助[:)]
 
只是在dbgrid中添加数据后,第一次提交数据时不会发生错误,再没有退出的情况下修改刚添加这条记录的数据再次
提交就会发生上述错误。
 
将你的ADOConnection或DataSet的CursorLocation改为clUserServer
不过这样该系统效率会下降
建议使用缓存模式更新吧
记着给分
 
To shinings
谢谢你,问题解决,但我不知道如何使用缓存模式更新,请指教。
 
DataSet是不是从多个表中提取的数据集?
用同时更新多个表的数据,最好用SQL语句。
 
就是ADO提供的缓存模式呀

将ADODataSet的LockType设为ltBatchOptimistic

看看书吧
 
接受答案了。谢谢大家的帮助。
 
后退
顶部