![]() |
![]() |
![]() |
|
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(); КонецПроцедуры Всем спасибо! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |