我的任务是解决以下错误。我没有使用asp的经验并寻求一些指导。这是错误:
ADODB.Field错误' 800a0bcd' BOF或EOF为True,或者当前记录已被删除。请求的操作需要当前记录。 /include/asp/classTools.asp,line 700
我找到了这个课程并将其打开到违规行和环绕子程序并且具有以下内容:
Private Sub LookUpTheCurrentUsersEmployeeID_AndName()
Dim User
User = Request.ServerVariables("AUTH_USER")
User = Right(User, (Len(User) - InStrRev(User,"\") ) )
Execute_SQL("SELECT User_ID, FirstName, LastName, EmailAddr FROM SupportDesk WHERE UserName = '" & User & "'")
If xRS.RecordCount = 0 Then
EmployeeID_OfCurrentUser = 0
EmployeeFullName = User
EmployeeEmailAddress = "unknownEmailAddress"
Else
EmployeeID_OfCurrentUser = xRS("User_ID")
EmployeeFullName = xRS("FirstName") & " " & xRS("LastName")
EmployeeEmailAddress = xRS("EmailAddr")
End If
bLookedUpTheID_AndName = True
End Sub
我查看表支持,发现没有空记录。我还应该看看什么? 这个子程序的逻辑是否合理?
答案 0 :(得分:2)
测试
If xRS.EOF Then
而不是
If xRS.RecordCount = 0 Then
因为。Recordcount对于&#34可能为-1;没有可用的计数"如果记录集只是转发。
证据:
>> Set c = CreateObject("ADODB.Connection")
>> c.Open "dsn=NWind"
>> Set r = c.Execute("Select * From Employees Where EmployeeId=1")
>> WScript.Echo r.Recordcount, r("EmployeeId")
>> Set r = c.Execute("Select * From Employees Where EmployeeId=0")
>> WScript.Echo r.Recordcount
>> WScript.Echo r("EmployeeId")
>>
-1 1 <------- non-empty rs; recordcount <> 0!
-1 <------- empty rs; recordcount <> 0! ---------> oramel's error:
Error Number: -2147352571
Error Description: Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
由于尝试访问空记录集的字段而引发给定错误;因为与0的比较,未检测到问题。
更新wrt评论:
假设:
EmployeeID_OfCurrentUser = xRS("User_ID")
(因为xRS为空 -
见证据)WTF
LookUpTheCurrentUsersEmployeeID_AndName
If 0 = EmployeeID_OfCurrentUser Then
' handle Employee not found
Else
' handle Employee found
End If
事实:
结论:
如果.RecordCount
,将会到达错误行处理:
检查xRS.EOF以确保在访问其字段时具有非空记录集 在Else条款中。
尽管Lankymart首先怀疑,如果假设4成立,对数据库中尚未(尚未)用户的查询将得到正确处理。
尽管Lankymart的第二个疑问,.RecordCount始终为-1是无害的,因为而不是.RecordCount,真正相关的前提条件是#RS;是xRS.EOF&#34;保护对记录集字段的访问。
可能的原因:
对数据库/连接配置的更改使Forward Cursors成为默认值。
巫毒:
你看着桌子支持&#39;但是你的SQL指的是表SupportDesk。也许你的 问题是由混合表名引起的。