Hallo,
ich habe ein Problem. Ich will mit DAO ein Recordset füllen, die Daten ändern und sie in die Datenbank mit Update schreiben. Dazu suche ich erst den Datensatz, verändere ihn und schreibe ihn zurück. Bei der suche hängt es schon, dabei nehme ich die suche die schon funktioniert und füge praktisch nur den änderungspart an.
Sub aendern()
Dim db As DAO.Database
Dim db_rs As DAO.Recordset
Dim db_rs_suche As DAO.Recordset
Dim sqlQuery As DAO.QueryDef
Dim db_name As String
Dim suchPara As String
Dim i As Integer
Dim j As Integer
tbl = ThisWorkbook.Sheets("DMS").cboxTbl.Value
tbl = Right(tbl, Len(tbl) - InStrRev(tbl, " "))
db_name = ThisWorkbook.Path + "\" + "FestnetzDB"
Set db = DAO.OpenDatabase(db_name)
Set db_rs = db.OpenRecordset(tbl, dbOpenDynaset)
With ActiveWorkbook.Sheets("DMS")
For i = 3 To 30
If .Cells(3, i).Value <> "" And .Cells(4, i).Value <> "" Then
suchPara = suchPara & .Cells(3, i).Value & " "
If .Cells(4, i).Value <> "" Then
If suchPara = "ID " Then
suchPara = suchPara & "= " & .Cells(4, i).Value & " AND "
Else
suchPara = suchPara & "LIKE '*" & .Cells(4, i).Value & "*' AND "
End If
End If
End If
Next
End With
suchPara = Left(suchPara, Len(suchPara) - 5)
Set db_rs_suche = db_rs.OpenRecordset
For Each existQuery In db.QueryDefs
If existQuery.Name = "spezSuche1" Then
db.QueryDefs.Delete "spezSuche1"
Exit For
End If
Next existQuery
Set sqlQuery = db.CreateQueryDef("spezSuche1", "SELECT * FROM " & tbl & " WHERE " & suchPara)
Set db_rs_suche = sqlQuery.OpenRecordset()
MsgBox db_rs_suche(2)
'Bis hier stimmt er komplett überein mit der normalen suche also "SELECT * FROM tblMa WHERE ID = 2" o.ä.
'und dort klappt es auch alles. das recordset in in der suche normal gefüllt und muss nur ausgelesen werden
db_rs_suche.MoveFirst
Do While Not db_rs_suche.EOF
db_rs_suche.Edit
db_rs_suche!Name = Sheets("DMS").Range("D4")
db_rs_suche!Nachname = Sheets("DMS").Range("E4")
db_rs_suche!A_kennung = Sheets("DMS").Range("F4")
db_rs_suche!Email = Sheets("DMS").Range("G4")
db_rs_suche!C_kennung = Sheets("DMS").Range("H4")
db_rs_suche!Ma_nr = Sheets("DMS").Range("I4")
db_rs_suche!Vp_nr = Sheets("DMS").Range("J4")
db_rs_suche!Vo_nr = Sheets("DMS").Range("K4")
db_rs_suche!Segment = Sheets("DMS").Range("L4")
db_rs_suche!Teamleiter = Sheets("DMS").Range("M4")
db_rs_suche!Rechte = Sheets("DMS").Range("N4")
db_rs_suche.Update
Loop
'close the objects
db.QueryDefs.Delete "spezSuche1"
db_rs_suche.Close
db_rs.Close
sqlQuery.Close
db.Close
'destroy the variables
Set db_rs = Nothing
Set db_rs_suche = Nothing
Set sqlQuery = Nothing
Set db = Nothing
End Sub
die Fehlermeldung die hier erscheint sobald ich auf das db_rs_suche zugreifen möchtge lautet: "Kein aktueller Datensatz"
|