记录集的奇怪错误
Strange Error with a Recordset
我正在尝试通过 SQL 在 Access 数据库中搜索字符串。
方法一很好用,但是方法二让我头疼。
即将发生的错误是
ADODB.Recordset Fehler "800a0bcd' Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
我实际上是想通过 If KassenzeichenDB.EOF Then
来避免这个错误。但是错误发生在行 VornameString = Vorname.getString
.
我只是不知道错误是什么意思。 table 列中的数据类型与 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
您检查了 KassenzeichenDB.EOF
,看起来不错,但错误是由于 VornameString = Vorname.getString
造成的。这可能意味着 Vorname .EOF
是正确的,因此您可能需要检查一下。
针对您的代码的其他一些建议:尝试选择您需要的所有列。例如...
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
我还必须让您知道您的代码容易受到 SQL injection attacks, so you should read up on that if your variables Eingabe
or KassenzeichenString
come from user input or other untrusted sources. I recommend you learn how to construct parameterized queries using ADO 的攻击,以避免此问题。
我正在尝试通过 SQL 在 Access 数据库中搜索字符串。
方法一很好用,但是方法二让我头疼。
即将发生的错误是
ADODB.Recordset Fehler "800a0bcd' Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
我实际上是想通过 If KassenzeichenDB.EOF Then
来避免这个错误。但是错误发生在行 VornameString = Vorname.getString
.
我只是不知道错误是什么意思。 table 列中的数据类型与 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
您检查了 KassenzeichenDB.EOF
,看起来不错,但错误是由于 VornameString = Vorname.getString
造成的。这可能意味着 Vorname .EOF
是正确的,因此您可能需要检查一下。
针对您的代码的其他一些建议:尝试选择您需要的所有列。例如...
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
我还必须让您知道您的代码容易受到 SQL injection attacks, so you should read up on that if your variables Eingabe
or KassenzeichenString
come from user input or other untrusted sources. I recommend you learn how to construct parameterized queries using ADO 的攻击,以避免此问题。