我在一个FORM上放了一个ADODATASET,DATASOURCE,和ADOQUERY,ADOCONNECTION,
当我用ADOQuery1先对表T1查找后,用了ADOQuery1.open,再用ADOQUERY1进行增加记录的时候(用了ADOQuery1.Execsql)就会报错。经过检查发现是同一个ADOQUERY组件用了OPEN方法后再用EXECSQL 方法后出现的这个情况,不知道有什么办法可以解决这个问题?
源代码如下:
 ADOQuery1.Close;
 ADOQuery1.sql.clear;
 ADOQuery1.sql.add('select * from T1');
 ADOQuery1.open;
 ``````
 `````
 ``````
 `````````
 ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADoQUEry1.sql.ADD('Insert Into T1 Valuse (:a1,:a2)');
 ADOQuery1.parameters.paramByName('a1').value:=Edit1.Text;
 ADOQuery1.parameters.paramByName('a2').value:=Edit2.Text;
 ADOQuery1.ExecSql;
 ~~~
```````````
```````

解决方案 »

  1.   

    ADoQUEry1.sql.ADD('Insert Into T1 Valuse (:a1,:a2)');
     ADoQUEry1.sql.ADD('Insert Into T1 Values (:a1,:a2)');
      

  2.   

    用fieldbynaem():='aaa'
    edit,post;
      

  3.   

    try
     ADOQuery1.open 
    except
     ADOQuery1.execSql
    end
      

  4.   

    sql语句应该没有问题
    检查你的T1表里面的字段数量和字段类型
      

  5.   

    ADoQUEry1.sql.ADD('Insert Into T1 Valuse (:a1,:a2)');中的Valuse改为:Values
      

  6.   

    同意用 eboywy(飞影) 的方法试一下
      

  7.   

    我知道用飞影的办法可以,但是遇到了这样的问题,我想弄明白是怎么会事,我按Step by Step的方法发现当执行到EXECsql的时候就会报错。
    错误代码为(access violation at address 1F453E6E in module 'msado15.dll',Write Of
    address 0108A00C)
    如果我再定义一个ADOQuery2与ADOQuery1分开来,一个只负责查询(用open方法),一个负责添加(用ExecSql方法),就不会报错.
      

  8.   

    呵呵,,,楼主无聊了把它改成这样试试:
     ADOQuery1.Connection.Close;
     ADOQuery1.SQL.Clear;
     ADOQuery1.parameters.clear;
     ADoQUEry1.sql.ADD('Insert Into T1 Valuse (:a1,:a2)');
     ADOQuery1.parameters.paramByName('a1').value:=Edit1.Text;
     ADOQuery1.parameters.paramByName('a2').value:=Edit2.Text;
     ADOQuery1.ExecSql;
      

  9.   

    非常感谢水连天,现在问题已经解决了,不过我想再问一下,如果没有用到TADOConnection组件直接用TADOQuery的Connectionstring,又该怎么做,才能彻底的关闭TADOQuery???
      

  10.   

    TO:楼主不要误会,偶只是觉得只要用两个ADOQuery分别执行两个任务就OK了的;
        
    第二个问题:
        到目前为止,我只能发现只有TADOQuery.Free以后才能完全断开这个连接;