DBGrid1--DataSource1--ADODataSet1--通过adoConnect组件联到一个普通的表
设置DBGrid1.Options可选择多行(dgMultiRows、dgEditing....)程序运行时可以手动对DBGrid1中的字段值进行修改,并自动更新到数据表中
但是当选择了多行后,在程序中进行如下操作
就会在//@处报错:'DataSet not in Edit or Insert mode'那么:1、为什么这句没起作用 DBGrid1.DataSource.DataSet.Edit ; 2、有什么方法可在DBGrid1中选择了多行后,对其中的字段修改后更新到表中?或者是由于有Book的原因不能这样做?if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
begin
Edit ; for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBook(pointer(DBGrid1.SelectedRows.Itemsi]));
//***方法一:
DBGrid1.Fields[2].Value := DBGrid1.Fields[2].AsInteger + 2; //@
//***方法二:
temp := FieldByName('myField').AsInteger;
FieldByName('myField').AsInteger := temp + 2; //@
end;//for
end;//withDBGrid1.DataSource.DataSet.Post;
设置DBGrid1.Options可选择多行(dgMultiRows、dgEditing....)程序运行时可以手动对DBGrid1中的字段值进行修改,并自动更新到数据表中
但是当选择了多行后,在程序中进行如下操作
就会在//@处报错:'DataSet not in Edit or Insert mode'那么:1、为什么这句没起作用 DBGrid1.DataSource.DataSet.Edit ; 2、有什么方法可在DBGrid1中选择了多行后,对其中的字段修改后更新到表中?或者是由于有Book的原因不能这样做?if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
begin
Edit ; for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBook(pointer(DBGrid1.SelectedRows.Itemsi]));
//***方法一:
DBGrid1.Fields[2].Value := DBGrid1.Fields[2].AsInteger + 2; //@
//***方法二:
temp := FieldByName('myField').AsInteger;
FieldByName('myField').AsInteger := temp + 2; //@
end;//for
end;//withDBGrid1.DataSource.DataSet.Post;
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBook(pointer(DBGrid1.SelectedRows.Itemsi]));
DBGrid1.DataSource.DataSet.Edit;//这句是必需的
//***方法一:
DBGrid1.Fields[2].Value := DBGrid1.Fields[2].AsInteger + 2; //@