我用以下方法选中DATAGRID中的一行,然后对选中行的数据进行修改,语句如下,
if dbgrid1.SelectedRows.CurrentRowSelected then
   begin
   dbgrid1.datasource:=datamodule9.datasource1;
   datamodule9.adoquery1.close;
   datamodule9.adoquery1.SQL.Add('update gz_data set item02=convert(money,'''+dbedit1.text+''',2),item07=convert(money,'''+dbedit3.text+''',2),item08=convert(money,'''+dbedit2.text+''',2),item13=convert(money,'''+dbedit4.text+''',2) where bmdm='''+form2.bm1+'''and mon='''+month+'''');
   datamodule9.adoquery1.ExecSQL;
可以当我点保存后再打开窗口,数据没有被修改!可当我选中一行修改完,然后选另一行,再保存时,数据又被修改了!请问是不是在选择一行的语句有问题,或者是少了什么语句?

解决方案 »

  1.   

    你可以在ExecSQL之后刷新列表啊,比如:
    datamodule9.adoquery1.Close;
    datamodule9.adoquery1.SQL.Clear;
    datamodule9.adoquery1.SQL.Add('select * from gz_data');
    datamodule9.adoquery1.Open;
    记录集被更新之后,表格也就相应被更新了。
      

  2.   

    用这个不是刷新了吗!datamodule9.adoquery1.ExecSQL;
      

  3.   

    我想你的DATAGRID的DATASOURCE不是ADOQUERY1,如果是话,应该显示空,或出错了,
    如果你又用了一个ADOTABLE1做datagrid的datasource的话,这样刷新adoauery1是没有用的,得刷新adotable1了,所以我们编程最好不要用这些绑定控件的。还有的时候会遇到锁定机制的原因的。这我也是不太明白,多看看ado吧,
      

  4.   

    datamodule9.adoquery1.ExecSQL;并不刷新数据,它只是返回一个索引值,是一个Integer量,如果要完成查询的同时刷新可以用datamodule9.adoquery1.open;
      

  5.   

    我发现是if dbgrid1.SelectedRows.CurrentRowSelected then的问题,请问我怎么样才能间断是对选中的当行进行操作呢?帮帮忙吧,我急死了!