ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: это устаревший код, и я просто не могу все переписать (поверьте мне, я бы хотел).
Я пытаюсь запустить устаревшее приложение Delphi, которое использует BDE и DB2, но я просто не могу выполнять параметризованные запросы.
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".