怎么知道TADOQuery的返回值类型?
我的前提是TADOQuery.SQL中的执行语句是不确定的。
SQL中是select语句的话,返回值就是一个数据集;而如果SQL中是insert,update或其他语句的话,返回值是什么,应该如何捕捉呢?

解决方案 »

  1.   


    try
      query1.execSQL;
    except
      on e: Exception do 
      begin
        showmessage('出错' + e.message);
        exit;
      end;
    end;
    showmessage('执行成功')
      

  2.   

    insert update用query1.execsql不返回结果
    select 用query1.open返回数据集
      

  3.   

    两位大哥误会我的意思了,我的意思是在使用insert、update、delete这些SQL语句把缓存中的数据更新到物理表中时需要为这些语句设定参数,这些参数包括更新字段的新值和更新哪一条记录。在使用update和delete时需要在where子句后设定键值,但在更新时key的值可能在缓存中已被修改,需要使用key在被修改前的值去在物理表中定位。
    在使用BDE的cachupdate模式时,每个字段都有NewValue,OldValue,CurValue分别代表新值、修改前的值和当前值,在ApplyUpdate时很容易取得这些值。但在ADO中这三个值好象不能使用,尤其在取在缓存中被删除的记录中的字段的OldValue时系统会有Exception产生。
    我的意思是怎样得到这些Oldvalue.
      

  4.   

    只有 看看 VCL 代码了,
    EXECSQL 返回 一个INTEGER 类型的 数值。
      

  5.   

    你可以在前台纪录,在批处理更新。干吗非得利用ado的功能呢?
    你举个具体的例子,我给你出方案。不谢。
      

  6.   

    to huojiehai(海天子): 如果用异常处理那根本达不到我的要求to yesxwl(吴宫幽径): 那至少数据库(如oracle,sql-server)对insert,update,delete等的操作有返回结果吧?
    我见过有软件有“成功更新x条记录”的功能的。to JetJack(喷气引擎): 既然进来了,就指点小弟两句吧!to vchoushen6(vc火神6号): 怎么弄中间表啊?愿听高见!to IUPRG(苍狼) :说的有点眉目了,可否具体点?to ebensy(郝雷) :如果其他方法可以的话,不一定要ado的功能,只要能实现。
    你说的“前台记录,批处理”是否对sql语句进行分析,然后一段一段的执行?
    好象有点难度,请指点!
      

  7.   

    insert,update,delete的返回值是sql内部的事,也只用select 传出来吧
    query1.execsql是一个过程,能有返回值?
      

  8.   

    但是ADOQuery.execsql是函数,有返回值。我看了一下帮助,觉得这个问题已经明朗化了
      

  9.   

    你说得也不错,Execsql不返回数据集,返回的是操作所影响的记录数
      

  10.   

    谢谢peiweiwei(一指残)和yesxwl(吴宫幽径),开始发分了,
    其他参与讨论的大瞎都有分