Скорее вопрос не по самой функции ПолучитьОписаниеОшибки(), а как получить текстовку сообщения об ошибке, полученной внутри хранимой процедуры, вызываемой с помощью 1с++.ODBCRecordSet.
В БД есть некоторая таблица MyTable с полем text_param: varchar(100) not null.
Если я выполняю следующее:
sSQL = "insert into MyTable(text_param) vlaues(null)";
Попытка
RS.ВыполнитьСкалярный(sSQL);
Исключение
КонецПопытки
сОшибка = RS.ПолучитьОписаниеОшибки();
то естесственно в cОшибка храниться что-то типа такого:
"State 23000, native 515, message [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot insert the value NULL into column 'text_param', table 'AMS.dbo.MyTable'; column does not allow nulls. INSERT fails.",
т.е. я вижу, что не выолнен insert в таблицу MyTable в поле text_param.
То же самое вижу в сОшибка даже если оператор insert офромлен в виде такой функции:
CREATE PROCEDURE testproc(
@text_param varchar(100)
)
AS
BEGIN
insert into TestTable(test) values (@text_param)
END,
а sSQL = "exec testproc null"
НО, если я добавлю в хранимую процедуру оператор возврата, например:
CREATE PROCEDURE testproc(
@text_param varchar(100)
)
AS
BEGIN
insert into TestTable(test) values (@text_param)
return 1;
END,
или объявлю еще один дополнительный параметр функции как output,
то сОшибка возвращает уже другую ошибку: "State HY007, native 0, message [Microsoft][ODBC SQL Server Driver]Associated statement is not prepared".
Как мне узнать, что реально в процедуре произошла ошибка вставки записи, т.е. то сообщение, которое генерит сервер для оператора insert?
Дело в том, что в реальной процедуре куча операторов модификации данных, и как мне узнать, где именно ошибка непонятно. Независимо от того где она происходит я получаю одно и то же сообщение об ошибке "Associated statement is not prepared".
Подскажите куда копать.