Dataset not in edit or insert mode 是什么原因导致的?(200分)

  • 主题发起人 Dark Angel
  • 开始时间
D

Dark Angel

Unregistered / Unconfirmed
GUEST, unregistred user!
[red][/red]adodataset1.commandtext:='select * from table1';
adodataset2.commandtext:='select * from table2';
adodataset1.fields[0].asstring=adodataset2.fields[0].asstring;
adodataset1.fields[0] 与adodataset2.fields[0] 都是文本类型的字段
为什么会出现 Dataset no in edit or insert mode 的异常,是什么原因导致这样的异常?
edit post LockType ReadOnly 属性都试过了,没用。
200分送答
 
必须首先让数据集处在编辑状态下,adodataset1.edit;才能对数据集进行修改
 
试试
AdoDataSet1.Edit;

我以前用ADOquery时出现这个错误,用这个就可以了。
 
Dataset no in edit or insert mode不是告诉你
AdoDataSet1.Edit or AdoDataSet1.Insert
 
你现在做的两个查询集,数据集的状态是BROW,此时,数据是无法进行写处理的。
处理的方法,就是在写数据前,让其处于可写状态。
更改为EDIT,插入为INSTERT,追加为APPEND。
就象这个样子AdoDataSet1.Edit;
这个是最基本的数据库编程常识。
 
加一句
if AdoDataSet1.State=dsEdit then
AdoDataSet1.Post;
 
在对数据库字段进行取值时,必须先使数据进入可编辑状态
前面加上:
AdoDataSet1.Edit;

AdoDataSet1.Append;
 
如果想对一个表进行写入的操作,必须使表处在edit 或 insert 状态
可以这样写
adodataset1.insert;
or
adodataset1.edit;
 
得先让数据集处于Edit编辑状态才能进行编辑操作
 
我的数据集是下面这种情况:
adodataseg1.commandtext:='select a,sum(b)as tmpa,sum(c) as tmpb from tab1 order by a';
上面所说的方法我早就试过了,我想修改 a 列的数据,不管用什么方法还是会出错。
在修改的时候不会出错,可一旦提交这条数据或记录滚动时(滚动时也会提交数据)马上就会出错。
是什么原因导至提交的时候会出错?
 
解决这个问题的好办法:
DataSource1.AutoEdit := true;
 
用QUERY时有这样的限制:就是在SQL中不能包含聚集函数,你现在的SQL中有SUM函数,所以
它不让你修改。但我不知道ADO有没有这个限制。。。
你现在的问题,可以这样试试:把所有字段加入adodataseg1中,选择tab1 的关键字,并
使TField.ProviderFlags中有pfinKey这个值。(也就是说,字段的关键字与TAB1的关键
字一样)。然后,用下面的代码,保证ADO更新时只使用关键字作条件。
其中pty.Value的值是从0到3 .具体的你查询一下ADO的帮助吧。
(可以在BeforePost之前设置)
procedure TdmPcAppSvr.setAdoWhereKeyOnly(ADODataSet:TADODataSet);
var
rs_ : _RecordSet;
pty : Property_;
pties : Properties;
begin
rs_ := ADODataSet.Recordset;
pties := rs_.Properties;
pty := pties.Get_Item('Update Criteria');
pty.Value:=0;
end;
 
接受答案了.
 
顶部