У меня была возможность попробовать это с компилятором :) Я должен когда-нибудь установить его дома.
Хотя я все еще нахожу ваше использование WITH необычным, похоже, оно работает нормально.
Я видел ошибку, которую вы получаете в нескольких случаях:
- Попытка выполнить более одного запроса
против соединения сразу (из-за многопоточности или таймера + processMessages)
- С TADOStoredProc, когда имя_процесса неверно
- Иногда, если ADO не может разобрать запрос - не может проверить это без вашей схемы БД.
Обратите внимание, что в SQL Server нет необходимости явно определять тип параметра. Они автоматически назначаются событием OnChanged, прикрепленным к объекту SQL TStringList.
В результате лучше либо назначить свойство SQL.Text (как вы это делаете), либо, если используете .Add ('SELECT ...'), использовать пару SQL.BeginUpdate / SQL.EndUpdate.
Оригинальный ответ:
with AQ_Query do
begin
try
AQ_Query := TADOQuery.Create(nil);
ConnectionString := strConnectionString;
Хотя это, кажется, работает, кажется немного странным ссылаться на объект, прежде чем создавать его экземпляр.
AQ_Query должен быть создан перед оператором with:
AQ_Query := TADOQuery.Create(nil);
with AQ_Query do
begin
try
ConnectionString := strConnectionString;
Лучше, но не используйте С - Это напрашивается на неприятности.
Также обратите внимание, что создание объекта должно быть ДО попытки .. окончательно. Как написано, у вас будет предупреждение компилятора. Не игнорируйте их - они помогут вам написать лучший код.