目前的数据显示路线为:DBGrid->DataSource->ClientDataSet->DataSetProvider->AdoQuery,采用SqlServer数据库,显示的数据为一个多级分类汇总结果。
当前的问题是我需要对分类汇总结果进行一定的处理,可是发现无法修改ClientDataSet的内容(更让我纳闷的是可以删除整条记录)
如果修改当前记录的某个字段时,提示“can't be modified”的错误
附:修改代码举例
self.ClientDataSet1.First;
self.ClientDataSet1.Edit;
self.ClientDataSet1.Fields[0].AsString:='00000';
这个问题很菜,但是还是希望高手指点,因为我能查的资料都查了(包括葵花宝典),郁闷ing
当前的问题是我需要对分类汇总结果进行一定的处理,可是发现无法修改ClientDataSet的内容(更让我纳闷的是可以删除整条记录)
如果修改当前记录的某个字段时,提示“can't be modified”的错误
附:修改代码举例
self.ClientDataSet1.First;
self.ClientDataSet1.Edit;
self.ClientDataSet1.Fields[0].AsString:='00000';
这个问题很菜,但是还是希望高手指点,因为我能查的资料都查了(包括葵花宝典),郁闷ing
star_of_light(星星之光)和chenquan(嘉威王子):DataSetProvider的属性设置没有问题。
boynicky(鱼干儿):使用临时表是我一贯的做法,不过这次特殊需求不允许 :(我觉得好像不只是汇总的原因,因为我后来用AdoTable做了一下,也是同样的错误。
有没有其他更好的思路?要不然只能偷着用临时表了
ClientDataSet2.Data := ClientDataSet1.Data;
ClientDataSet1.Close;
就可以对ClientDataSet2进行数据操作了。
是不是本质上就是只读的?如果真是这样的话,我觉得TClientDataSet类的意义好像不是很大。
是不是写反了,我觉得应是:DBGrid<-DataSource<-ClientDataSet<-DataSetProvider<-AdoQuery
你在修改完以后是不是applyupdate了,applyupdate是要将数据写回数据库,如果你只是要临时修改一个而不必回写到数据库的话用POST就可以了,CLIENTDATESET中的POST只是保存修改而不写入数据库,APPLYUPDATE则是写入数据库。但是上次我在使用ADO控件时如果在SQLSERVER中写有触发器则ADO会报错,现在还不清楚为何.