【发布时间】:2018-03-17 23:09:22
【问题描述】:
我正在使用 VBA 查询我的访问表并将查询结果写入 excel。
EOF 始终为真,但 BOF 为假——即使记录数为 1 或 14 或 100。可能会出现什么问题?我可以看到记录数超过零。获取字符串值中有数据。因此,目标工作表中除了标题之外没有写入任何数据。标题很好。
尝试过但结果仍然相同的列表:
- 添加了移动最后和移动第一个命令
- 尝试了光标位置、光标类型、锁定类型的所有可能组合
- 尝试使用执行命令
- 尝试使用不同的 MS 访问表
- 尝试过早期和晚期绑定技术
下面是我的查询,下面的链接是我的记录集在 SQL open 语句后的样子。
Const MyConn = "Access DB location"
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Set con = New ADODB.Connection
With con
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open MyConn
End With
QuerySql = "SELECT * FROM Store_Location"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open QuerySql, con, adOpenStatic, adLockReadOnly, adCmdUnknown
rs.MoveLast
rs.MoveFirst
i = 0
For i = 0 To rs.Fields.Count - 1
Sheets("Search_Temp").Cells(1, i + 1) = rs.Fields(i).Name
Next i
Range("A2").CopyFromRecordset rs
rs.Close
Set rs = Nothing
con.Close
Set con = Nothing
调试时这是我的记录集的样子:
【问题讨论】:
-
查看
rs时您在哪一行? -
ps。您已经为标题指定了一张工作表,但没有为记录指定。即尝试包括:
Sheets("Search_Temp").Range("A2").CopyFromRecordset rs -
我在 rs.MoveFirst
-
嗯好的;为什么你有
rs.MoveLast和rs.MoveFirst?我假设那是为了获得调试记录;是吗/您是否尝试过在不包含这些命令的情况下运行该命令? (无论如何应该可以工作,但看不到任何明显的错误......)。 -
是的,我根据某个论坛的输入添加了先移动和后移动的那些。因为有人建议使用该命令将有助于重新计算完整的记录计数,并且位置将被纠正。唯一改变的是获取字符串值,因为它指向第一条和最后一条记录。没有其他变化