我用的是D7,现在一直在用ADO写数据库程序。只是ADO有那个恼人的“不能为更新定位行”的问题,所以想换一个好一点的数据库组件。
所以请大家推荐一下。谢谢

解决方案 »

  1.   

    你操作的数据表有触发器吧 使用的数据库是sql2000吧
    这个问题和数据组件没有关系
    可以打sql2000的sp4补丁
      

  2.   

    试试TBetterADODataSet,ADODataSet在执行触发器时会出现这个小bug!
      

  3.   

    不好意思,我忘了说了,是MySQL。
    我经过很多次调试发现,只要是数据库内的内容和要更新的内容一致,在POST时就会出现这个错误。
    我用ADOQuery的原生对象Recordset的update更新数据时也是这个问题。以前用Access时,我记得也是这样的。我每次更新前都仔细判断数据库里的内容和要更新进去的内容是否一致。
    但总有忘记的时候,现在实在烦了这种重复性劳动。所以想换一种控件了。
      

  4.   

     这是肯定的。如果在提交前,数据库已经与当前数据集不一样了,一定会出现的。
     通常要刷新下:  adoquery.reQuery. 来处理下。
      

  5.   


    多数情况是因为你在多处修改同一记录集再有就是没有设置主键第三就是有的字段设置了默认值,在append,post时就会出这个错误,特别是一些数字型,和浮点型字段,我遇到过这个问题
      

  6.   

    我的代码应该没问题。我单独写这样一句测试代码也会出现不能为更新定位行的问题。CnName字段原来是test的内容。再运行这句就出错了。
    ADOQuery1.Recordset.Update('CnName', VarArrayOf(['test']));
    不是不一样,而是一样的情况下出现了那个错误……
    而且我这个程序很特殊,需要像Excel那样移动着文本框来修改。不方便用Requery
    绝对没有在多处修改。
    ---------
    ID INTEGER PRIMARY KEY AUTO_INCREMENT
    这样创建的算主键吗?
    ---------
    是所有字段都设置了默认值,但除了空字符串('')就是0。这样会出问题吗?
      

  7.   

    如果非说我的代码有问题,那就是把数据“test”试图更新到已是该值的字段中。
    但表的字段众多。一个个字段检查与要更新的数据是否一样。是很累的谢谢推荐请大家再推荐几个备用。
      

  8.   

    连接MySQL,首选用MyDAC了,如果你的控件不是做成DLL形式的话,一般不会出问题。MyDAC是不需要其它MySQL带的DLL支持的
      

  9.   

    担心以后可能会变更数据库,所以用了MyDAC的姊妹版UniDAC
    谢谢所有朋友的回复