Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere OLE DB- und ADO-Entwicklung » ADO-Programmierung mit SQL Anywhere

 

Daten mit einem Cursor aktualisieren

Mit dem SQL Anywhere OLE DB-Provider können Sie eine Ergebnismenge über einen Cursor aktualisieren. Diese Funktion ist über den MSDASQL-Provider nicht verfügbar.

Recordsets aktualisieren

Sie können die Datenbank über eine Datensatzgruppe (Recordset) aktualisieren.

Private Sub cmdUpdateThroughCursor_Click( _
        ByVal eventSender As System.Object, _
        ByVal eventArgs As System.EventArgs) _
        Handles cmdUpdateThroughCursor.Click

    ' Declare variables
    Dim i As Integer
    Dim myConn As New ADODB.Connection
    Dim myRS As New ADODB.Recordset
    Dim SQLString As String

    On Error GoTo HandleError

    ' Connect
    myConn.Provider = "SAOLEDB"
    myConn.ConnectionString = _
        "Data Source=SQL Anywhere 11 Demo"
    myConn.Open()
    myConn.BeginTrans()
    SQLString = "SELECT * FROM Customers"
    myRS.Open(SQLString, myConn, _
        ADODB.CursorTypeEnum.adOpenDynamic, _
        ADODB.LockTypeEnum.adLockBatchOptimistic)

    If myRS.BOF And myRS.EOF Then
        MsgBox("Recordset is empty!", 16, "Empty Recordset")
    Else
        MsgBox("Cursor type: " & CStr(myRS.CursorType), _
            MsgBoxStyle.Information)
        myRS.MoveFirst()
        For i = 1 To 3
            MsgBox("Row: " & CStr(myRS.Fields("ID").Value), _
                MsgBoxStyle.Information)
            If i = 2 Then
                myRS.Update("City", "Toronto")
                myRS.UpdateBatch()
            End If
            myRS.MoveNext()
        Next i
        myRS.Close()
    End If
    myConn.CommitTrans()
    myConn.Close()
    Exit Sub

HandleError:
    MsgBox(ErrorToString(Err.Number))
    Exit Sub

End Sub
Hinweise

Wenn Sie die Einstellung adLockBatchOptimistic für das Recordset verwenden, werden bei der myRS.Update-Methode keine Änderungen an der Datenbank selbst vorgenommen. stattdessen wird eine lokale Kopie des Recordset aktualisiert.

Die myRS.UpdateBatch-Methode nimmt die Aktualisierung am Datenbankserver vor, schreibt sie jedoch nicht fest, da sie sich innerhalb einer Transaktion befindet. Wenn eine UpdateBatch-Methode von außerhalb einer Transaktion aufgerufen wurde, werden die Änderungen festgeschrieben.

Die myConn.CommitTrans-Methode schreibt die Änderungen fest. Das Recordset-Objekt wurde zwischenzeitlich geschlossen, sodass das Problem, ob die lokale Kopie der Daten geändert wurde oder nicht, nicht mehr besteht.