Tweed
Tweed

Reputation: 15

Strange Error with a Recordset

I'm trying to search for a string in an Access database via SQL.

It works fine with method 1 but method 2 is giving me a headache.

The upcoming error is

ADODB.Recordset Fehler "800a0bcd' Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

I'm actually trying to avoid this error by If KassenzeichenDB.EOF Then. But the error occurs in the line VornameString = Vorname.getString.

I just don't know, what the error means. The data type in the table column is the same for Kassenzeichen and Vorname; both are almost identical.

'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

Upvotes: 1

Views: 416

Answers (1)

BoffinBrain
BoffinBrain

Reputation: 6525

You've checked KassenzeichenDB.EOF which looks fine, but the error occurs as a result of VornameString = Vorname.getString. That might imply that Vorname .EOF is true, so you might want to check that.

A couple of other recommendations for your code: try selecting all the columns you need. For example...

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

I must also make you aware that your code is vulnerable to 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 to avoid this issue.

Upvotes: 1

Related Questions