Имя: Пароль:
1C
 
запрос через ADO в Oracle с параметрами
0 alexsy
 
26.10.05
11:55
Простенький запрос:

Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Новый COMОбъект("ADODB.Connection");
Command.CommandText = "select * from VW_RPT_CFT_PERSON_F_1C where DATE_MOVE >= :DATEN";
par = Command.CreateParameter("DATEN", 133, 1);
par.Value = ДатаН;
RecordSet = Новый COMОбъект("ADODB.RecordSet");
RecordSet = Command.Execute();

ломается:
"Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for Oracle): ORA-01008: не все переменные привязаны"

если делать запрос без параметра :DATEN то все ок, но он мне нужен.
Передавать его как сторку не очень бы хотелось.
Почему же ломается?
1 Худой
 
26.10.05
12:17
Ну ты перед запросом сформируй ТЕКСТ. И вместо ":DATEN" поставь, например "01.04.2005"
2 Худой
 
26.10.05
12:20
ТЕКСТ = "01.04.2005";
Command.CommandText = "select * from VW_RPT_CFT_PERSON_F_1C where DATE_MOVE >= "+ ТЕКСТ;
3 Худой
 
26.10.05
12:22
Пардон. Не совсем внимательно прочитал. А почему "Передавать его как сторку не очень бы хотелось"?
В чем проблемы с этим?
4 alexsy
 
26.10.05
12:22
(1) например такой запрос
select * from VW_RPT_CFT_PERSON_F_1C where DATE_MOVE >= '01/01/2000'
работает.
Но меня уже заусило разобраться как именно через ADO передать параметр и почему ломается.
5 колодина
 
26.10.05
12:23
а параметр-строку передает? проблема только с датой?
6 Худой
 
26.10.05
12:23
И не надо "заусиваться". Зачем тебе думать как ADO работает?
7 alexsy
 
26.10.05
12:25
(3) "Надо делать не так, чтобы работало, а так, как правильно"
хотя бы по возможности ;-)
(5) щас проверять буду
8 Худой
 
26.10.05
12:29
(7)А правильнее - пиши тогда на оракле. Зачем 1с?
9 alexsy
 
26.10.05
12:36
(5) побарабану какой тип параметра. все ломаются одинаково.

(8) из оракла нада в 1С подтянуть данных. из-за специфики ситуации из оракла в 1С залесть низя. (да если чесно вообще не могу представить как это можно сделать-знаний не хватает, вот запросик написать - это другое дело :) )
10 колодина
 
26.10.05
12:38
значит вообще параметры не передает.... думаю, это может быть из-за разного представления данных .... тогда выхода нет, как формировать строку запроса....
11 Худой
 
26.10.05
12:40
Да это все понятно. Я к тому "что правильно". Правильно не всегда "правильно". (9)Пиши тогда систему ПОЛНОСТЬЮ на оракле. Это тоже будет, по своему, "правильно". Короче, определяй в 1с перед селектом то, что тебе нужно выбрать. Вот тебе и параметр будет.
12 alexsy
 
28.10.05
11:13
работает так:

Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Новый COMОбъект("ADODB.Connection");
Command.CommandText = "select * from VW_RPT_CFT_PERSON_F_1C where DATE_MOVE >= ?";
par = Command.CreateParameter("DATEN", 133, 3);
Command.Parameters.Append(par);
par.Value = ДатаН;
Command.NamedParameters = Ложь; // можно не писать, по умолчанию и так ложь
RecordSet = Новый COMОбъект("ADODB.RecordSet");
RecordSet = Command.Execute();