Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Параметризированный запрос (число прочтений - 1607 )
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Параметризированный запрос
23. Сентября 2009 :: 07:47
Печать  
Первая попытка сделать параметризированный запрос.
Нужно в форме справочника "Товары" показывать резерв  по товару из регистра на ТА.
Запрос простейший:
           ТекстЗапроса = "
           |      DECLARE @ActTA datetime
           |      DECLARE @DayTA datetime
           |      SET @ActTA = (SELECT _1SSYSTEM.CURDATE FROM _1SSYSTEM(nolock))
           |      SET @DayTA = @ActTA - DAY(@ActTA) + 1
           |SELECT
           |      SUM($Рег.РезервТовара) РезервТовара
           |FROM
           |      $РегистрИтоги.РезервыТоваров as Рег (NoLock)
           |WHERE
           |      $Рег.Товар = :ТекТовар
           |      AND Рег.PERIOD = @DayTA";
           |      AND $Рег.Склад = :ТекСклад";

Хоче сделать его параметризированным.
Делаю следующее:
ПриОткрытии()
           РС=СоздатьОбъект("ODBCRecordSet");//РС - переменная модуля
           Если Константа.НеИспользоватьSQLЗапрос=0 Тогда
                 ТекстЗапроса = "
                 |      DECLARE @ActTA datetime
                 |      DECLARE @DayTA datetime
                 |      SET @ActTA = (SELECT _1SSYSTEM.CURDATE FROM _1SSYSTEM(nolock))
                 |      SET @DayTA = @ActTA - DAY(@ActTA) + 1
                 |SELECT
                 |      SUM($Рег.РезервТовара) РезервТовара
                 |FROM
                 |      $РегистрИтоги.РезервыТоваров as Рег (NoLock)
                 |WHERE
                 |      $Рег.Товар = ?
                 |      AND $Рег.Склад ?
                 |      AND Рег.PERIOD = DayTA@
                 |";
             РС.Отладка(1);
                 РС.Подготовить(ТекстЗапроса);
                 РС.ПостроитьПараметры();
           КонецЕсли;
и далее:
Функция ОстатокРезерва()
     Если Форма.Резерв.Видимость()=1 Тогда
           //Возврат глПоказатьРезерв(ТекущийЭлемент(),ТекСклад);
           РС.УстПараметр(1, ТекущийЭлемент());
           РС.УстПараметр(2, ТекСклад);    
           Возврат РС.ВыполнитьСкалярный();      
     КонецЕсли;
     Возврат "";
КонецФункции      // ОстатокРезерва()

Не работает.
Ошибка
Возврат РС.ВыполнитьСкалярный();
{Справочник.Товары.ФормаСписка.ФормаСписка.Модуль(827)}: State 07009, native 0, message [Microsoft][ODBC SQL Server Driver]Недопустимый индекс дескриптора

Подскажите пожалуйста.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Параметризированный запрос
Ответ #1 - 23. Сентября 2009 :: 08:11
Печать  
может лучше вместо ПостроитьПараметры
использовать ДобПараметр

PS  (ИХМО) а еще лучше использовать хранимую процедуру
  
Наверх
 
IP записан
 
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Re: Параметризированный запрос
Ответ #2 - 23. Сентября 2009 :: 08:37
Печать  
я это из примера брал.

Т.е возможно некорректно отрабатывает РС.ПостроитьПараметры()?

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Параметризированный запрос
Ответ #3 - 23. Сентября 2009 :: 08:41
Печать  
Bibr писал(а) 23. Сентября 2009 :: 08:37:
я это из примера брал.

Т.е возможно некорректно отрабатывает РС.ПостроитьПараметры()?


Да.
Когда строишь вручную то сам их полностью контролируешь.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать