免责声明:这是遗留代码,我根本无法重写所有内容(相信我,我愿意)。
我正在尝试执行一个使用 BDE 和 DB2 的旧版 Delphi 应用程序,但我根本无法运行参数化查询。
QueryA.SQL.Text := 'select count (*) from syscat.tables where tabname = ''Foo''';
QueryA.Open; // works as expected
QueryB.SQL.Text := 'select count (*) from syscat.tables where tabname = :name';
QueryB.ParamByName('name').ParamType := ptInput;
QueryB.ParamByName('name').DataType := ftString;
QueryB.ParamByName('name').AsString := 'Foo';
QueryB.Open; // Error: "Operation not applicable"
QueryC.SQL.Text := 'select count (*) from syscat.tables where tabname = :name';
QueryC.ParamByName('name').ParamType := ptInput;
QueryC.ParamByName('name').DataType := ftString;
QueryC.ParamByName('name').Clear;
QueryC.Open; // Surprisingly, no erros here
现在... 为什么 QueryB 示例不起作用?我已经尝试了我能想象到的任何事情:使用Value
而不是AsString
,调用Prepare
和UnPrepare
,但似乎没有任何效果。有任何想法吗?
重要提示:我直接通过 BDE 连接,而不是使用 BDE -> ODBC -> DB2 方法。
编辑:环境信息:
Delphi Version: 5, UpdatePack 1
BDE: 5.01
OS: Windows 7 SP1, x64
D:\SQLLIB\BIN>db2level
DB21085I Instance "DB2" uses "32" bits and DB2 code release "SQL09052" with
level identifier "03030107".
Informational tokens are "DB2 v9.5.201.346", "s080911", "WR21421", and Fix Pack "2a".
Product is installed at "D:\SQLLIB" with DB2 Copy Name "DB2COPY1".