Access schliesst nicht mehr nach Datenbankzugriff.
Steel
- datenbank
Nabend!
Ich beiss gleich irgendwo rein.
Seit Tagen schlage ich mit mit dem Problem rum, dass ich mit einer lokalen Acces DB einen Webserver aktualisieren muss. Ich nutze ADODB und dabei entsteht das Problem, dass Access nach einem Add oder Update nicht mehr schliesst. Alles laeuft noch und die Datenbank wird auch geschlossen nur Access muss per Taskmanager gekillt werden (es verschwindet nen Bruchteil einer Sekunde und erscheint sofort wieder).
Ich hab zuerst daran gedacht, dass irgendein ungeschlossenes Objekt noch macht, also hab ich nochmal explizit alles dichtgemacht und zerstoert. Das hat aber nichts gebracht. Auch eine Suche im Netz bringt nichts neues.
umgeschriebener postfaehiger Code:
Public Sub adduserfields()
Dim myFields, myValues
Dim db As DATABASE
Dim lrs As Recordset, rs As ADODB.Recordset
Dim myQuery As String, myUpdateQuery As String
' Query zum Auslesen der lokalen Tabelle (User Tabellenfelder) erstellen.
myQuery = "SELECT * FROM LOKALETABELLE"
' Datenbankfelder festlegen
myFields = Array("LAND", "ID", "FELD")
'lokale Datenbank festlegen, Query oeffnen und Zeiger auf den ersten Datensatz stellen
Set db = CurrentDb
Set lrs = db.OpenRecordset(myQuery)
lrs.MoveFirst
'Connectionobjekt erstellen und Verbindung zum Server erstellen
Set myConn = New ADODB.Connection
myConn.Open "Driver={SQL Server};Server=SERVERNAME;Database=DB;UID=ID;PWD=PWD"
' ein Recordset fuer das Erstellen von Eintraegen und eines fuer Updates von eintraegen anlegen
Set rs = New ADODB.Recordset
Set urs = New ADODB.Recordset
rs.LockType = 3 'aLockOptimistic
rs.CursorType = 1 'adOpenKeyset
' Query zum erfassen der Servereintraege in der Plantabelle festlegen
myQuery = "Select * from WEBTABELLE"
'Recordset mit Plantabelle oeffnen
'rs.Open myQuery, myConn
' Lokalen Query durchlaufen und alle Eintraege auf dem Server einfuegen.
Do While lrs.EOF = False
myValues = Array(lrs("LAND"), lrs("ID"), lrs("FELD"))
rs.Open myQuery, myConn
rs.AddNew myFields, myValues '### wenn diese Zeile ausgefuehrt wird passierts ###
'Eintraege speichern
rs.Update
rs.Close
lrs.MoveNext
Loop
'Eintraege speichern
'rs.Update
' Objekte schliessen und entfernen
'rs.Close
lrs.Close
myConn.Close
Set rs = Nothing
Set lrs = Nothing
Set myConn = Nothing
MsgBox ("Upload complete")
End Sub
Ich hab n bisserl rumgespielt mit dem Recordset rs. Es bleibt sich gleich ob ich es jedesmal oeffne oder nur einmal vor dem while. Ein Insertquery funktioniert. Das will ich aber eigentlich nicht. Wozu nutz' ich denn ADO, wenn ich doch wieder jede Usereingabe auseinandernehmen muss?
Hat irgendwer ne Idee? Im Grunde durchlaufe ich nur die lokale DB und schreibe jeden Datensatz in die WebDB. Und bevor wer fragt: aktuell 1 Datensatz mit ca 20 Feldern. Access 2003 und nen MS SQL Server als Webserver.