Probleme mit UPDATE

Ich möchte die Daten einer MSSQL-Datenbank in eine MySQL DB im Internet schreiben. Dazu habe ich folgendes Script geschrieben. Es kommt jedoch immer „Der Vorgang ist für ein geschlossenes Objekt nicht zugelassen“.

Bin für jede Hilfe dankbar!

Private Sub Form_Load()

'Connection MSSQL Datenbank
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.CursorLocation = adUseClient
conn.Open „Provider=SQLOLEDB.1:stuck_out_tongue_winking_eye:ersist Security Info=False;User ID=sa;Initial Catalog=kam;Data Source=BWEICHEL“

'Connection MySQL Datenbank
Dim conn2 As ADODB.Connection
Set conn2 = New ADODB.Connection
conn2.CursorLocation = adUseClient
conn2.Open „Provider=MSDASQL.1;DSN=kps-mysql“

'Connection MSSQL Datenbank
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Source = „SELECT * FROM artstat“
rst.ActiveConnection = conn
rst.Open

'Connection MySQL Datenbank
Dim rst2 As ADODB.Recordset
Set rst2 = New ADODB.Recordset
'rst2.Source = „SELECT * FROM artikel“
'rst2.ActiveConnection = conn2
'rst2.Open

'Schleife MSSQL Datenbank
'If rst.Supports(adUpdateBatch) Then
While Not rst.EOF

If IsNull(rst.Fields(„Bestand“)) Then
bestand = rst.Fields(„Bestand“).Value = 0
artnum = rst.Fields(„Artikelnum“)
rst2.Open „UPDATE artikel SET bestand = ‚bestand‘ WHERE artnr = ‚artnum‘“, conn2, adOpenStatic, adLockOptimistic
'rst2.Fields(„bestand“).Value = 0
'rst2.Update
Else
List1.AddItem rst.Fields(„Artikelnum“)
bestand = rst.Fields(„Bestand“)
artnum = rst.Fields(„Artikelnum“)
rst2.Open „UPDATE artikel SET bestand = ‚bestand‘ WHERE artnr = ‚artnum‘“, conn2, adOpenStatic, adLockOptimistic
List1.AddItem ("UPDATE artikel SET bestand = " & bestand & " WHERE artnr = " & artnum)
'rst2.Fields(„bestand“).Value = rst.Fields(„Bestand“)
'rst2.Update
End If

rst.MoveNext

Wend

If MsgBox("Sie haben " & lngCount & " Artikel aktualisiert. Wollen Sie " & _
„die Änderungen übernehmen?“, vbYesNo Or vbQuestion) = vbYes Then
rst2.UpdateBatch
Else
rst2.CancelBatch
End If

'Else
'MsgBox „Der verwendete Provider unterstützt keine Stapelaktualisierungen“
'End If

rst.Close
'rst2.Close

End Sub

Wie oben erwähnt, nur umgekehrt. Hier ist ein RecordSet nicht oder erfolglos mit der Methode Open geöffnet worden. Zur Fehlersuche mal Debug.Pring rstx.State einbauen.

~stefan

Ich möchte die Daten einer MSSQL-Datenbank in eine MySQL DB im
Internet schreiben. Dazu habe ich folgendes Script
geschrieben. Es kommt jedoch immer „Der Vorgang ist für ein
geschlossenes Objekt nicht zugelassen“.

Bin für jede Hilfe dankbar!

Hab mein Update nun mit der Execute-Anweisung gemacht.
Allerdings habe ich noch ein Problem.
Die Daten lese ich aus einer MSSQL Datenbank aus und möchte diese mit einer anderen Datenbank abgleichen.
Dazu verwende ich den UPDATE-Befehl.

conn.Execute ("UPDATE * FROM artikel WHERE artnr = " & artnr)

Wenn er den Datensatz nicht findet bekomme ich eine Fehlermeldung. Daraufhin habe ich eine SELECT-Abfrage geschrieben und die Datenbank zuerst nach dem Datensatz durchsucht. Aber da bekomme ich ebenfall nur die Fehlermeldung das er den gewünschten Datensatz in der Datenbank nicht finden konnte.

Wie um Himmels willen, kann ich dann erreichen, daß das Programm wenn es den Datensatz nicht findet einfach in den nächsten springen soll?

Danke schonmal im Vorraus!

On Error Resume Next

überspringt jeden Fehler. Solltest aber dann einen Errorhandler einbauen.

~stefan.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke, das hat auch funktioniert.

Aber wenn ich die Update-Anweisung den Datensatz nicht findet, würde ich ihn doch gerne in die Datenank einsetzen. Wir kanne ich das tun? Ich weiß das ich das mit INSERT INTO machen kann, aber wenn er doch nach einem Error sofort weiter springt, kann ich doch nicht mehr einsetzen.

Vielleicht kannst du mir mit einem kleinen Beispielscript weiterhelfen.

Ich danke dir viellmals für deine Hilfe.

Gruß Björn