|   |   | 
| 
 | ADODB.Connection Чтение двух результатов запросов | ☑ | ||
|---|---|---|---|---|
| 0
    
        _Ramzes 02.09.14✎ 09:18 | 
        Добрый день, Коллеги!
 Реализую выгрузку в стороннюю базу для последующей передачи. Соединение = Новый COMОбъект("ADODB.Connection"); Соединение.ConnectionString = СтрокаПодключения; Соединение.Open(СтрокаПодключения); RS = Новый COMОбъект("ADODB.Recordset"); ТекстЗапроса = "DECLARE @return_value int | |EXEC @return_value = [dbo].[Zsp_openSession] | |SELECT 'Return Value' = @return_value"; ТекстЗапроса = "EXEC Zsp_openSession"; Resultat = RS.Open(ТекстЗапроса, Соединение); Пока RS.EOF() = 0 Цикл В SQL MS после выполнения запроса возвращаются 2 результата запроса http://screencast.com/t/5AUpd6o7p А в 1С через ADODB.Recordset доступен только первый результат выполнения хранимой процедуры. А значение переменной return_value недоступно. Скажите возможно ли обратиться к двум результатам выполнения процедур? | |||
| 1
    
        ДенисЧ 02.09.14✎ 09:23 | 
        recordset.next()     | |||
| 2
    
        olegves 02.09.14✎ 09:24 | 
        (0) а кто тебе не дает объединить результаты в один запрос, все равно ведь ты предварительно сохраняешь возвращаемое значение в переменную?     | |||
| 3
    
        ДенисЧ 02.09.14✎ 09:24 | ||||
| 4
    
        _Ramzes 02.09.14✎ 10:23 | 
        (3)
 А в какой момент использовать оператор RS.NextRecordset()? Он возвращает у меня ComОбъект, однако для него я не могу использовать Пока RS.EOF() Соединение = Новый COMОбъект("ADODB.Connection"); Соединение.ConnectionString = СтрокаПодключения; Соединение.Open(СтрокаПодключения); RS = Новый COMОбъект("ADODB.Recordset"); RS.Open(ТекстЗапроса, Соединение); МассивДляВозврата = Новый Массив(); Счетчик = 0; Пока RS.EOF() = 0 Цикл СтруктураДанныхДляПередачи = Новый Структура(); Для СчетчикПолей = 0 По RS.Fields.Count - 1 Цикл ТекущееПоле = RS.Fields(СчетчикПолей); СтруктураДанныхДляПередачи.Вставить(ОбработатьИмя(ТекущееПоле.Name), Формат(ТекущееПоле.Value, "ЧГ=0")); КонецЦикла; RS.MoveNext(); Счетчик = Счетчик + 1; МассивДляВозврата.Добавить(СтруктураДанныхДляПередачи); КонецЦикла; //Второй набор данных //RS.NextRecordset(); RS.Close(); Соединение.Close(); | |||
| 5
    
        _Ramzes 02.09.14✎ 10:27 | 
        (3)
 Для примера уже тестирую вариант запроса "select 1 |select 2 |select 3 |select 4 |select 5 |select 6 |select 7 |select 8 |select 9 |select 1 |select 2 |select 3 |select 4 |select 5 |select 6 |select 7 |select 8" | |||
| 6
    
        shuhard 02.09.14✎ 10:29 | 
        (0) SET NOCOUNT ON попробуй     | |||
| 7
    
        _Ramzes 02.09.14✎ 10:37 | 
        (6) Это в текст запроса? Если да, то не помогло.     | |||
| 8
    
        Serginio1 02.09.14✎ 10:40 | 
        Функция ВыполнитьКомандуSQL(ТекстЗапроса) Экспорт
 ДанныеСервера=ПолучитьТекущийСерверИБазу(); ConnectionString ="DRIVER=SQL Server; |UID=администратор; |Network=DBMSSOCN; |LANGUAGE=русский; |DATABASE="+ДанныеСервера.Ref+"; |WSID="+ДанныеСервера.Srvr+"; |APP=Microsoft® Windows® Operating System; |Trusted_Connection=Yes; |SERVER="+ДанныеСервера.Srvr; //Сообщить(СтрокаСоединенияИнформационнойБазы()); Connection = Новый COMОбъект("ADODB.Connection"); //ADO_Recordset = Новый COMОбъект("ADODB.Recordset"); //ADO_Command = Новый COMОбъект("ADODB.Command"); // ADO_Connection. // Соединение.ConnectionString = "DSN=" + ДСН + ";UID=" + УИД + ";PWD=" + ПВД; Connection.ConnectionString = ConnectionString; Connection.CommandTimeOut=0; Connection.ConnectionTimeout = 0; Connection. CursorLocation= 3; Сообщить(Connection.ConnectionString); Connection.Open(); Command = Новый COMОбъект("ADODB.Command"); Command.ActiveConnection=Connection; Command.CommandType = 1; Command.CommandTimeout=0; Command.CommandText=ТекстЗапроса; //RecordSet = Новый COMОбъект("ADODB.RecordSet"); РекордСет=Command.Execute(); Резулт=""; Пока РекордСет<>неопределено Цикл Если РекордСет.Fields.Count>0 Тогда Поле=РекордСет.Fields(0); Стр=Поле.Name+" "+Поле.Value; Если ЗначениеЗаполнено(Резулт) тогда Резулт=Резулт+" |"+Стр иначе Резулт=Стр; КонецЕсли; КонецЕсли; РекордСет=РекордСет.NextRecordSet(); КонецЦикла; Сообщить(Резулт); Возврат Резулт КонецФункции | |||
| 9
    
        shuhard 02.09.14✎ 10:49 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |