pavel_tr писал(а) 28. Октября 2006 :: 09:26:Хотел уточнить по топику, значит метод ВыполнитьSQL_ИзТЗ() стоит использовать именно в запросах которые можифицируют таблицы? Для выборки он не применим?
интересная постановка вопроса... сам я раньше об этом не задумывался, потому как не нужно было - вижу и здесь отсутствие необходимости именно такого решения, но не буду отговаривать.
1) Судя по описанию метода он
Цитата:метод выполняет параметрический запрос и в качестве параметров берет значения из переданной таблицы.
другими словами - это почти то же, что и связка Подготовить() -> УстПараметр() -> ВыполнитьИнструкцию(), только в качестве параметров будет твоя ТЗ.
Интересно, что результат тут тебе понадобится только после отработки всех подзапросов с параметрами из таблицы.
2) Что можно сделать в данной ситуации:
а) Создать на сервере временную таблицу "стандартными" средствами с помощью ВыполнитьSQL_ИзТЗ() - такой вариант есть в примере, а потом уже к ней выполнять конечный запрос.
б) Дописать твой вариант с, опять же, временной таблицей, тока уже с результирующими данными:
тз1=СоздатьОбъект("ТаблицаЗначений");
рс1=СоздатьОбъект("ODBCRecordSet");
//--- временная таблица
ТекстЗапроса = "
|IF EXISTS (SELECT *
| FROM tempdb..sysobjects
| WHERE id = object_id('tempdb..#temp'))
| DROP TABLE #temp
|";
рс1.Выполнить(ТекстЗапроса);
//--- создаем таблицы
рс1.Выполнить("CREATE TABLE #temp(ID CHAR(9))");
Если рс1.Подготовить("
|INSERT INTO #temp(ID)
|SELECT
| Спр.ID
|FROM
| $Справочник.Товары Спр
|WHERE
| Спр.Descr = ?")=0 тогда
Предупреждение(рс1.ПолучитьОписаниеОшибки());
возврат;
КонецЕсли;
рс1.ВыполнитьSQL_ИзТЗ(тз); // заполняем таблицу результатами
ТекстЗапроса = "
|SELECT
| ID [Элемент $Справочник.Товары]
|FROM #temp
|";
тз1 = рс1.ВыполнитьИнструкцию(ТекстЗапроса);
тз1.ВыбратьСТроку(); // надеюсь НЕ пусто :-)