Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Возможно ли получить результат запроса PowerQuery в массив - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Возможно ли получить результат запроса PowerQuery в массив (Макросы/Sub)
Возможно ли получить результат запроса PowerQuery в массив
anvg Дата: Вторник, 23.04.2019, 20:33 | Сообщение № 21
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
.MoveNext переводит к следующей записи
Код выполнить пробовали или просто посчитали, что я от нечего делать такую строку If Not pRset.EOF Then pRset.MoveNext вставил? Без него Recordset ничего не даёт по pRset(0).Value, кроме ошибки.


Сообщение отредактировал anvg - Вторник, 23.04.2019, 20:50
 
Ответить
Сообщение
.MoveNext переводит к следующей записи
Код выполнить пробовали или просто посчитали, что я от нечего делать такую строку If Not pRset.EOF Then pRset.MoveNext вставил? Без него Recordset ничего не даёт по pRset(0).Value, кроме ошибки.

Автор - anvg
Дата добавления - 23.04.2019 в 20:33
Bamboo Дата: Вторник, 23.04.2019, 21:06 | Сообщение № 22
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
А можно привести пример и, хотя бы минимально объяснить, как было получено такое поведение?


Я как раз вчера вытаскивал из экселевского листа данные без открытия книги в recordset и долго разбирался почему же у меня не хватает первой строки из диапазона. Оказалось, что он ее воспринимает как заголовок столбцов и засовывает в Fields.
 
Ответить
Сообщение
А можно привести пример и, хотя бы минимально объяснить, как было получено такое поведение?


Я как раз вчера вытаскивал из экселевского листа данные без открытия книги в recordset и долго разбирался почему же у меня не хватает первой строки из диапазона. Оказалось, что он ее воспринимает как заголовок столбцов и засовывает в Fields.

Автор - Bamboo
Дата добавления - 23.04.2019 в 21:06
anvg Дата: Вторник, 23.04.2019, 21:14 | Сообщение № 23
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Оказалось, что он ее воспринимает как заголовок столбцов
Это смотря каким провайдером пользоваться. Если OleDb, то можно в Extended Properties указать HDR=NO - и будут условные f1, f2... названиями полей в Recordset. Если же ODBC, то тогда да, принудительно используется первая строка диапазона.
Только в моём случае - это не доказательство. У меня как и должно быть имена полей Id, part - как задумывалось, а не 1 и b, как вы попытались утверждать. Аналогия в данном случае не уместна и доказательством не является.


Сообщение отредактировал anvg - Вторник, 23.04.2019, 21:15
 
Ответить
Сообщение
Оказалось, что он ее воспринимает как заголовок столбцов
Это смотря каким провайдером пользоваться. Если OleDb, то можно в Extended Properties указать HDR=NO - и будут условные f1, f2... названиями полей в Recordset. Если же ODBC, то тогда да, принудительно используется первая строка диапазона.
Только в моём случае - это не доказательство. У меня как и должно быть имена полей Id, part - как задумывалось, а не 1 и b, как вы попытались утверждать. Аналогия в данном случае не уместна и доказательством не является.

Автор - anvg
Дата добавления - 23.04.2019 в 21:14
boa Дата: Вторник, 23.04.2019, 22:43 | Сообщение № 24
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
Код выполнить пробовали или просто посчитали, что я от нечего делать такую строку If Not pRset.EOF Then pRset.MoveNext вставил? Без него Recordset ничего не даёт по pRset(0).Value, кроме ошибки.

я не посчитал, я знаю
попробуйте
[vba]
Код
If Not pRset.EOF Then 'проверяем есть ли вообще записи в рекордсете
    Debug.Print pRset.Fields(0).Value 'печатаем первую запись
    pRset.MoveNext 'переходим к следующей
    Debug.Print pRset.Fields(0).Value  'печатаем вторую
End If
[/vba]

Bamboo, Касаемо заголовков...
если вы используете подключение к таблице Excel, то у вас есть два варианта считывания данных:
первый, С заголовками,
второй БЕЗ - заголовки идут в первую запись рекордсета
я использую вот такую функцию:


С Oracle, насколько я знаю, заголовки в рекордсет не засовываются самостоятельно, это не Excel, поэтому при обращении к серверу Oracle, вы получите заголовки только из названия полей, т.е. fields.name




Сообщение отредактировал boa - Вторник, 23.04.2019, 22:53
 
Ответить
Сообщение
Код выполнить пробовали или просто посчитали, что я от нечего делать такую строку If Not pRset.EOF Then pRset.MoveNext вставил? Без него Recordset ничего не даёт по pRset(0).Value, кроме ошибки.

я не посчитал, я знаю
попробуйте
[vba]
Код
If Not pRset.EOF Then 'проверяем есть ли вообще записи в рекордсете
    Debug.Print pRset.Fields(0).Value 'печатаем первую запись
    pRset.MoveNext 'переходим к следующей
    Debug.Print pRset.Fields(0).Value  'печатаем вторую
End If
[/vba]

Bamboo, Касаемо заголовков...
если вы используете подключение к таблице Excel, то у вас есть два варианта считывания данных:
первый, С заголовками,
второй БЕЗ - заголовки идут в первую запись рекордсета
я использую вот такую функцию:


С Oracle, насколько я знаю, заголовки в рекордсет не засовываются самостоятельно, это не Excel, поэтому при обращении к серверу Oracle, вы получите заголовки только из названия полей, т.е. fields.name

Автор - boa
Дата добавления - 23.04.2019 в 22:43
anvg Дата: Вторник, 23.04.2019, 23:06 | Сообщение № 25
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
я знаю

нет, не знаете. Просто утверждаете. Попробуйте выполнить код или это так сложно? Не отдаст вам Mashup первую строку. :)
 
Ответить
Сообщение
я знаю

нет, не знаете. Просто утверждаете. Попробуйте выполнить код или это так сложно? Не отдаст вам Mashup первую строку. :)

Автор - anvg
Дата добавления - 23.04.2019 в 23:06
boa Дата: Вторник, 23.04.2019, 23:16 | Сообщение № 26
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
anvg, я сегодня делал файл на заказ с рекордсетом. Завтра сюда выложу. Чё зря баталии разводить. Потестируете...

З.Ы. Добавил файлы. Obrazec.xlsb - пример выгрузки из 1С, которую надо структурировать
К сообщению приложен файл: Macros.xlsb (25.5 Kb) · Obrazec.xlsb (10.1 Kb)




Сообщение отредактировал boa - Среда, 24.04.2019, 18:31
 
Ответить
Сообщениеanvg, я сегодня делал файл на заказ с рекордсетом. Завтра сюда выложу. Чё зря баталии разводить. Потестируете...

З.Ы. Добавил файлы. Obrazec.xlsb - пример выгрузки из 1С, которую надо структурировать

Автор - boa
Дата добавления - 23.04.2019 в 23:16
anvg Дата: Вторник, 23.04.2019, 23:26 | Сообщение № 27
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
заказ с рекордсетом

И это будет с oracle, sql server, mysql, access подключением? Так тут-то смысл копья ломать? Там работает без проблем. Вы по теме попробуйте - через adodb получить данные запроса Power Query. Готовый пример в #8
 
Ответить
Сообщение
заказ с рекордсетом

И это будет с oracle, sql server, mysql, access подключением? Так тут-то смысл копья ломать? Там работает без проблем. Вы по теме попробуйте - через adodb получить данные запроса Power Query. Готовый пример в #8

Автор - anvg
Дата добавления - 23.04.2019 в 23:26
nilem Дата: Среда, 24.04.2019, 09:10 | Сообщение № 28
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Попробовал в файле anvg (из №8) растянуть таблицу-источник на 110 строк. В Immediate отображаются только первые 100 записей - пишет, мол, "EOF=True и все такое". У меня записалось: open, a2, a3 ... a100.
В чем причина, есть мысли?
На всякий случай вот файлик, в котором экспериментировал.
К сообщению приложен файл: testConn_2.xlsb (21.3 Kb)


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Среда, 24.04.2019, 10:14
 
Ответить
СообщениеПопробовал в файле anvg (из №8) растянуть таблицу-источник на 110 строк. В Immediate отображаются только первые 100 записей - пишет, мол, "EOF=True и все такое". У меня записалось: open, a2, a3 ... a100.
В чем причина, есть мысли?
На всякий случай вот файлик, в котором экспериментировал.

Автор - nilem
Дата добавления - 24.04.2019 в 09:10
boa Дата: Среда, 24.04.2019, 18:28 | Сообщение № 29
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
через adodb получить данные запроса Power Query
У меня даже мысли такой никогда не возникало. какое-то масло маслянное...
Power Query - не самый мой любимый инструмент в Excel'е. Лично я использую ее только когда мне надо объединить и обработать данные из разных источников(SQL server, Access, Excel, CSV) и то, это уже финальная обработка данных, результат которой выгружается на лист. Но получать данные в PQ для того, что бы их от-туда потом считывать и опять обрабатывать... это за пределами моей фантазии.
Ранее я уже написал
тогда вам PQ не нужна
и предложил использовать Recordset и дальнейшее мое обсуждение касалось рекордсета подключенного к первоисточнику данных(Oracle). Тут Recordset ведет себя адекватно, т.к. можно CursorLocation присвоить adUseClient и дальше перемещаться по нему в начало, в конец, передавать в массив и т.п.

Андрей,
после вашего обращения моего внимания на сообщение №8, я заинтересовался и потестил ваш файлик. Более того, погуглил, но даже на буржуйских форумах не нашел решения, хотя были упоминания датирующиеся еще 14-м годом, где было сказано, что проблема есть и она не решаема. Все, что предлагалось, это выгрузить PQ на лист, потом считать данные с листа в Recordset, а потом лист убить. :) Можно, конечно заголовки в PQ спустить в первую строку и обращаться к столбцам по номерам, но зачем.

Николай,
Ваш файлик так же обрабатывает все записи, вот только на 101-й и 1093-й(я еще добавил строчек), как и в 1-й записи, => "Either BOF or EOF is True or the current record has been deleted." :(


 
Ответить
Сообщение
через adodb получить данные запроса Power Query
У меня даже мысли такой никогда не возникало. какое-то масло маслянное...
Power Query - не самый мой любимый инструмент в Excel'е. Лично я использую ее только когда мне надо объединить и обработать данные из разных источников(SQL server, Access, Excel, CSV) и то, это уже финальная обработка данных, результат которой выгружается на лист. Но получать данные в PQ для того, что бы их от-туда потом считывать и опять обрабатывать... это за пределами моей фантазии.
Ранее я уже написал
тогда вам PQ не нужна
и предложил использовать Recordset и дальнейшее мое обсуждение касалось рекордсета подключенного к первоисточнику данных(Oracle). Тут Recordset ведет себя адекватно, т.к. можно CursorLocation присвоить adUseClient и дальше перемещаться по нему в начало, в конец, передавать в массив и т.п.

Андрей,
после вашего обращения моего внимания на сообщение №8, я заинтересовался и потестил ваш файлик. Более того, погуглил, но даже на буржуйских форумах не нашел решения, хотя были упоминания датирующиеся еще 14-м годом, где было сказано, что проблема есть и она не решаема. Все, что предлагалось, это выгрузить PQ на лист, потом считать данные с листа в Recordset, а потом лист убить. :) Можно, конечно заголовки в PQ спустить в первую строку и обращаться к столбцам по номерам, но зачем.

Николай,
Ваш файлик так же обрабатывает все записи, вот только на 101-й и 1093-й(я еще добавил строчек), как и в 1-й записи, => "Either BOF or EOF is True or the current record has been deleted." :(

Автор - boa
Дата добавления - 24.04.2019 в 18:28
anvg Дата: Среда, 24.04.2019, 22:42 | Сообщение № 30
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
boa, спасибо за исследование. Жаль, что не выходит цветок каменный. В некоторых обстоятельствах было бы удобно. Думал, вдруг у кого есть идеи...
 
Ответить
Сообщениеboa, спасибо за исследование. Жаль, что не выходит цветок каменный. В некоторых обстоятельствах было бы удобно. Думал, вдруг у кого есть идеи...

Автор - anvg
Дата добавления - 24.04.2019 в 22:42
nilem Дата: Четверг, 25.04.2019, 06:18 | Сообщение № 31
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
через adodb получить данные запроса Power Query

Тоже убедился, - задумка интересная, но не рабочая. ADO и PQ "не скрещиваются", хотя и похожи во многом.

...и предложил использовать Recordset

Да, этот вариант проверил, и он пока единственный рабочий.

А вот, например, DAX Studio. Вчера впервые обратил внимание. На примере anvg, DAX нормально создает csv файл.
На больших объемах не пробовали?


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
через adodb получить данные запроса Power Query

Тоже убедился, - задумка интересная, но не рабочая. ADO и PQ "не скрещиваются", хотя и похожи во многом.

...и предложил использовать Recordset

Да, этот вариант проверил, и он пока единственный рабочий.

А вот, например, DAX Studio. Вчера впервые обратил внимание. На примере anvg, DAX нормально создает csv файл.
На больших объемах не пробовали?

Автор - nilem
Дата добавления - 25.04.2019 в 06:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Возможно ли получить результат запроса PowerQuery в массив (Макросы/Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!