Имя: Пароль:
IT
 
Adodb.Recordset
0 Joshim
 
05.01.12
12:07
Есть запрос:
select DEPO_ID,
from DEPO_MAN
where DEPO_ID in ("+Строка+")"

Пока строка не превышает предельную длину запрос работает нормально.
Как создать массив в Adodb, чтобы параметр передавать массивом вместо строки? Спасибо
1 nicxxx
 
05.01.12
13:12
сделать временную таблицу
create table _my_temporary_table (row_xxx CHAR(999))

и в основном запросе использовать ее для фильтра
where DEPO_ID in (select row_xxx from _my_temporary_table)
2 Joshim
 
05.01.12
13:28
Я не силен в Adodb. В хранимой процедуре SQL есть куча примеров как создать временную таблицу и заполнить ее, а затем использовать параметром в запросе. Не один раз это делал. Не ясно как из 1С через    
ЗапросАДО = СоздатьОбъект("ADODB.Command");
это сделать?
3 ДенисЧ
 
05.01.12
13:31
Запросадо.execute("create table #tempt  (row char(9))")
4 Joshim
 
05.01.12
13:32
(3) а параметром в запрос как
select DEPO_ID,
from DEPO_MAN
where DEPO_ID in (???)
5 Joshim
 
05.01.12
13:34
(3) наверное как в 1 по имени таблицы?
where DEPO_ID in (select row_xxx from _my_temporary_table)
6 ДенисЧ
 
05.01.12
13:35
(5) #не забудь поставить для временной таблицы
7 Joshim
 
05.01.12
14:11
ЗапросАДО = СоздатьОбъект("ADODB.Command");
ЗапросАДО.ActiveConnection = ПолучитьСоединениеСБазой();
ЗапросАДО.CommandText = "create table #tempt (Col1 char(9))";
Для Н = 1 По СписокКодовДепонентов.РазмерСписка() Цикл
ТекЗнач = СписокКодовДепонентов.ПолучитьЗначение(Н);
ЗапросАДО.CommandText = "INSERT INTO #tempt VALUES ('" + СокрЛП(ТекЗнач) + "')";
ЗапросАДО.Execute();
КонецЦикла;

Ошибка на строке ЗапросАДО.CommandText = "INSERT INTO #tempt VALUES ('" + СокрЛП(ТекЗнач) + "')";
Microsoft OLE DB Provider for ODBC Drivers: [ODBC Firebird Driver][Firebird]Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, char 13#
8 1Сергей
 
05.01.12
14:13
(7) а без решетки?
9 Joshim
 
05.01.12
14:24
(8) без решетки работает
10 Joshim
 
05.01.12
15:34
Так как в интернете ничего на єту тему найти не удалось, может кому-то пригодиться:

//********************************
Функция ПолучитьСоединениеСБазой()
   
   СтрПодкл="Driver=Firebird/InterBase(r) driver;Uid=UserName;Pwd=CurrentPassword;DbName="+ПутьКБазе+";";
   
   Попытка
       extConnSQL = СоздатьОбъект("ADODB.Connection");
       extConnSQL.ConnectionString = СтрПодкл;
       extConnSQL.Open();
   Исключение
       Сообщить(ОписаниеОшибки());  
       Предупреждение("Не удалось выполнить подключение к IB ...");  
   КонецПопытки;
   
   
   
   
   Возврат extConnSQL;
   
КонецФункции

Процедура Выполнить()
   
   СтрЗапр = "select DEPO_ID,
   |from DEPO_MAN
   |where DEPO_ID in (Select Col1 From tempt)";
   
   ЗапросАДО = СоздатьОбъект("ADODB.Command");
   ЗапросАДО.ActiveConnection = ПолучитьСоединениеСБазой();
   
   Попытка
       
       ЗапросАДО.CommandText = "create table tempt (Col1 char(9))";
       ЗапросАДО.Execute();

       Для Н = 1 По СписокКодовДепонентов.РазмерСписка() Цикл
       //Для Н = 1 По 10 Цикл
           ТекЗнач = СписокКодовДепонентов.ПолучитьЗначение(Н);
           ЗапросАДО.CommandText = "INSERT INTO tempt VALUES ('" + СокрЛП(ТекЗнач) + "')";
           ЗапросАДО.Execute();
       КонецЦикла;
       
       ЗапросАДО.CommandText = СтрЗапр;
       QweryResult = ЗапросАДО.Execute();
       
   Исключение
       
       Сообщить(ОписаниеОшибки());
       Попытка
           ЗапросАДО.CommandText = "DROP TABLE tempt";
           ЗапросАДО.Execute();
           ЗапросАДО.Close();
       Исключение
       КонецПопытки;
       Предупреждение("Не удалось выполнить запрос к IB ...");
       Возврат;
       
   КонецПопытки;
   
   Oper = QweryResult;
   
   Спр_Банков = СоздатьОбъект("Справочник.Банки");
   Спр_Депонентов = СоздатьОбъект("Справочник.Депоненты");
   Пока QweryResult.EOF = 0 Цикл
     КонецЦикла;
     
     Попытка
       ЗапросАДО.CommandText = "DROP TABLE tempt";
       ЗапросАДО.Execute();
   Исключение
   КонецПопытки;
   
   ЗапросАДО.Close();  
КонецПроцедуры

Всем спасибо!