Получение ошибок ADO с использованием Delphi - PullRequest
5 голосов
/ 22 сентября 2009

Я использую Delphi 2007 с ADO для доступа к базе данных SQL Server 2008.

Хранимая процедура в базе данных предварительно проверяет входные данные и, если проверка не проходит, возвращает набор результатов ошибок (содержащий пользовательскую информацию об ошибках). Используя SQL Server Management Studio, при запуске хранимой процедуры я получаю настраиваемый результат ошибки на одной вкладке и собственное сообщение об ошибке на другой.

В моем приложении Delphi, когда я открываю хранимую процедуру, я могу получить доступ к пользовательскому набору результатов ошибок. Однако объект Errors в соединении ADO не содержит собственной ошибки.

Как получить доступ к объекту коллекции Errors, чтобы я мог предоставить больше информации о причине ошибки?

Спасибо

1 Ответ

4 голосов
/ 22 сентября 2009

Вариант 1) использование коллекции ошибок подключения ADO.

try
....
....
....
 ADOQuery1.Open;//Execute your sql statement
except
  LastErrorIndex  :=ADOConnection1.Errors.Count-1;
  SourceError     :=ADOConnection1.Errors.Item[LastErrorIndex].Source;
  NumberError     :=ADOConnection1.Errors.Item[LastErrorIndex].Number;
  DescriptionError:=ADOConnection1.Errors.Item[LastErrorIndex].Description;
  SQLStateError   :=ADOConnection1.Errors.Item[LastErrorIndex].SQLState;
  NativeError     :=ADOConnection1.Errors.Item[LastErrorIndex].NativeError;
end;

Вариант 2) Вы можете использовать переменную @@ error, чтобы получить последнюю ошибку с сервера sql.

select @@error

При возникновении ошибки на Sql Server вы можете получить только номер ошибки, используя глобальную переменную @@ ERROR. Не существует глобальной переменной @@ ERROR_MESSAGE для получения описания ошибки. Чтобы получить полное сообщение об ошибке, вы можете запросить таблицу master..sysmessages, используя номер ошибки:

SELECT Description FROM master..sysmessages  WHERE error= @@ERROR AND msglangid=1033

но большинство этих сообщений имеют заполнители (например,% s,% ld), вы также можете использовать эту хранимую процедуру .

Вы можете прочитать эту статью Обработка ошибок в SQL Server - фон для получения дополнительной информации.

Bye.

...