Rubrik: Controls · sev-Controls | VB-Versionen: VB5, VB6 | 06.08.07 |
sevDataGrid - Manuelle Änderung von Datenbank-Inhalten Hier wird gezeigt, wie man Änderungen an den Datenbank-Inhalten (einzelne Spalten) manuell via Code durchführen kann. | ||
Autor: Dieter Otter | Bewertung: | Views: 8.973 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Immer und immer wieder taucht die Frage auf, wie man Änderungen von Datenbank-Inhalten manuell via Code vornehmen kann. Viele User versuchen das Ganze zunächst über die Text-Eigenschaft zu realisieren. Die Ansicht im DataGrid wird hierbei auch entsprechend aktualisiert - jedoch wird der neue Feldinhalt nicht in der Datenbank gespeichert.
Um im Recordset-Mode Datenbank-Inhalte per Code dauerhaft zu ändern, muss der neue Feldinhalt direkt über das Recordset-Objekt zugewiesen und gespeichert werden.
Beispiel:
Der Inhalt der aktuell selektierten Datenzeile soll geändert und gespeichert werden:
With Grid1.Recordset .Edit ' nur falls DAO verwendet wird .Fields("feldname") = "neuer Wert" .Update End With ' Ansicht aktualisieren Grid1.RowRefresh
Das Ganze lässt sich auch in eine universelle Funktion verpacken, mit der man Änderungen bequem per Funktionsaufruf vornehmen kann.
' Dauerhafte Änderungen am Datenbank-Inhalt vornehmen Public Function DoChange(Grid As Object, _ ByVal nRow As Long, _ ByVal nCol As Variant, _ ByVal NewValue As Variant, _ Optional ByVal bRefresh As Boolean = True, _ Optional ByVal bSilent As Boolean = False) As Boolean With Grid.Recordset ' zum gewünschten Datensatz wechseln .MoveFirst If nRow > 1 Then .Move nRow - 1 ' Datensatz bearbeiten .Edit ' nur falls DAO If IsNumeric(nCol) Then .Fields(nCol - 1) = NewValue Else .Fields(nCol) = NewValue End If .Update End With ' Ansicht im DataGrid aktualisieren If bRefresh Then Grid.RowRefresh nRow DoChange = True Exit Function ErrHandler: If Not bSilent Then MsgBox "Fehler beim Aktualisieren des Recordsets!" & vbCrLf & _ CStr(Err.Number) & " " & Err.Description, vbExclamation Or vbOKOnly End If DoChange = False End Function
Aufruf:
Es soll in der 10. Datenzeile die 5. Spalte geändert werden:
Dim bResult As Boolean bResult = DoChange(Grid1, 10, 5, "neuer Wert")
Anstelle der Spaltennummer können Sie auch die Feldbezeichnung im Recordset angeben:
bResult = DoChange(Grid1, 10, "feldname", "neuer Wert")