Как заставить TADOConnection генерировать исключение, когда ошибка SQL происходит после возвращенного набора результатов - PullRequest
1 голос
/ 29 марта 2019

TADOConnection не хочет генерировать исключение, когда исключение возникает после того, как был возвращен некоторый набор результатов.Например:

ADOConnection1.Execute('SET NOCOUNT ON; SELECT 0; THROW 50000, ''Custom error'', 1;');

Приведенный выше код не будет выдан, поскольку существует набор результатов, вызванный SELECT 0;

Как заставить TADOConnection генерировать исключение в таком случае?Я не могу избежать возврата набора результатов.Вещи, которые я пробовал:

  • Обработка события OnInfoMessage, но оно никогда не запускается.
  • Проверка свойства TADOConnection.Errors, но там нет ошибок.

Я нашел статью, посвященную этой проблеме, но она касается .NET:

Любопытный случай необнаруженных исключений SQL

1 Ответ

2 голосов
/ 29 марта 2019

Мне удалось показать Custom Error, используя TADOQuery, например:

var
  t : integer;
begin
  ADOQuery1.SQL.Text := 'SET NOCOUNT ON; SELECT 0; THROW 50000, ''Custom error'', 1;';
  ADOQuery1.Open;
  t := 0;
  ADOQuery1.NextRecordset(t); // exception thrown here
end;
...