将Query的UpdateObject连接到UpdateSQL上。双击UpdateSQL,设定相应的SQL语句,就可以了。

解决方案 »

  1.   

    将query的updateobject属性连接到updatesql上,双击或右键单击updatesql,这时,如果已经连接上query,并且query已经有了表或者sql语句,那么,在updatesql中已经有了两排字段名。
    单击select primary keys后,在左侧字段名中选择您的主键,在右侧字段名中选择非主键字段,单击generate sql后,出现三种模式的sql语句,分别查看后单击ok键,好拉,现在一切ok
    拉,开始送分吧??:)
      

  2.   

    对了,忘了告诉你,还一定要将cacheupdate属性设置为true,requestlive属性设置为false!!!
      

  3.   

    requestlive必须是True,cacheupdate无所谓。
      

  4.   

    对chechy说:使用updatesql时可以不用cacheupdate吗?您试过吗?不使用updatesql才使用requestlive吧?请您赐教!
      

  5.   

    updatesql的使用与Cachupdate无关,不信你去看看Delphi在Help目录的关于UpdateSQL的Demo。
    updatesql当然需要requestlive为True了,否则怎么修改数据啊?而且往往是requestlive无法设为True时,加一个UpdateSQL就可以设为True了。
      

  6.   

    我现在在使用中,如果requestlive为true而cacheupdate为false,修改时则报错,大意为没有在cacheupdate模式下。你找个工程试试!!
      

  7.   

    对了,各位大虾:你们好?
    关于上述问题的第一问:
    请问有什么情况下使用query和updatesql。如向上面各位的方案中设置好了以后。
    怎样实现数据的录入、编辑、查询、删除及对数据表的一些操作。谢了。
    qhdsfh(飞翔的鹰)老兄:问题完全解决后。一定给分。我有大把的分。
    望以后大家多看一看关于我的贴子。一起探讨DELPHI中奥秘。
          在此祝大家:事业有成。天天发财!    礼
      

  8.   

    to zy61(张旸) ADO也有此功能,但我不知道在什么情况下才用它。我一般不用它,但我不觉得
    缺少什么样。但据说此功能有很强的功能。
      

  9.   

    To qhdsfh(飞翔的鹰):
    我刚才试过:RequestLive设为False,无论是否有UpdateSQL均不能修改。
    而且只要RequestLive是True,无论CacheUpdate是什么,数据都可以提交。我觉得你的设置可能有问题。
    To dargon949(森林):
    UpdateSQL是在隐式的工作,所以利的代码不用修改。如果CacheUpdate是False,那么Post的时候,Delphi自动调用UpdateSQL中相应的SQL修改数据库。如果CacheUpdate是True的时候,那么ApplyUpdates的时候,Delphi自动调用UpdateSQL中相应的SQL修改数据库。你不需要做任何多余的工作。
    这就是Delphi的强大功能所在。
      

  10.   

    To qhdsfh(飞翔的鹰):
    我刚才试过:RequestLive设为False,无论是否有UpdateSQL均不能修改。
    而且只要RequestLive是True,无论CacheUpdate是什么,数据都可以提交。我觉得你的设置可能有问题。
    To dargon949(森林):
    UpdateSQL是在隐式的工作,所以利的代码不用修改。如果CacheUpdate是False,那么Post的时候,Delphi自动调用UpdateSQL中相应的SQL修改数据库。如果CacheUpdate是True的时候,那么ApplyUpdates的时候,Delphi自动调用UpdateSQL中相应的SQL修改数据库。你不需要做任何多余的工作。
    这就是Delphi的强大功能所在。
      

  11.   

    To qhdsfh(飞翔的鹰):
    我刚才试过:RequestLive设为False,无论是否有UpdateSQL均不能修改。
    而且只要RequestLive是True,无论CacheUpdate是什么,数据都可以提交。我觉得你的设置可能有问题。
    To dargon949(森林):
    UpdateSQL是在隐式的工作,所以利的代码不用修改。如果CacheUpdate是False,那么Post的时候,Delphi自动调用UpdateSQL中相应的SQL修改数据库。如果CacheUpdate是True的时候,那么ApplyUpdates的时候,Delphi自动调用UpdateSQL中相应的SQL修改数据库。你不需要做任何多余的工作。
    这就是Delphi的强大功能所在。
      

  12.   

     to dargon949(森林):
       对数据库的增删改操作,可能我表达不清楚,简单的说,增加就是在置为query.insert后
    将数据从edit框或其他送入字段,fieldbyname('字段名').asstring :=edit.text;
    然后,分别applyupdates、commitupdates就算是完成了!修改和增加差不多,只是置为
    query.edit。删除更简单,只是delete后,applyupdates和commitupdates即可。你试试
    吧。我的方法可能麻烦,但是有效,因为我现在在这样写!
      

  13.   

    to chechy(chechy):
     我知道您是高手,但是在我这里我用您的方法试过后发现,当requestlive为true时,不能修改,当两项同时为true时,可以修改但是报错,错误还是没有在cacheupdates mode下,当requestlive为false时,没有updatesql当然不能修改,但是有updatesql时,只要cacheupdate为true则可以修改!您能帮我想想我的设置错在那里吗?我知道增加和删除方面好象与您的意见没有什么出入,只在修改!
      

  14.   

    我也同意qhdsfh(飞翔的鹰)的观点
    而且requestlive为true对表是独占的,不理想。
    我是把updatesql和事务处理一起使用,从没有设置过requestlive
    不知chechy(chechy)兄是怎样的看法。
      

  15.   

    呵呵,是我的错误。刚才我在SQL语句中加了Group By,就出问题了。看来,我对非CacheUpdate模式研究的太少,另外,对数据库了解还不是非常透彻。
      

  16.   

    to chechy(chechy):   
            我们终于有了答案!我并不是因为我的答案是正确的,而是,我们搞清楚了一个问题!我估计可能是因为您的分组条件导致修改分组,而索引没有改变(在cacheupdatesql模式下),所以出错?您觉得呢?
      

  17.   

    我一直觉得在非CacheUpdate模式下,Post时会自动调用UpdateSQL中的SQL语句,如果是这样,那么我以前的观点就是对的。现在看来我错了,Delphi只有在ApplyUpdates时,才会根据需要调用UpdateSQL中的SQL语句。
      

  18.   

    to chechy(chechy):  
            我认为您的观点并没有错,主要是cacheupdatesql和requestlive是近似作用的,二者
    任选其一,不能同时调用。因为他们的提交方式和模式是完全不同的!
      

  19.   

    谢谢各位的发言,但是如果数据表中没有关键字,就报错误出。
    但我不用UpdateSQL只用Query就不会出错误。原因如何?
    吩回音!!
      

  20.   

    很大可能是你的Where语句没有设置正确。而Query通常是按WhereAll生成SQL的。
      

  21.   

    我来说两句:
    使用TQuery组件实现数据编辑,有两种方法:
    1。将RequestAlive属性True
    这种方法对表进行加锁处理,和Table的使用类似(如果Table的CacheUpdate为False的话)
    2。将CacheUpdate属性设为True,RequestAlive设为False
    这种方法将在本地创建所选记录的本地副本(你可以看到在工作路径或可执行文件的路径下有*.md类似文件创建)在此基础上修改。这种方法最好使用Database.ApplyUpdate([Datasets])进行数据修改的提交。。我现在有一个问题想请高手们帮忙。请看
    http://www.csdn.net/expert/topic/393/393839.shtm