#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
, потому что я нахожу, что в зависимости от используемой базы данных она не вернет правильное количество записей.