如何从excel中的记录集中获取数据?

时间:2011-11-01 20:23:28

标签: recordset 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;" & _
    "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 个答案:

答案 0 :(得分: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 & ":" & Row).Insert
            .movenext
        loop
    end if
end with

其中row是数据的起点,colOffset是数据的起始列。请注意,此代码不会按照您在问题中指定的确切顺序执行操作(我根据需要插入行而不是预先计算记录数。)

我避免使用.recordcount,因为我发现根据使用的数据库,它不会返回正确的记录数。