使用DELPHI6的TADOQUERY执行如下ACCESS T-SQL语句时会出错:
...
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'INSERT INTO TABLE1 (FIELD1,FIELD2) SELECT (A.FIELD1,A.FIELD2) FROM [;DATABASE=C:/T.MDB;PWD=1;].TABLE1 AS A WHERE A.ID=111';
ADOQUERY1.EXECSQL;
...
执行以上语句时,会报参数不正确的错误。但是我使用此SQL语句在DMB数据库文件中的查询里执行完全OK。
难道是ADO驱动不支持此语句,但是为什么其它的如ALTER TABLE,DELETE FROM TABLE可以执行呢?于是根据所提示的错误(参数不正确)来进行查找,在ADOQUERY的属性列表中有个属性PARAMCHECK默认为TRUE,难道是它在作怪,于是在代码中加入了ADOQuery1.ParamCheck := False语句,在调试运行之,成功!!!
总结:可能是以上的SQL语句包括"[]"的原因吧,使ADOQUERY组件认为其是个参数,需要程序员赋值的原因,导致执行SQL语句前检查SQL参数时报错!!!
可能我总结的出错原因不对,如果读者你知道正确答案,请告诉我。谢谢~