Помогите что ли разобраться(то ли FMTONLY виноват, то ли еще что)

Георгий Давидович
Дата: 03.12.2007 10:15:12
Вообщем проблема в следующем. Идет вызов процедуры через АдоКуайери в Дельфи7.
Структура процедуры следующая


update table ...
exec @rc =  [Другая процедура]
if @@error or @rc <> 0
begin
 raiserror('fuck', 16, 1)
end 

Так вот в [Другая процедура] в одном месте есть вывод для дебага
print 'debit_account = ' + @debit_acount

Но.. Но если в [Другая процедура] возникает ошибка, то в клиентское приложение идет ошибка как раз вот это 'debit_account = ' + @debit_acount при чем вместо @debit_acount в сообщении ошибки подставляется реальное значение. если же вызывать эту процедуру из менеджмента с теми же параметрами, то все нормально и выводится ошибка 'fuck'.
А если закоментировать
--print 'debit_account = ' + @debit_acount
, то выкидывает ошибку Ole error 8040E14.

Вообщем мозг мой вскипел - помогите люди добрые советом.
Tosh
Дата: 03.12.2007 10:20:12
По тем данным, которые ты указал, могу сказать, что у тебя ошибка в твоей хранимке в 12 строке
Георгий Давидович
Дата: 03.12.2007 10:23:45
тогда почему из менеджента, когда запускаю эту процедуру то все нормально и выводится мое сообщение?
Tosh
Дата: 03.12.2007 10:27:06
не только мой опыт работы, но и мировой опыт показыват, что ничто ниоткуда не берется ... если ты игнорируешь ошибку - и не рейзишь ее - значит где-то дальше словиш глюк - ты его словил ... а вот для того, чтобы сказать где именно ошибка слишком мало данных, а телепаты все, увы, в отпусках
Георгий Давидович
Дата: 03.12.2007 11:00:59
нет ошибки у меня. когда я убираю все принты то все нормально. проверил сл образом

CREATE PROCEDURE [dbo].[PROC2]
AS

PRINT 'FUCK'
RAISERROR('A', 16, 1)


CREATE PROCEDURE [dbo].[PROC1]
AS

DECLARE @RC INT
EXEC @RC = [dbo].[PROC1]
IF @@ERROR OR @RC <> 0
RAISERROR('B', 16, 1)


Так вот когда я вызываю эту процедуру из TADOStoredProc то выводится ошибка 'FUCK' а не 'A'. Если закоментировать принт то все нормально.

Ну и что ты теперь скажешь?
Георгий Давидович
Дата: 03.12.2007 11:03:11
сорри забыл отметить. и в PROC1 естественно вызываем PROC2 а не PROC1

CREATE PROCEDURE [dbo].[PROC2]
AS

PRINT 'FUCK'
RAISERROR('A', 16, 1)


CREATE PROCEDURE [dbo].[PROC1]
AS

DECLARE @RC INT
EXEC @RC = [dbo].[PROC2]
IF @@ERROR OR @RC <> 0
RAISERROR('B', 16, 1)
Георгий Давидович
Дата: 03.12.2007 14:12:11
ну что? нет идей почему так происходит?
Noskov
Дата: 03.12.2007 18:31:40
Все правильно. Приходит самое первое сообщение. Остальные либо лежат в ADOConnection.Errors, либо в обработчике OnExecuteComplete надо в цикле пройтись по Recordset.NextRecordset.
Еще можно попробовать поиграться с ExecuteOptions, SET NOCOUNT и SET XACT_ABORT