ich habe das problem nun gelöst!
da ich eine extra Spalte für die Nummerierung in meiner Datenbank habe, und die Reihenfolge der Einträge wichtig ist, ist (bei mir) diese Funktion notwendig.
(siehe Excel, dort ist ee immer mal wieder nötig, an einer bestimmten Stelle, eine neue Zeile einzufügen.)
Mein Weg:
Über die Funtkion AddNew() einen neuen Datensatz einfügen und danach die Nummerierung ändern und die Spalte "Nr." neu sortieren (Grid1.ReSort).
Ich kann nur sagen, es funtkioniert!
Mein Code:
Private Sub cmdInsertRow_Click()
'Zeile nach der markierten Zeile einfügen
Dim x As Integer
Dim zZeile As Integer
Grid1.UpdateRow
With Grid1
If .SelCount = 1 Then 'anzahl der markierten zellen prüfen
zZeile = Grid1.Row + 1
.AddNew
.CellNew(1) = .Text(Grid1.Row, 1) + 1 'zeilennr , nach markierter zelle
' nehmen
.CellNew(11) = Date 'heutiges Datum
.CellNew(17) = "Punkt neu hinzu"
'nummerierung ändern -> alle zeilen nach der markierten zeile, um eins
' erhöhen (+1)
For x = (Grid1.Row + 1) To (Grid1.Rows)
DoChange Grid1, x, 0, x + 1
Next
'bei abbruch, zeilen neu nummerieren -> siehe cmdAbbrechen
Else
MsgBox "Bitte (nur) eine Zeile markieren!", 16, "Achtung"
End If
End With
'Zeile 0 neu filtern -> damit neue nummerierung sichtbar -> eingefügte
' zeile markieren
'DoSort -> neu sortieren
Grid1.ReSort 'nach bisherigen Kriterien wieder neu sortieren
'eingefügte Zeile markieren -> focus
Grid1.Row = zZeile
lblPunkte.Caption = "Anzahl der Schweisspunkte: " & Grid1.Rows
Grid1.AllowEdit = True
Grid1.AutoUpdate = True
Grid1.Refresh
End Sub
' 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 |