【问题标题】:EOF returns true even if i have a populated recordset at the first pos in ADO即使我在 ADO 的第一个位置有填充的记录集,EOF 也会返回 true
【发布时间】:2013-09-11 14:11:00
【问题描述】:

我试图从记录集中的列中获取行,然后将它们插入一个简单明了的表中。

记录集已填充,我使用 .MoveFirst 从 rs 的开头开始,但我仍然在一开始就得到了 EOF,它跳出了 do while..

我有一个类似的功能正在工作,但这个功能由于某种原因无法工作。

我不知道为什么……或者如何解决这个问题。欢迎任何见解!

当前代码~

Public Function makeSäljare()
'Create rs
Dim rsData As ADODB.Recordset
Set rsData = New ADODB.Recordset
Dim sql As String

'Select what should be included in the rs.
rsData.Open "SELECT Forhandler, Selger FROM data", _
CurrentProject.Connection, adOpenDynamic, adLockOptimistic
rsData.MoveFirst


MsgBox rsData.GetString

'Manipulate each row of the result column.
Do While Not rsData.EOF


sql = "INSERT INTO säljare (Partner_Namn, Namn ) VALUES ('" & rsData!forhandler & "','" & rsData!Selger & "');"
MsgBox sql
'DoCmd.SetWarnings (False)
DoCmd.RunSQL (sql)
'DoCmd.SetWarnings (True)


rsData.MoveNext
'If rsData.EOF Then Exit Do

Loop

rsData.Close

End Function

它在 Do While Not rsData.EOF.. 处跳出。

【问题讨论】:

    标签: ms-access vba ado


    【解决方案1】:

    GetString 将记录集留在EOFMoveFirstDo While Not rsData.EOF 之前再次出现

    rsData.MoveFirst
    MsgBox rsData.GetString
    rsData.MoveFirst ' <-- add this
    'Manipulate each row of the result column.
    Do While Not rsData.EOF
    

    【讨论】:

    • 谢谢 :) 现在完美运行。
    【解决方案2】:

    我没有尝试您的代码,但这在逻辑上意味着记录集是空的。 仔细检查您在数据库上执行的查询是否正确。

    在 Access 中,使用 DAO 代替 ADO 并尝试以下操作:

    Set db = CurrentDb
    set rsData = db.OpenRecordset("SELECT Forhandler, Selger FROM data", dbOpenDynaset) 
    

    【讨论】:

    • 这是 HansUp 提到的问题,当我使用 .getString 方法检查我的 rs 中是否有东西时,它会在我调用 .MoveFirst 后将 rs 置于 EOF。我的一个愚蠢的错误,呵呵,谢谢你的投入!
    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多