Как получить данные из набора записей в Excel? - PullRequest
0 голосов
/ 02 ноября 2011

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

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;" & _
    "Data Source=" & AppPath & "\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

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

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

1 Ответ

1 голос
/ 04 ноября 2011

Самый простой способ получить то, чего вы, как мне кажется, вы просите, - это изменить свой оператор 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 & ":" & Row).Insert
            .movenext
        loop
    end if
end with

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

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

...