Vim*_*mal 4 sql vba excel-vba eof access
我正在使用VBA查询访问表并在excel中编写查询结果.
EOF始终为真,但BOF为假 - 即使记录数为1或14或100.可能会出错?我可以看到记录数超过零.get string值包含数据.因此,除了标题之外,目标表中没有写入数据.标题很好.
尝试的事项列表但结果仍然相同:
下面是我的查询和下面的链接是我的记录集如何看待SQL打开语句.
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
Run Code Online (Sandbox Code Playgroud)
调试时,我的记录集如下:
在对类似问题的这个答案的基础上,调用getStringRecordset对象具有将记录集移动到EOF的副作用.
您不需要getString在代码中的任何位置调用,但是您添加了一个手表,rs.getString该手表作为Watches窗口中的最后一个条目可见.如果您有一个监视rs.getString并且代码中有一个断点,rs那么该断点将使记录集移动到EOF.
根据断点发生的位置,这可能不会导致任何问题(例如,如果记录集已经处于EOF),但在这种情况下,它会在您从记录集复制数据之前将记录集移动到EOF.
要解决此问题,请取消手表rs.getString.一般来说,在Watches窗口中有项目会产生副作用,这可能是一个坏主意.你也可以通过没有记录集打开的任何断点但完全删除手表来避免这个问题.
ADO文档中getString未提及将记录集移动到EOF 的问题,但很容易重现此效果.
有人将他们在问题中设置的整个手表列表包括在内并不常见,但我不确定这个问题是否在没有这些信息的情况下是可以回答的