# VBA ADO - Problem mit dem Recordset



## TaylorDorton (10. August 2005)

Hallo,

nun Ihr habt mich alle überzeugt, 
DAO zu vergessen und mich auf ADO zu Konzentrieren.
Der Vorteil wird mir so langsam aber sicher klar.
Nun bin ich inzwischen so weit, eine Connection zu erstellen,
und auch tatsächlich zu Verstehen was ich dort tue.
Ist mir Lieber als blind zu Kopieren.

Jetzt tue ich mich aber ein wenig schwer mit dem Recordset,
ich befürchte das dort der Fehler liegt und mein Recordset leer ist.
Vielleicht könnt Ihr mir noch einmal Helfen und mir erläutern,
warum meine Variable strEintrag die einen Eintrag im Recordset darstellt leer ist?

Greetz Taylor


```
Sub DBConnection()
    Dim con As New ADODB.Connection
    Dim RS As ADODB.Recordset
    Dim strEintrag As String
    Dim conStr As String

'Verbindung Erstellen
    conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=M:\DATEN\test\db1.mdb"
    con.Open conStr
    
'Recordset erstellen & Zugriff auf Tabelle
    Set RS = New ADODB.Recordset
    RS.Open "TVH", con, adOpenDynamic, adLockOptimistic
    
' Problemstelle?!
    RS.MoveFirst
    RS!VO.Value = strEintrag
    MsgBox strEintrag
        
End Sub
```


----------



## Alex F. (10. August 2005)

füge mal folgende funktion ein 


```
Public function ResIsEmpty (rs as adodb.recordset) as boolean
ResIsEmpty = (rs.eof and rs.bof) 
end function
```

und vor deinem Rs.moveFirst 

```
if resisempty (rs) = false then
RS.MoveFirst
    RS!VO.Value = strEintrag
    MsgBox strEintrag
endif
```

gruß bb


----------



## JensG (10. August 2005)

Hallo,

so geschrieben sieht das doch besser aus um ein Recordset zu öffnen 

'Recordset erstellen & Zugriff auf Tabelle
    Set RS = New ADODB.Recordset

With RS 
   .ActiveConnection = con
   .CursorLocation = adUseClient
   .CursorType = adOpenStatic
   .LockType = adLockOptimistic
   .Source = "THV"
   .Open
End With

aber hier liegt nicht das Problem,
sondern hier:

RS!VO.Value = strEintrag
    MsgBox strEintrag

Der String strEintrag ist ja leer und diesen weißt
du der Recordsetspalte VO zu, demzufolge ist diese
dann auch leer. In der Datenbank wird das aber
erst nach einem RS.Update übernommen.

Ich denke das ganze ist nur nen Tipfehler und sollte
so heißen.

strEintrag = RS!VO.Value
    MsgBox strEintrag

Aber brainbyte hat auch einen sehr hilfreichen Tip für dich 
gegeben denn du musst immer prüfen ob rs.eof oder rs.bof nicht True
sind.

Jens


----------



## TaylorDorton (11. August 2005)

Danke,

bin gestern als ich wieder Zuhause war, 
beim drüberschauen, selbst drauf gekommen.
Natürlich, habe ich mich dann vor dem Spiegel gestellt und
mich selbst Ausgelacht ;-)

War tatsächlich ein Dreher.

greetz Taylor


----------

