Как получить данные из набора записей в Excel?

#recordset #excel-2010

#набор записей #excel-2010

Вопрос:

У меня есть следующий код:

 Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Dim AppPath As String
Set cn = CreateObject("ADODB.Connection")
AppPath = Application.ActiveWorkbook.Path

Set rs = CreateObject("ADODB.RecordSet")

strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" amp; _
    "Data Source=" amp; AppPath amp; "Masterlist_Current_copy.accdb;"

strSql = "SELECT [Neptune Number],[Description],[Manufacturer],[Manufacturer P/N] FROM [All Components];"
cn.Open strConnection
Set rs = cn.Execute(strSql)

'Need Code here to get Info out of recordset
  

Я пытаюсь получить информацию из набора записей, в который сбрасывается результат запроса. Я пытаюсь выяснить, как запросить набор записей и получить количество строк с определенным значением в поле «Число Нептуна». Затем я вставлю правильное количество строк в изменяемый рабочий лист. После этого мне нужно получить данные для этого значения и вставить их в рабочий лист.

Примечание: мне все равно, используется ли набор записей, datatable или что-то еще, мне просто нужно иметь возможность делать то, что я описал выше. Пожалуйста, покажите код.

Ответ №1:

Самый простой способ получить то, о чем вы, я думаю, просите, — это изменить свой оператор SQL, изменив

 strSql = "SELECT [Neptune Number],[Description],[Manufacturer],[Manufacturer P/N] FROM [All Components];"
  

Для

 strSql = "SELECT [Neptune Number],[Description],[Manufacturer],[Manufacturer P/N] FROM [All Components] WHERE [Neptune Number] = 'Specific Value' ;"
  

Это заставит sql-запрос возвращать только нужные вам записи. этот .find метод можно использовать для фильтрации набора записей, но я избегал его использования в данном случае, поскольку проще просто запрашивать у БД только ту информацию, которая вам нужна.

для обработки набора записей вы можете использовать следующее

 with rs
    'will skip further processing if no records returned
    if not (.bof and .eof) then
        'assuming you do not need the headers
        'loop through the recordset
        do while not .eof
            for i = 0 to .fields.count -1
                'assuming the active sheet is where you want the data
                cells(row, i   colOffset) = .fields(i).value
            next
            Rows(Row amp; ":" amp; Row).Insert
            .movenext
        loop
    end if
end with
  

Где строка — начальная точка ваших данных, а colOffset — начальный столбец ваших данных. Обратите внимание, что этот код не выполняет действия в точном порядке, указанном вами в вашем вопросе (я вставляю строки по мере необходимости, а не вычисляю количество записей заранее.)

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