Announcement

Collapse
No announcement yet.

Datensatz löschen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensatz löschen

    Hallo Leute!<BR>Kann mir vieleicht jemand helfen?<BR>Ich zeige in einem Data Grid die Daten aus meiner Datenbank (Access)an.<BR>Nun möchte ich gerne den Datensatz per Button-Click löschen der zuvor blau markiert wurde.<BR>Ich bekomme das leider nicht hin.<BR>Geht das denn? Und wenn nicht, könnt ihr mir eine andere Methode nennen?<BR>Vielen Dank im Vorraus!!!!<BR>Tatjana

  • #2
    Hallo,

    das folgende Beispiel demonstriert einen möglichen Weg:

    <pre>

    Dim aCM As CurrencyManager
    Const cTBLNAME As String = "TESTTABELLE"

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.OleDbDataAdapter1.Fill(Me.DataSet11, cTBLNAME)
    aCM = Me.BindingContext(Me.DataSet11, cTBLNAME)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim iDelPos As Integer
    iDelPos = aCM.Position
    ' DataRow-Instanz mit der "Löschmarkierung" versehen
    Me.DataSet11.TESTTABELLE.Rows(iDelPos).Delete()
    ' DataAdapter schickt DELETE-Anweisung zur Datenbank
    Me.OleDbDataAdapter1.Update(Me.DataSet11, cTBLNAME)
    ' zur Kontrolle neu einlesen
    Me.DataSet11.Clear()
    Me.OleDbDataAdapter1.Fill(Me.DataSet11, cTBLNAME)
    End Sub
    </pre>

    Der <b>CurrencyManager</b> speichert über seine Eigenschaft <b>Position</b> den "aktuell ausgewählten" Datensatz. Über die <b>Delete</b>-Methode der Rows-Kollektion erhält der darunterliegende Datensatz aus dem DataSet (eigener Arbeitsspeicher) eine Lösch-Kennzeichnung, so dass der DataAdapter beim nachfolgenden <b>Update</b>-Aufruf auch den gleichen Datensatz aus der ACCESS-Datenbank löschen kann.

    Als Alternative zum Aufruf der Delete-Methode der DataRow-Instanz steht auch die Methode <b>RemoveAt</b> des CurrencyManagers zur Verfügung. Auch in diesem Fall sorgt ein späterer Update-Aufruf des DataAdapters dafür, dass eine DELETE-Anweisung für diesen Datensatz zur SQL-Datenbank geschickt wird. Der Grund dafür besteht darin, dass diese Methode bei Klassen, die das Interface IList implementieren (also auch bei strongly typed DataSets) in Wirklichkeit Delete aufruft und die DataRow-Instanz nicht wirklich entfernt.

    <pre>

    Private Sub ButtonRemoveAt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonRemoveAt.Click
    Dim iDelPos As Integer
    iDelPos = aCM.Position
    aCM.RemoveAt(iDelPos)
    End Sub

    </pre>

    Der Vorteil von <b>RemoveAt</b> besteht darin, dass der Datensatz sofort aus dem DataGrid verschwindet, auch wenn der DataAdapter die Änderung noch nicht eingearbeitet und erneut eingelesen hat

    Comment


    • #3
      Danke Andreas!<BR>Leider bekomme ich bei beiden Möglichkeiten eine Fehlermeldung<BR>Und zwar: An Position 1 befindet sich keine Zeile<BR>Kannst du mir sagen was das heißt und was ich falsch gemacht habe

      Comment

      Working...
      X