Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Другие СУБД Новый топик    Ответить
 Извлечение данных из базы данных в массив напрямую (без Recordset)  [new]
Drekon
Member

Откуда:
Сообщений: 2
Добрый день. Скажите, есть ли какая-нибудь библиотека для работы с базами данных, чтобы эта библиотека позволяла сразу извлекать данные в массив без записи в объект (под объектом я понимаю например Recordset)?

Под массивом я понимаю таблицу в оперативной памяти компьютера.
Под библиотекой я понимаю например: Microsoft Office версия Access database engine Object Library, Microsoft ActiveX Data Objects версия Library.
В обеих этих библиотеках, как я понял, данные нельзя напрямую выгрузить в массив, а сначала надо записать данные в Recordset, а затем из него в массив.

Почему я хочу напрямую: потому что запись в Recordset и извлечение из Recordset очень медленные.

Или до такого еще не додумались программисты и обязательно надо извлечь в объект?

Или может еще что-нибудь посоветуете? Мне нужно извлекать данные с использованием разных языков программирования: VBA, C#.
27 апр 18, 07:47    [21372568]     Ответить | Цитировать Сообщить модератору
 Re: Извлечение данных из базы данных в массив напрямую (без Recordset)  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45930
Объект не содержит данных. Он только обеспечивает интерфейс для их получения. Способен ли он обеспечить получение сразу в массив - вопрос к авторам интерфейса. Oracle или ODBC, например, имеют интерфейсы такого типа. Про ADO я ничего не знаю.
27 апр 18, 13:41    [21373887]     Ответить | Цитировать Сообщить модератору
 Re: Извлечение данных из базы данных в массив напрямую (без Recordset)  [new]
Drekon
Member

Откуда:
Сообщений: 2
Dimitry Sibiryakov, в Recordset более менее быстро записывается, а затем чтение из рекордсета в массив недопустимо долго.
Нужно извлекать данные из экселя.
ODBC может не все данные извлечь, если в столбце и текст и числа.
А у Microsoft ACE OLEDB 12.0 запись делается сначала в Recordset.

Сейчас код такой:
+Макрос
Sub макрос()

Dim DBEngine As DAO.DBEngine, db As DAO.Database, rs As DAO.RecordSet
Dim FN As String, SQLQuery As String, arr()

FN = "C:\Users\User\Desktop\База 3.xlsx"
SQLQuery = "SELECT * FROM [Лист1$]"

Set DBEngine = New DAO.DBEngine
Set db = DBEngine.OpenDatabase(name:=FN, Options:=False, ReadOnly:=True, Connect:="Excel 12.0 Xml;HDR=No;IMEX=1")
Set rs = db.OpenRecordset(name:=SQLQuery, Type:=dbOpenDynaset, Options:=dbReadOnly)
rs.MoveLast
rs.MoveFirst
arr() = rs.GetRows(rs.RecordCount)

End Sub

Хотелось бы так:
arr() = db
27 апр 18, 16:05    [21374588]     Ответить | Цитировать Сообщить модератору
Все форумы / Другие СУБД Ответить