我试图通过SQL在Access数据库中搜索字符串。
方法1效果很好,但方法2让我很头疼。
即将发生的错误是
ADODB.Recordset Fehler" 800a0bcd' BOF或EOF为True,或者当前记录已被删除。请求的操作需要当前记录。
我实际上试图通过If KassenzeichenDB.EOF Then
来避免此错误。但错误发生在VornameString = Vorname.getString
行中。
我只是不知道错误意味着什么。表格列中的数据类型与Kassenzeichen
和Vorname
相同;两者几乎相同。
'method 1
Set KassenzeichenDB = Conn.Execute("SELECT Kassenzeichen FROM Kassenzeichen WHERE (Kassenzeichen='" & Eingabe & "') ")
'method 2
Set KassenzeichenDB = Conn.Execute("SELECT Kassenzeichen FROM Kassenzeichen WHERE (Vorname='" & Eingabe & "') ")
If KassenzeichenDB.EOF Then
response.write "Empty"
Else
Do While Not KassenzeichenDB.EOF
KassenzeichenString = KassenzeichenDB.Fields(0)
Set Vorname = Conn.Execute("SELECT Vorname FROM Kassenzeichen WHERE Kassenzeichen LIKE '" & KassenzeichenString & "'")
VornameString = Vorname.getString
Set Nachname = Conn.Execute("SELECT Nachname FROM Kassenzeichen WHERE Kassenzeichen LIKE '" & KassenzeichenString & "'")
NachnameString = Nachname.getString
response.write KassenzeichenString & " | " & NachnameString & ", " & VornameString & "</b></br>"
KassenzeichenDB.MoveNext
Loop
End If
答案 0 :(得分:1)
您已查看data.frames
看起来不错,但错误是KassenzeichenDB.EOF
的结果。这可能意味着VornameString = Vorname.getString
是真的,所以你可能想检查一下。
针对您的代码的其他一些建议:尝试选择您需要的所有列。例如......
Vorname .EOF
我还必须让您知道您的代码容易受到SQL injection攻击,所以如果您的变量KassenzeichenString = KassenzeichenDB.Fields(0)
Set rs = Conn.Execute("SELECT Vorname, Nachname FROM Kassenzeichen WHERE Kassenzeichen LIKE '"&KassenzeichenString&"'")
If rs.EOF Then
response.write "Vorname/Nachname Empty"
Else
VornameString = rs("Vorname")
NachnameString = rs("Nachname")
response.write KassenzeichenString & " | " & NachnameString & ", " & VornameString & "</b></br>"
End If
KassenzeichenDB.MoveNext
或Eingabe
来自用户输入或其他不受信任,您应该阅读源。我建议您学习如何构建parameterized queries using ADO以避免此问题。