![]() |
![]() |
![]() |
|
Прямой запрос к SQl - ошибка | ☑ | ||
---|---|---|---|---|
0
Courageous
09.06.12
✎
08:53
|
Добрый день форумчане. Очень нужна помощь, ибо у самого теории иссякли. Есть прямой запрос к SQL, который отрабатывает на ура, если вызван из формы документа пользователем, но когда эта форма обрабатывается Автопользователем в рег.задании, - вылетает с ошибкой: "Ошибка при вызове метода контекста (CreateParameter): Плохой тип переменной". Сам текст вызова:
Соединение=Новый COMОбъект("ADODB.Connection"); Соединение.CommandTimeout=Интервал; Соединение.CursorLocation=Курсор; Путь="Provider=SQLOLEDB.1;Password=12345;User ID=sa;Initial Catalog=KM;Data Source=db"; Соединение.Open(Путь); Команда=Новый COMОбъект("ADODB.Command"); Команда.ActiveConnection=Соединение; Команда.CommandType=1; Команда.CommandText=ТекстЗапроса; Команда.CommandTimeout=Интервал; Команда.Prepared = True; //Далее заполняем параметры Для Каждого Параметр Из Параметры Цикл ПараметрADO=Команда.CreateParameter(Параметр.Имя,Параметр.ТипДанных,Параметр.ВходВыход, Параметр.Длина); Команда.Parameters.Append(ПараметрADO); //ВОТ ЗДЕСЬ ВЫЛЕТАЕТ С ОШИБКОЙ ПараметрADO.Value=Параметр.Значение; КонецЦикла; Может кто сталкивался с подобным... Очень похоже что на сервере приложений чего-то не хватает, т.к. через тестовый СП все отрабатывает нормально даже под Автопользователем, но вот что именно я никак не могу понять. |
|||
1
Courageous
09.06.12
✎
12:08
|
up
|
|||
2
shamannk
09.06.12
✎
12:09
|
Автопользователем в рег.задании выполнение на сервере , там нет форм
|
|||
3
Courageous
09.06.12
✎
12:52
|
Да это понятно, просто в запрос передается не форма, а объект, и идет рассчет. Вся проблема в том - что код впринципе рабочий на одном сервере, а на другом уже не хочет. Попробовал переписать работу с параметрами на
Команда.Parameters.Refresh(); Для Каждого Параметр Из Параметры Цикл Ном = Ном+1; Команда.Parameters.Item(Ном).Value = Параметр.Значение; КонецЦикла; Все работает, пока запрос простенький... как только идет запрос с объединением (UNION ALL) то refresh() отрабатывает с ошибкой, а если точнее, то при создании Команды он не определяет что в запросе есть параметры... |
|||
4
Courageous
09.06.12
✎
12:56
|
ну т.е. когда передаю запрос:
SELECT SUM(_AccntReg10196._Fld10220) as OborotPeriod FROM _AccntReg10196 INNER JOIN _Reference119 ON _AccntReg10196._Fld10197RRef = _Reference119._IDRRef INNER JOIN _Reference126 ON _AccntReg10196._Fld10198RRef = _Reference126._IDRRef INNER JOIN _Acc10 ON _AccntReg10196._AccountRRef = _Acc10._IDRRef INNER JOIN _Enum536 ON _AccntReg10196._Fld10218RRef =_Enum536._IDRRef INNER JOIN _Reference178 ON _AccntReg10196._Fld10217RRef = _Reference178._IDRRef INNER JOIN _Reference144 ON _AccntReg10196._Fld10216RRef = _Reference144._IDRRef INNER JOIN _Reference54 ON _AccntReg10196._Fld10201_RRRef = _Reference54._IDRRef INNER JOIN _Reference143 ON _AccntReg10196._Fld10202_RRRef = _Reference143._IDRRef WHERE (_Acc10._Description = 'Контроль ДС' ) AND (_Reference119._Description = 'Месячный план для утверждения' ) AND _AccntReg10196._Period >= CONVERT(DATETIME, '2012-06-01 00:00:00', 102) AND _AccntReg10196._Period <= CONVERT(DATETIME, '2012-06-30 23:59:59', 102) AND _AccntReg10196._Correspond='0' AND _Reference126._Description= ? AND _Reference178._Description= ? AND _Reference144._Code<>'00001' AND _Reference144._Code<>'00079' AND _Reference54._Description=? AND _Reference143._Description=? AND (_AccntReg10196._Active <> 0x00) все отрабатывает, а если более сложный, то уже нет: SELECT SUM(OBOROT)as OborotPeriod from (SELECT SUM(_AccntReg10196._Fld10220) AS OBOROT FROM _AccntReg10196 INNER JOIN _Reference119 ON _AccntReg10196._Fld10197RRef = _Reference119._IDRRef INNER JOIN _Reference126 ON _AccntReg10196._Fld10198RRef = _Reference126._IDRRef INNER JOIN _Acc10 ON _AccntReg10196._AccountRRef = _Acc10._IDRRef INNER JOIN _Enum536 ON _AccntReg10196._Fld10218RRef =_Enum536._IDRRef INNER JOIN _Reference178 ON _AccntReg10196._Fld10217RRef = _Reference178._IDRRef INNER JOIN _Reference144 ON _AccntReg10196._Fld10216RRef = _Reference144._IDRRef INNER JOIN _Reference54 ON _AccntReg10196._Fld10201_RRRef = _Reference54._IDRRef INNER JOIN _Reference143 ON _AccntReg10196._Fld10202_RRRef = _Reference143._IDRRef WHERE (_Acc10._Description = 'Контроль ДС' ) AND (_Reference119._Description = 'Факт' OR _Reference119._Description = 'ДС_Подача Заявки на ДС' OR _Reference119._Description = 'ДС_Подтверждение факта' OR _Reference119._Description = 'ДС_Утверждение главным казначеем' OR _Reference119._Description = 'ДС_Отложенные заявки' OR _Reference119._Description = 'ДС_Резервирование' ) AND _AccntReg10196._Period >= CONVERT(DATETIME, '2012-06-01 00:00:00', 102) AND _AccntReg10196._Period <= CONVERT(DATETIME, '2012-06-30 23:59:59', 102) AND _AccntReg10196._Correspond='0' AND (_Enum536._EnumOrder= '9' OR _Enum536._EnumOrder= '8' OR _Enum536._EnumOrder= '7' OR _Enum536._EnumOrder= '6') AND _Reference178._Description= ? AND _Reference144._Code<>'00001' AND _Reference144._Code<>'00079' AND (_AccntReg10196._Active <> 0x00) UNION ALL SELECT -SUM(_AccntReg10196._Fld10220) FROM _AccntReg10196 INNER JOIN _Reference119 ON _AccntReg10196._Fld10197RRef = _Reference119._IDRRef INNER JOIN _Reference126 ON _AccntReg10196._Fld10198RRef = _Reference126._IDRRef INNER JOIN _Acc10 ON _AccntReg10196._AccountRRef = _Acc10._IDRRef INNER JOIN _Enum536 ON _AccntReg10196._Fld10218RRef =_Enum536._IDRRef INNER JOIN _Reference178 ON _AccntReg10196._Fld10217RRef = _Reference178._IDRRef INNER JOIN _Reference144 ON _AccntReg10196._Fld10216RRef = _Reference144._IDRRef INNER JOIN _Reference54 ON _AccntReg10196._Fld10201_RRRef = _Reference54._IDRRef INNER JOIN _Reference143 ON _AccntReg10196._Fld10202_RRRef = _Reference143._IDRRef WHERE (_Acc10._Description = 'Контроль ДС' ) AND (_Reference119._Description = 'Факт' OR _Reference119._Description = 'ДС_Подача Заявки на ДС' OR _Reference119._Description = 'ДС_Подтверждение факта' OR _Reference119._Description = 'ДС_Утверждение главным казначеем' OR _Reference119._Description = 'ДС_Отложенные заявки' OR _Reference119._Description = 'ДС_Резервирование' ) AND _AccntReg10196._Period >= CONVERT(DATETIME, '2012-06-01 00:00:00', 102) AND _AccntReg10196._Period <= CONVERT(DATETIME, '2012-06-30 23:59:59', 102) AND _AccntReg10196._Correspond='1' AND (_Enum536._EnumOrder= '9' OR _Enum536._EnumOrder= '8' OR _Enum536._EnumOrder= '7' OR _Enum536._EnumOrder= '6') AND _Reference178._Description= ? AND _Reference144._Code<>'00001' AND _Reference144._Code<>'00079' AND (_AccntReg10196._Active <> 0x00) ) f Что именно ему не нравиться,я не понимаю.... |
|||
5
sda553
09.06.12
✎
12:59
|
а где в этом запросе параметры?
|
|||
6
sda553
09.06.12
✎
13:00
|
а...нашел
|
|||
7
sda553
09.06.12
✎
13:07
|
короче смотри, ситуация такая, та делать нельзя. Работая с ком объектами, можно работат только с примитивным типам. Передавать другой ком в функцию объекта в качестве параметра никак не удасться.
только строки, числа и т.п. фигня Так что в данном случае тебе придется избавиться от параметра |
|||
8
sda553
09.06.12
✎
13:08
|
обходной путь, заполняй параметры прямо в тексте sql
|
|||
9
Courageous
09.06.12
✎
14:12
|
Но вопрос в том, что он из приложения отрабатывает, а на сервере нет. Т.е. получается что на сервере придется параметры передавать в текст чтоли.
|
|||
10
Courageous
09.06.12
✎
14:14
|
Вот этот кусок текста
Команда=Новый COMОбъект("ADODB.Command"); Команда.ActiveConnection=Соединение; Команда.CommandType=1; Команда.CommandText=ТекстЗапроса; после прохождения с простым запросом, в Команда.Parameters есть строки = числу параметров (1 или 4 - неважно), а если сложный запрос, то Команда.Parameters - пустая остается, как будто он не видит этих параметров. |
|||
11
Courageous
09.06.12
✎
15:42
|
У меня все же подозрение что какая-то служба неработает на рабочем сервере, или нехватает каких либо разрешений, т.к. на тестовом все запускается...
|
|||
12
Courageous
13.06.12
✎
10:39
|
ап.
|
|||
13
eduspec82
13.06.12
✎
10:42
|
уж не мутабельна ли коллекция параметров :)
|
|||
14
Courageous
13.06.12
✎
10:46
|
это как :) в параметры передаю текстовые либо числовые значения.
|
|||
15
eduspec82
13.06.12
✎
10:47
|
коллекция типа список значений мутабельна
|
|||
16
Courageous
13.06.12
✎
10:48
|
аааа, нет, параметры в ТЗ у меня, делаю ее обход, и приравниваю простые типы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |