我的数据库是MySQL5.0,ODBC用的是MySQLODBC 3.51。
可是在开发时发现一个问题,如果ADOQuery在取数据和Post之间正好有人修改
了服务器上的同一条数据,那么Post就会出现“无法为更新定位行,一些值可
能已在最后一次读取后被修改”,我查了一下,在SQLServer下,可以将ADOQuery
的CursorLocation设置成clUseServer,就可以解决这个问题,但MySQL设置时
报错“Database does not suport book"之类的错,反正就是不支持
clUseServer。
之后我换了ODBC的版本,换成了MySQLODBC 5.0,还是不行。请问如何解决这个问题
1、请不要告诉我,在Post之前Refresh,这样用户的输入不是丢失了吗
2、请不要告诉我,自己拼Update的SQL语句来更新数据库,这样太麻烦而且表很多
3、请不要告诉我,用事务捕捉Exception并回滚,因为用户没有输入错误,这些
数据是要报存的,我只用把最新的东西存进去就可以了我想问各位有什么解决方法,或者各位的MySQL是否支持clUseServer?

解决方案 »

  1.   

    hongqi162(失踪的月亮) ( ) 信誉:105    Blog   加为好友  2007-6-14 8:48:44  得分: 0  
       
    用第二条解决问题吧,麻烦就麻烦点吧,解决问题才是王道
    ==========================================
    但是这样工作量很大啊,而且不易于维护,以后增加字段还得改SQL,如果用ADOQuery.Post
    则只要拖数据绑定控件就可以了  
     
      

  2.   

    HsWong() ( ) 信誉:100    Blog   加为好友  2007-6-14 8:48:47  得分: 0  
     
    设相关的主键行不?
    ===================
    不是主键问题,我的表有主键(而且不是自增长的),各字段都没有默认值  
     
      

  3.   

    // Error on MySQL database: Dataset does not support books
    When you create the connection to MySQL database, click the Connection Info tab in the Database Manager and uncheck Show top 10 items only option. After that this error will not show anymore.ref:
    http://www.glocksoft.net/helpdesk/faq.php?do=article&articleid=79
      

  4.   

    你是三层的吗,在ADO控件的字段属性中把你的主键的pfinkey属性设为true,
    这样在应用更新的时候控件不会去检索所有字段匹配的记录,而是只检索设为pfinkey字段的记录,这样只要pfinkey的字段没有被他人修改,就不会有出错提示.
      

  5.   

    也能提高效力,因为默认情况下应用更新时,判断记录是否存在:select * from table where field1=? and field2=? and .....
    设置pfinkey时,select * from table where field(pfinkey=true)=?