SQL вызов хранимых процедур через АДО #391081


#0 by YHVVH
Уважаемые гуро 1с, столкнулся с такой ситуацией. ЗапросТекст = "dbo.addOrderStr "{""O"",""0"",""0"",""410"",""0"",""0"",""    980619   ""}","{""B"",""0"",""0"",""33"",""0"",""0"",""     17009   ""}","17028","Амортизатор газовый ГАЗ-3302-3221 (2217 задний) AL-KO ЗМЗ ""Золотая Серия""",4"; Рез = глВыполнитьКомандуSQL(ЗапросТекст);    <--- 1 После выполнения <---- 1 выполняется хранимая процедура икоторая записывает в базу одну запись проверяю запись в таблице SQL , есть одна!!!! Процедура возращает код ошибки 0 или 1 через select 0 Или selec 1 процедура (см. ниже) Далее анализирую статус возращенный и вот прикол, на методе MoveFirst она запускается снова и получается дублирование записи. Вопрос как избежать проблемы? Помогите советом.
#1 by ТелепатБот
#2 by ДенисЧ
не вижу слова declare procedure
#3 by YHVVH
сама процедура отрабатывает без проблем, если запускать строчку в SQL редакторе запись одна появляется.
#4 by YHVVH
убрал декларе чтоб меньше кода было.
#5 by YHVVH
у меня подозрения на методе MoveFirst тобишь этот метод помещает на первый результат и снова вызывает еще раз то что в тексе запроса.
#6 by ДенисЧ
О боги! Феназипаму мне... SQL-код показывай, не экономь место
#7 by YHVVH
ну уговорил нати, код не обсуждать на всякую фигню все еще будет дописываться. GO /****** Объект:  StoredProcedure [dbo].[addOrderStr]    Дата сценария: 02/19/2009 09:28:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO BEGIN    -- SET NOCOUNT ON added to prevent extra result sets from    -- interfering with SELECT statements.    SET NOCOUNT ON; END
#8 by ДенисЧ
Решение простое: объявляй параметр с output и пиши в него значения. А то в твойм случае получается 2 набора записей. Первая - о вызове процедуры, вторая - с результатом.
#9 by YHVVH
не понятно разжавать можно?
#10 by YHVVH
процедура отработала вернула значения в виде таблицы одна строчка 0 или 1 зачем второй раз запускать?
#11 by ДенисЧ
@KOLDOC integer, @Resultat INT OUTPUT ... SET NOCOUNT ON В таком случае всё нормально получается через адо.
#12 by YHVVH
да я понял про что ты, мне не понятно с методом First
#13 by ДенисЧ
Не надо лишния раз звать moveFirst после запроса оно и так там.
#14 by YHVVH
хорошо т.е. другими словами moveFirst еще раз исполняет запрос так?
#15 by ДенисЧ
У меня - не выполняет.
#16 by YHVVH
спасибо
#17 by YHVVH
вообщем сделал не работает все что написал, точней работает но результат такойже
#18 by YHVVH
GO /****** Объект:  StoredProcedure [dbo].[addOrderStr]    Дата сценария: 02/19/2009 09:28:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO            @Result integer output AS BEGIN    -- SET NOCOUNT ON added to prevent extra result sets from    -- interfering with SELECT statements.    SET NOCOUNT ON;     END
#19 by YHVVH
exec dbo.addOrderStr "{""O"",""0"",""0"",""410"",""0"",""0"",""    980619   ""}","{""B"",""0"",""0"",""33"",""0"",""0"",""     17009   ""}","17028","Амортизатор газовый ГАЗ-3302-3221 (2217 задний) AL-KO ЗМЗ ""Золотая Серия""",4,@Resultat  OUT SELECT @Resultat
#20 by YHVVH
дублирование происходит все равно после MoveFirst
#21 by AHgpuXa
т.е. после Рез = глВыполнитьКомандуSQL(ЗапросТекст); Select * from 1JOURNAL_T возвращает одну запись. А при попытке обратиться к первой записи рекордсета Select * from 1JOURNAL_T возвращает уже 2 записи? Парадокс. Триггеров никаких нет?
#22 by YHVVH
Да, тригеров нет
#23 by YHVVH
без MoveForest все хорошо- в таблице одна запись.
#24 by YHVVH
странно но прокатывает один раз.
#25 by AHgpuXa
Если в таблице ключевые пол(е)я  то дублей и подавно быть не может.
#26 by YHVVH
тут видимо надо чиатать про метод, в чем вот разница 1. Если Рез.BOF = 0 Тогда КонецЕсли; во втором случае работает одна запись в первом случае 2 записи.
#27 by YHVVH
в том то и дело что обычно я делаю ключи , а тут вот не сделал увидел глюк.
#28 by AHgpuXa
Теперь вообще не понимаю ничего. Если ключей нет, почему ЗапросТекст = "insert into ""1JOURNAL_T"" (IDDOC1, IDTOVAR, KOLDOC) values ('1', '1', 2)"; - прокатывает один раз.
#29 by YHVVH
потомучто он ничего не возращает
#30 by YHVVH
грубо говоря метод MoveFirst я так думаю не работает неначто ему позиционировать
#31 by AHgpuXa
Вот этого достаточно. Рез.MoveFirst; Потому как Использование BOF возвращает истину, только когда указатель находится перед первой записью. Но вставляет?
#32 by YHVVH
вывод: типа дублирования записи осуществляется при вызове метода MoveFirst в некоторых случаях например после .BOF разобраться так и не удалось,  в интернет поискал, встречаются разные конструкции перебора возращенных записей. я остановился на такой Рез.MoveFirst;
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С