记录集的奇怪错误

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 列中的数据类型与 KassenzeichenVorname 相同;两者几乎相同。

'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 的攻击,以避免此问题。