碰到过这样的事情,可把我害惨了,足足查了一周才知道是由这一个话引起的.有没有高人来说一说这是为什么?
以下是部份代码: with mainform.rmadoquery do
           begin
              close;
              parameters.ParamByName('devicecodestr').value:=device[deviceindex].deviceid;
              parameters.parambyname('devicenamestr').value:=device[deviceindex].devicename;
              parameters.ParamByName('cardidstr').value:=inttostr(cardid);
              parameters.ParamByName('datestr').value:=eventtime;
              parameters.ParamByName('eventidstr').value:=eventno;
              parameters.parambyname('eventscontentstr').value:=eventname;
              parameters.ParamByName('ionumberstr').value:=ionumber;
              parameters.parambyname('alarmlevelstr').value:=alarmlevel;
              parameters.parambyname('statestr').value:=devicestate;
              //prepared;
             try
                execsql;
                invalid:=true;
             except
                invalid:=False;
                RMErrorCode:=3;
                Break;
             end;
           end;

解决方案 »

  1.   

    if not ADOQuery1.Prepared then
      ADOQuery1.Prepared := True;
      

  2.   

    If the provider does not support command preparation, it may return an error when this property is set to True. If the provider does not return an error, it simply ignores the request to prepare the command and sets the Prepared property to False.看下你用什么数据库引擎了,
      

  3.   

    数据库:MS SQLSERVER 2000
    OS:WINXP/WIN2000ADO VERSION: ADO 2.7/ADO 2.8不过这样的情况极少出现,当真是搞得头痛的很.现有就是ADO 2.7 与ADO 2.8还有很多地方是不兼容的,这个问题也让人头疼.原来有的系统用ADO 2.8开发的,但人家的机器是AD0 2.7的,好好的软件,一安装,运行,报AV错,那么大个红X弹出来,真是难过.哎......
      

  4.   

    ADO+MSSQL中不是不需要这一句的.
    Break一句也属多余.如果触发异常后面已经不会再执行了.
      

  5.   

    ado确实有版本的问题,delphi有好多adosp.
    Prepared 尽量不使用,感觉没有多大作用.