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

Вход

Регистрация

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

 

= Мир MS Excel/Ускорение вставки данных ответа SQL запроса - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Ускорение вставки данных ответа SQL запроса
TD_MElec Дата: Вторник, 05.10.2021, 13:37 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 73
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
Всем привет.

имеется подключение excel к SQL, которое прекрасно работает, но есть один недостаток, при получении большого ответа (200к+ строк), время на вставку этого ответа, значительно большое (от 5 минут)
Код вставки, который я использую - циклы:
[vba]
Код
Set oConn = CreateObject("ADODB.Connection")
Set oRS = CreateObject("ADODB.Recordset")
oConn.Open ******** 'какое- то подключение

oRS.Open "SELECT * FROM Table", oConn 'какой-то запрос

' -- вставка шапки таблицы
nCol = 1
For Each fld In oRS.Fields
Cells(1, nCol).Value = fld.Name
nCol = nCol + 1
Next

'-- вставка тела таблицы
oRS.MoveFirst
nRow = 2
Do Until oRS.EOF
nCol = 1
For Each fld In oRS.Fields
Cells(nRow, nCol).Value = fld.Value
nCol = nCol + 1
Next
oRS.MoveNext
nRow = nRow + 1
Loop
oRS.Close
[/vba]
Возможно ли вставлять не перебором, а как нибудь типа:
Range('известный диапазон').value = oRS.Полный_ответ.value
Но для этого мне надо сначала получить данные о размерах полученного ответа...


Сообщение отредактировал TD_MElec - Вторник, 05.10.2021, 13:48
 
Ответить
СообщениеВсем привет.

имеется подключение excel к SQL, которое прекрасно работает, но есть один недостаток, при получении большого ответа (200к+ строк), время на вставку этого ответа, значительно большое (от 5 минут)
Код вставки, который я использую - циклы:
[vba]
Код
Set oConn = CreateObject("ADODB.Connection")
Set oRS = CreateObject("ADODB.Recordset")
oConn.Open ******** 'какое- то подключение

oRS.Open "SELECT * FROM Table", oConn 'какой-то запрос

' -- вставка шапки таблицы
nCol = 1
For Each fld In oRS.Fields
Cells(1, nCol).Value = fld.Name
nCol = nCol + 1
Next

'-- вставка тела таблицы
oRS.MoveFirst
nRow = 2
Do Until oRS.EOF
nCol = 1
For Each fld In oRS.Fields
Cells(nRow, nCol).Value = fld.Value
nCol = nCol + 1
Next
oRS.MoveNext
nRow = nRow + 1
Loop
oRS.Close
[/vba]
Возможно ли вставлять не перебором, а как нибудь типа:
Range('известный диапазон').value = oRS.Полный_ответ.value
Но для этого мне надо сначала получить данные о размерах полученного ответа...

Автор - TD_MElec
Дата добавления - 05.10.2021 в 13:37
R_Dmitry Дата: Вторник, 05.10.2021, 14:10 | Сообщение № 2
Группа: Друзья
Ранг: Участник
Сообщений: 74
Репутация: 34 ±
Замечаний: 0% ±

2010
заменить этот кусок кода
[vba]
Код
oRS.MoveFirst
nRow = 2
Do Until oRS.EOF
nCol = 1
For Each fld In oRS.Fields
Cells(nRow, nCol).Value = fld.Value
nCol = nCol + 1
Next
oRS.MoveNext
nRow = nRow + 1
Loop
[/vba]
на этот
[vba]
Код
cells(2,1).copyfromrecordset oRs
[/vba]


{Skype : RDG_Dmitry} Если программа тебе понятна,значит она уже устарела

Сообщение отредактировал R_Dmitry - Вторник, 05.10.2021, 14:11
 
Ответить
Сообщениезаменить этот кусок кода
[vba]
Код
oRS.MoveFirst
nRow = 2
Do Until oRS.EOF
nCol = 1
For Each fld In oRS.Fields
Cells(nRow, nCol).Value = fld.Value
nCol = nCol + 1
Next
oRS.MoveNext
nRow = nRow + 1
Loop
[/vba]
на этот
[vba]
Код
cells(2,1).copyfromrecordset oRs
[/vba]

Автор - R_Dmitry
Дата добавления - 05.10.2021 в 14:10
TD_MElec Дата: Вторник, 05.10.2021, 15:06 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 73
Репутация: 1 ±
Замечаний: 0% ±

Excel 2019
Великолепно!!!

Большое спасибо!
 
Ответить
СообщениеВеликолепно!!!

Большое спасибо!

Автор - TD_MElec
Дата добавления - 05.10.2021 в 15:06
  • Страница 1 из 1
  • 1
Поиск:

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