响 应中....你不要EXECSQL直接OPEN好了,

解决方案 »

  1.   

    你要知道一定要先关闭在打开
    一半要
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add();
    adoquery1.open; 或 adoquery1.execsql
      

  2.   

    直接open是对应返回有cursor的
    如果返回的不对应任何cursor,就用execute
      

  3.   

    用INSERTH和DELETE等语句一定要EXECSQL的
      

  4.   

    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add();
    adoquery1.active := true; 就ok了,
      

  5.   

    adoquery1.active := false; 
    adoquery1.sql.clear;
    adoquery1.sql.add();
    adoquery1.active := true; 就ok了,
      

  6.   


    ExecSQL 与 Open 的区别:
    1、ExecSQL 用于不需返回结果集!如:Insert、Delete等语句;
    2、反之,Open则需返回结果集用!如:Select语句!
    -------------------------------------------------------乖~~别悲伤了 ~~ 嘻嘻 ^o^
      

  7.   

    是呀,但问题就在这,EXECSQL执行后DATASET还是CLOSE的
      

  8.   

    那就不是EXECSQL或Open的问题了。
    query1.close;
    query1.sql.clear;
    query1.sql.add()
    query1.execsql;
    的格式我用过。
    看看你其他控件的属性有没有问题
      

  9.   

    好;
    close;
    sql.clear;
    sql.Add('delete from xx where xxmc=:xxmc and njbh=:nj');
    prepare;
    parambyname('xxmc').asstring:=combobox1.text;
    parambyname('nj').asstring:=combobox2.text;
    execsql;
    open;//假如没有这句下面的语句不能执行,原因:DATASET CLOSE;
           假如有这句运行出错,句柄问题
    locate('xxmc;njmc',vararrayof([combobox1.text,combobox2.text]),[loCaseInsensitive]);
      

  10.   

    改为
    execsql;
    close;
    open;
    试试
      

  11.   

    改为
    execsql;
    close;
    open;
    试试
      

  12.   

    locate('xxmc;njmc',vararrayof([combobox1.text,combobox2.text]),[loCaseInsensitive]);
    是干什么用的?
    能说说吗?
      

  13.   

    在open前,应该重新获得数据集,应加上
    ....
    close;
    sql.clear;
    sql.Add('select field1,field2 from table ');//括号中加的应是你执行删除前的sql语句,这里只是随便加的语句
    open;
    .....
      

  14.   

    locate是定位单条还是可定位多条?
    如果多条,是否可一条条的读取
    不是还有filter吗/
    有什么区别?
      

  15.   

    LOCATE 定位一条
    FILTER应该是列表吧
      

  16.   

    在open前,应该重新获得数据集,应加上
    ....
    close;
    sql.clear;
    sql.Add('select field1,field2 from table ');//括号中加的应是你执行删除前的sql语句,这里只是随便加的语句
    open;
    .....
    或则用另一个Query
    with Query do
    begin
    close;
    sql.clear;
    sql.Add('delete from xx where xxmc=:xxmc and njbh=:nj');
    prepare;
    parambyname('xxmc').asstring:=combobox1.text;
    parambyname('nj').asstring:=combobox2.text;
    execsql;
    end;
      

  17.   

    delete 语句不返回结果集,不能用open,紧接着的locate就更没有意义了。
    delete后clear原query里的语句或另用一个query作select选择xx表里的数据后再用locate定位。
      

  18.   

    close;
    sql.clear;
    sql.Add('delete from xx where xxmc=:xxmc and njbh=:nj');
    prepare;
    parambyname('xxmc').asstring:=combobox1.text;
    parambyname('nj').asstring:=combobox2.text;
    execsql;
    open;//假如没有这句下面的语句不能执行,原因:DATASET CLOSE;
           假如有这句运行出错,句柄问题
    locate('xxmc;njmc',vararrayof([combobox1.text,combobox2.text]),[loCaseInsensitive]);
    加引号啊。
    parambyname('xxmc').asstring:=#39+combobox1.text+#39;
    parambyname('nj').asstring:=#39+combobox2.text+#39;