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