VB6语法问题,“无当前记录”错误。

4

我正在使用SQL Server 2005编写VB6应用程序,这是我的当前代码:

Dim Sqlstring As String
Dim rstCurrentTicket As Recordset

Sqlstring = "Select SubmiterName, LastViewDate, Department, Description, Urgency, SubmitDate, ResolvedDate from TroubleTickets where Title ='" + Trim(TicketComboBox.Text) + "'"
Set rstCurrentTicket = cnnSel.OpenRecordset(Sqlstring)


NameText.Text = rstCurrentTicket!SubmiterName
DeptText.Text = rstCurrentTicket!Department
Me.DescriptionText = rstCurrentTicket!Description
Me.UrgencyText = rstCurrentTicket!Urgency

当我运行此代码时,我收到一个错误代码,显示:

"运行时错误:'3021'" "没有当前记录"

并且强调了以下行的代码:

NameText.Text = rstCurrentTicket!SubmiterName

有什么建议可以解决这个问题吗?

5
你已经验证了你的SQL语句是否真的返回结果了吗? - Anthony Grist
2个回答

9

您的记录集没有结果。 您可以按以下方式检查:

If Not rstCurrentTicket.EOF Then
    NameText.Text = rstCurrentTicket!SubmiterName
    DeptText.Text = rstCurrentTicket!Department
    Me.DescriptionText = rstCurrentTicket!Description
    Me.UrgencyText = rstCurrentTicket!Urgency
End If

EOF = 文件结束 = 已达到记录集的末尾。


4

Keith说得很对,但我想多提供一些细节。

对于ADO和DAO,你有一个文件开始标记(BOF)和一个文件结束标记(EOF)。记录返回的格式如下:

[BOF]
[Record one] <-
[Record two]
...
[Record n]
[EOF]

箭头指向光标所在位置。光标指向返回的记录集中的哪个记录。
当没有记录返回时,您会得到这个结果。
[BOF]
[EOF]

因此,如果两个标志都设置了,则没有记录。如果EOF被设置,要么您没有记录,要么您已经移动到最后一条记录之后。(通过此命令将光标移动到下一条记录。)

rstCurrentTicket.MoveNext

你可以通过以下方式进行检查:
If (rstCurrentTicket.EOF and rstCurrentTicket.BOF) Then
     msgbox "There were no Trouble Tickets found."

Else
    'Do something here.

End If

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接