Здравствуйте!
Давно существует проблема с ошибками BDE, решение которой найти не могу.
Суть ее в следующем!
Используется связка Delphi 2007 – BDE – MSSQL
В клиенте удаляется запись, на которую есть ссылка из других таблиц. Получаем ошибку нарушения ссылочной целостности:
The DELETE statement conflicted with the REFERENCE constraint "FK_Test2_Test3". The conflict occurred in database "Test", table "dbo.Test2", column 'Id'.
Это выдает сам MSSQL. А вот обработка ошибки в клиенте приводит к тому, что на выходе получается текст ошибки:
Master record missing.
The DELETE statement conflicted with the REFERENCE constraint "FK_Test2_Test3". The conflict occurred in database "Test",
General SQL error.
table � G
Разложение ошибки в коде типа:
if e is EDBEngineError then begin
for i := 0 to EDBEngineError(e).ErrorCount-1 do begin
Memo1.Lines.Add(IntToStr(EDBEngineError(e).Errors[i].ErrorCode) + ' - ' + EDBEngineError(e).Errors[i].Message);
Memo1.Lines.Add('');
end;
end;
Возвращает следующие строки:
9733 - Master record missing.
13059 - The DELETE statement conflicted with the REFERENCE constraint "FK_Test2_Test3". The conflict occurred in database "Test",
13059 - table � G
Т.е. видно, что оригинальное сообщение об ошибке просто обрезается. Более того. Видно, что третья строка ошибки просто искажается другой информацией, т.к. после слова table появляется псевдографика и посторонние символы, которые при каждом запуске программы будут разные.
Существует ли способ побороть проблему обрезания текста ошибки? Очень не удобно, когда скажем длинные сообщения, возвращаемые MSSQL режутся до 120-130 символов.
Для верности проверил работу ADO. Там все работает как часы. Текст ошибки возвращается полный. Все корректно.
Спасибо!
P.S. Меньше всего я бы хотел здесь увидеть совет переходить на ADO. Приложение большое, написано давно, работает отлично и переписываться не будет. Просто хочется решить проблему с текстами ошибок. Перехват ошибок по коду и замена их на тексты на понятном языке не решает проблему, т.к. хочется в т.ч. видеть и техническую информацию.