通常的用法
ADOQuery1.sql.text:='select *  from temp ';
ADOQuery1.open;
ADOQuery1.close;
没有问题然而下面的用法就怪怪的
ADOQuery1.LockType := ltBatchOptimistic;
ADOQuery1.sql.text:='select *  from temp where 1=2';
ADOQuery1.LoadFromFile('f.txt');
ADOQuery1.close;ADOQuery1.LockType := ltOptimistic;
ADOQuery1.sql.text:='select *  from temp ';
ADOQuery1.open;   *****  此句出错 提示:'文件 select *  from temp'找不到

解决方案 »

  1.   

    adoquery的loadfromfile后会断开和数据库的链它的默认commandtype会变为cmdFile,这时你应采用下列方法
       adoquery1.close
       Tadodataset(adoquery1).commandtype:=cmdtext;
       adoquery1.sql.text:='select ......
       adoquery1.open;
      

  2.   

    lZ正解,看LoadFromFile的源码:
    procedure TCustomADODataSet.LoadFromFile(const FileName: WideString);
    begin
      Close;
      CommandType := cmdFile;
      LockType := ltBatchOptimistic;
      CommandText := FileName;
      Open;
    end;CommandType会变成cmdFile;
    LockType变成ltBatchOptimistic;所以要换会正常模式,要重新更改这2个设置
    LZ前面ADOQuery1.LockType := ltBatchOptimistic;这句都可以不用