我的记录集过早地为每个循环结束我的记录

时间:2013-12-03 21:28:19

标签: sql vb.net for-loop recordset

好的,我有这段代码

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim Connection
    Dim rs1, tempSQL1
    Dim boxes

    Connection = CreateObject("ADODB.Connection")
    rs1 = CreateObject("ADODB.Recordset")

    Connection.Open(CONNECTION STRING HERE)

    tempSQL1 = "SELECT DISTINCT SOMETHING FROM SOMEWHERE"

    rs1.Open(tempSQL1, Connection)

    boxes = rs1.GetRows

    rs1 = Nothing

    Connection = Nothing

    For Each box As String In boxes

        With Me.CustomerSelect.Items
            .Add(pmbformat(box))
        End With

    Next



End Sub

按预期工作,它向下拉框CustomerSelect添加3个项目,一个用于记录集中的每个不同条目。

但是,我想在项目中添加更多信息而不仅仅是盒子编号,所以我将每个循环更改为此

    For Each box As String In boxes

        With Me.CustomerSelect.Items
            .Add(pmbformat(box) & " " & rsQuery("LASTNAME", box) & ", " & rsQuery("FIRSTNAME", box))
        End With

    Next

这是函数rsQuery

Function rsQuery(column As String, PMB As Integer)
    Dim Connection2, rs2, tempSQL2
    Dim myResult

    Connection2 = CreateObject("ADODB.Connection")

    rs2 = CreateObject("ADODB.Recordset")

    Connection2.Open(CONNECTION STRING HERE)

    tempSQL2 = "SELECT " & column & " FROM SOMEWHERE INNER JOIN SOMEWHERE-ELSE on SOMETHING=SOMETHING-ELSE WHERE SOMETHING-ELSE = " & PMB

    MsgBox(tempSQL2)

    rs2.Open(tempSQL2, Connection2)

    myResult = rs2(column).Value

    rs2 = Nothing

    Connection2 = Nothing

    Return myResult


End Function

这个工作一次。它会在选择框中添加一个项目(第一个项目),并包含所有请求的信息。

函数rsQuery中的消息框是一次调试尝试,它显示三次,一次显示第一条记录的姓氏,一次显示第一条记录的名字,一次显示第二条记录的姓氏。但它应该显示6次(第一次和最后一次为3条记录)。此外,由于msgbox确实显示第二条记录的姓氏,你会认为Sub会将该项添加到列表中,并省略名字,但它没有。该列表仅保留第一个选项。

我倾注了这个并且谷歌搜索到了无止境,无法找到解决办法。请帮忙!

感谢您查看此内容,并提前寻求帮助。

P.S。请原谅我掩盖我的sql语句和连接字符串,但我正在为第三方工作,他们不希望公开这些信息。根据我给出的信息,似乎连接字符串和sql语句是正确的。我也省略了函数pmbformat,因为这个函数正常工作。

1 个答案:

答案 0 :(得分:0)

显然第二个PMB没有客户记录,因此导致某种异常停止了处理。添加

If not rstemp.EOF

myResult = rs2(column).Value

它会绕过导致异常的代码。

这总是让我感到很简单的事情。 : - )