gpt4 book ai didi

sql - 即使有从 VBA SQL 返回的记录,EOF 值也始终为真

转载 作者:行者123 更新时间:2023-12-04 23:37:24 25 4
gpt4 key购买 nike

我正在使用 VBA 查询我的 Access 表并将查询结果写入 excel。

EOF 始终为真,但 BOF 为假——即使记录数为 1 或 14 或 100。什么可能是错误的?我可以看到记录数超过零。获取字符串值中有数据。因此,目标工作表中除了标题之外没有写入任何数据。标题很好。

尝试过的事情 list ,但结果仍然相同:

  • 添加了移动最后和移动第一个命令
  • 尝试了光标位置、光标类型、锁定类型的所有可能组合
  • 尝试执行命令
  • 尝试使用不同的 MS Access 表
  • 尝试过早期和晚期绑定(bind)技术

  • 下面是我的查询,下面的链接是我的记录集在 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

    在调试时,这是我的记录集的样子:

    Debugging

    最佳答案

    建立在 this answer to a similar question , 调用getString在 Recordset 对象上具有将记录集移动到 EOF 的副作用。

    您不调用getString在您的代码中的任何位置,但您已在 rs.getString 上添加了 watch 它作为 Watches 窗口中的最后一个条目可见。如果您有 watch rs.getString并且您在代码中有一个断点 rs是打开的,那么该断点将导致记录集移动到 EOF。

    根据断点发生的位置,这可能不会导致任何问题(例如,如果记录集已经在 EOF),但在这种情况下,它会在您从记录集中复制数据之前将记录集移动到 EOF。

    要解决此问题,请移除 rs.getString 上的 watch 。 .一般来说,让 Watches 窗口中的项目引起副作用可能是个坏主意。您还可以通过在记录集打开的位置不设置任何断点来避免该问题,但完全删除 watch 会更加健壮。
    getString的问题ADO documentation 中没有提到将记录集移动到 EOF。但很容易重现这种效果。

    很少有人在问题中包含他们设置的整个 watch 列表,但我不确定如果没有这些信息,这个问题是否可以回答

    关于sql - 即使有从 VBA SQL 返回的记录,EOF 值也始终为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49342819/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com