Обзор:
Я написал приложение, которое позволяет пользователю определять запрос, отправлять его на сервер и просматривать результаты. Программное обеспечение может работать на DB2 или MySQL.
Проблема:
У нас были проблемы в версии DB2, когда пользователь пытался выполнить запрос и обнаружил, что он не выполнен, поскольку его профиль пользователя отключен. Для выполнения запроса в DB2 (в IBM i) в строке подключения указываются имя и пароль профиля пользователя. Безопасность на сервере может указывать, что профиль пользователя отключается после двух или трех неверных входов.
Вопрос:
Я отладил приложение и обнаружил, что проблема заключается в том, что запрос был отправлен дважды. Если пароль пользователя неправильный, то, конечно, это приводит к отключению его профиля.
При дальнейшей проверке, когда я проверял журналы на сервере (при отладке построчно), я обнаружил, что запрос передается на сервер, когда вы вызываете TADOQuery.sql.add (), и снова когда активная собственность TADOQuery установлена в true (это точка, в которой я ожидаю, что запрос будет отправлен на сервер). Вот пример кода, который я использую для выполнения запроса:
adoqry.active := false;
adoqry.sql.clear;
adoqry.sql.add('SELECT * FROM SOMEDB.SOMETABLE');
adoqry.active := true;
Поэтому мой вопрос довольно прост:
1. Почему метод TADOQuery.sql.add () отправляет запрос (когда ему просто нужно добавить sql в свойство sql TADOQuery)?
2. Что я могу сделать, чтобы предотвратить это? есть ли способ предотвратить отправку sql при вызове метода add ()?
Для тех из вас, кому нужна дополнительная информация о журналах, журналы точки выхода на IBM i показывают, что когда я вызываю adoqry.sql.add в приведенном выше примере, запрос запускается через «Database Server-SQL». Запрашивает «приложение точки выхода» через функцию «Подготовить и описать». Когда я вызываю adoqry.active: = true в приведенном выше примере, тот же запрос проходит через то же приложение точки выхода, но через функцию «Открыть / Описать».
Если вы не знакомы с IBM i, не беспокойтесь об этом - я просто включаю эту информацию в качестве доказательства того, что я проследил, что запрос был отправлен дважды. Настоящая проблема связана с обработкой sql.add () в TADOQuery.