![]() |
![]() |
![]() |
|
Как передать параметр в запрос через ADO? | ☑ | ||
---|---|---|---|---|
0
Doomer
22.10.10
✎
08:18
|
Есть вот такой запрос к Парусу через ADO:
ТекстЗапроса="SELECT zHIS.* FROM zHIS |WHERE (zHIS.YEAR) = YEAR) |and (zHIS.MONTH) = MONTH)"; Нужно передать параметры YEAR и MONTH. Оба параметра типа число. Что то я никак не пойму как передать параметры в запрос. |
|||
1
АйЭм
22.10.10
✎
08:39
|
Я так понимаю, что ответ "либо сформируй программно текст запроса с указанием значения примитивного типа, либо задай свойства объектной переменной ADO, отвечающие за параметры и используй их в запросе" не подойдет?
Ну блин, давно это было и нету под рукой куска кода. |
|||
2
smitru
22.10.10
✎
08:41
|
(0) э-э-э.. ну типа:
ТекстЗапроса="SELECT zHIS.* FROM zHIS |WHERE (zHIS.YEAR) = " + YEAR + ") |and (zHIS.MONTH) = "+ MONTH + ")"; И не париться :-) |
|||
3
АйЭм
22.10.10
✎
08:49
|
+ на YEAR закатать Формат - чтобы год не получился 2 010. ))))
|
|||
4
Сергей Д
22.10.10
✎
08:50
|
Поглядел в одной дописанной конфигурации - везде формируется текст запроса, как показано в (2).
|
|||
5
smitru
22.10.10
✎
08:51
|
(4) (задумчиво) может мой код и смотрел? :-)))
|
|||
6
Doomer
модератор
22.10.10
✎
09:06
|
(2) Я так по началу и сделал. Пишет - не соответствие типов.
|
|||
7
smitru
22.10.10
✎
09:10
|
(6) а формат() как в (3) - ставил?
И как может быть "несовпадение типов" если сам говоришь что там число? |
|||
8
agarych
22.10.10
✎
09:13
|
ТекстЗапроса="SELECT zHIS.* FROM zHIS
|WHERE (zHIS.YEAR) = 2010 |and (zHIS.MONTH) = 10"; так то работает? |
|||
9
Doomer
22.10.10
✎
09:19
|
Я вообще хотел разобраться с передачей параметров в запрос через ADO. А не просто решить локальную проблему.
|
|||
10
DmitrO
22.10.10
✎
09:20
|
(9) В MSDN все написано же
|
|||
11
DmitrO
22.10.10
✎
09:23
|
примерно так:
добавляется параметр типа строка: Command.Parameters.Append(Command.CreateParameter(, 129, 1, 18, ПрефиксНомера)); |
|||
12
agarych
22.10.10
✎
09:32
|
Функция ВыполнитьADOЗапрос(Con, ТекстЗапроса, ХранимаяПроцедура = Ложь, СписокПараметров = Неопределено)
Попытка Cmd = Новый COMОбъект("ADODB.Command"); Cmd.ActiveConnection = Con; Если ХранимаяПроцедура Тогда Cmd.CommandType = ТипКомандыАДО("dcmdstoredproc"); Для я = 0 По СписокПараметров.Количество() - 1 Цикл Параметр = Cmd.CreateParameter (СписокПараметров[я].Значение.ИмяПараметра, СписокПараметров[я].Значение.ТипЗначения, СписокПараметров[я].Значение.Тип, СписокПараметров[я].Значение.Размер, СписокПараметров[я].Значение.Значение); Cmd.Parameters.Append(Параметр); КонецЦикла; КонецЕсли; Cmd.CommandText = ТекстЗапроса; Rs = Новый COMОбъект("ADODB.RecordSet"); Rs = Cmd.Execute(); //Выполнение и получение набора данных Исключение Конецпопытки; Возврат Rs; КонецФункции ну и сам вызов СписокПараметров = Новый СписокЗначений; Параметры = "ИмяПараметра, ТипЗначения, Тип, Размер, Значение"; Параметр1 = Новый Структура(Параметры, "@request_no", КонстантаАДО("adinteger"), ТипПараметраАДО("adparaminput"), 4, Номер); Параметр2 = Новый Структура(Параметры, "@closed_date", КонстантаАДО("addate"), ТипПараметраАДО("adparaminput"), 128, Дата); Параметр3 = Новый Структура(Параметры, "@state", КонстантаАДО("advarchar"), ТипПараметраАДО("adparaminput"), 128, Статус); Параметр4 = Новый Структура(Параметры, "@cancel", КонстантаАДО("adinteger"), ТипПараметраАДО("adparaminput"), 4, Отклонена); СписокПараметров.Добавить(Параметр1); СписокПараметров.Добавить(Параметр2); СписокПараметров.Добавить(Параметр3); СписокПараметров.Добавить(Параметр4); Con = СоздатьAdoСоединение(); ВыполнитьADOЗапрос(Con, "ib_chReqClosedDate", Истина, СписокПараметров); |
|||
13
Doomer
22.10.10
✎
09:34
|
(8)Нет. Выдает "function name is missing.
|
|||
14
agarych
22.10.10
✎
09:44
|
ТекстЗапроса="SELECT zHIS.* FROM zHIS
|WHERE zHIS.YEAR = 2010 |and zHIS.MONTH = 10"; Может так? ) |
|||
15
774816
22.10.10
✎
09:45
|
(13)может проблема в названии колонок, называть колонки MONTH или YEAR может вызвать ошибку в запросе, попробуй так
SELECT zHIS.* FROM zHIS WHERE zHIS.[YEAR] = 2010 and zHIS.[MONTH] = 10 ЗЫ какой тип субд млм бд использует Парус? |
|||
16
Doomer
22.10.10
✎
13:29
|
(15) БД FoxPro.
В вашем варианте вываливается синтаксическая ошибка при выполнении запроса. |
|||
17
774816
22.10.10
✎
14:36
|
можно еще так попробовать
WHERE zHIS.`YEAR` = 2010 and zHIS.`MONTH` = 10 |
|||
18
smaharbA
22.10.10
✎
14:42
|
Запрс - это тут adodb.recordset
|
|||
19
smaharbA
22.10.10
✎
14:43
|
пля !!! не думал, что так многа текста )))
|
|||
20
smaharbA
22.10.10
✎
14:44
|
прикол
|
|||
21
smaharbA
22.10.10
✎
14:46
|
еще разог
|
|||
22
Megas
22.10.10
✎
14:47
|
Set @Year =
Предлагали? |
|||
23
smaharbA
22.10.10
✎
14:47
|
|
|||
24
smaharbA
22.10.10
✎
14:47
|
что за фигня на @in в (18) вышла ?
|
|||
25
Megas
22.10.10
✎
14:48
|
(19) А нафига объявлять? Оно само определиться как надо вроде.
|
|||
26
smaharbA
22.10.10
✎
14:49
|
(25) этот кусок в контексте работает иначе чем кажется
|
|||
27
Megas
22.10.10
✎
14:50
|
А вот
ТекстЗапроса="SELECT zHIS.* FROM zHIS |WHERE (zHIS.YEAR) = '2010' |and (zHIS.MONTH) = '10'"; так пробовал? ' - проставлять |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |