Löschen in einer Access-Datenbank ?


Hi,
ich habe folgendes Problem.
Ich möchte eine bestimmte Zeile aus einer Access-Tabelle löschen. Dazu bekomme ich über eine Textbox und eine Combobox 2 Werte. Nach diesen Werten soll die Tabelle durchsucht werden und die entsprechende Zeile gelöscht werden.

Ich habe das Ganze mal folgendermaßen versucht :
Code:
Dim deleteCommand As New OleDb.OleDbCommand("delete from Verteilung_SW where Kennziffer = combobox2.SelectedIndex + 1  and  Rechner_Nr = Textbox2.text", OleDbConnection1)
        Try
            OleDbConnection1.Open()
            deleteCommand.ExecuteNonQuery()
        Catch err As OleDb.OleDbException
            MessageBox.Show(err.ToString)
        Finally
            OleDbConnection1.Close()
        End Try
Ich gehe davon aus das mein SQL Befehl nicht stimmt, ich habe aber über die Suche nur Beispiele für insert-Befehle gefunden, konnte es also nicht selbst überprüfen.
Das Programm meldet mir als Fehler das es entweder die Tabelle oder die Abfrage "Verteilung_SW" nicht findet.

Hoffe mir kann jemand weiterhelfen.

Gruß
Ahnungsloser8000
 

JensG

Erfahrenes Mitglied
Hallo Ahnungsloser,

versuche es mal so.

Code:
 Dim deleteCommand As New OleDb.OleDbCommand("delete from Verteilung_SW where Kennziffer = " & combobox2.SelectedIndex + 1 & " and  Rechner_Nr = " &  cint(Textbox2.text) , OleDbConnection1)

Try
     OleDbConnection1.Open()
     deleteCommand.ExecuteNonQuery()
Catch err As OleDb.OleDbException
     MessageBox.Show(err.ToString)
Finally
     OleDbConnection1.Close()
End Try
ist aber ungtestet.

Jens
 
Hi erst mal Danke für die Hilfe.

Also das Feld Rechnernummer muss ein String bleiben, da die Rechnernummern folgendemaßen aufgebaut sind W2KW7777. Die letzten 4 Ziffern sind jeweils eine durchlaufende Nummer. Der erste Teil bringt Infos zum Betriebssystem.

Den Rest habe ich mal an deinen Vorschlag angepasst. Ich bekomme aber immer noch eine Fehlermeldung. Ich schreibe sie mal mit dazu, vielleicht hilft das jemandem den Fehler zu finden.

System.Data.OleDb.OleDbException: Das Microsoft Jet-Datenbankmodul findet die Eingangstabelle oder Abfrage 'Verteilung_SW' nicht.
Stellen Sie sicher, dass sie existiert und der Name richtig eingegeben wurde.
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
at DBTest5.Form1.Button5_Click(Object sender, EventArgs e) in D:\VS_Basic_Projekte\DBTest5\Form1.vb:line 936

Ich hatte schon mal ein ähnliches Problem. Da wurde auch über eine nicht auffindbare Tabelle gesprochen, aber die Tabelle existiert definitiv und der Name ist ebenfalls richtig geschrieben. Ich weiß leider nicht wie ich damals den Fehler beheben konnte.
 
Anscheinend findet niemand eine Lösung zum genannten Problem. Aber vielleicht gibt es auch noch eine andere Möglichkeit.

Kann ich die entsprechende Zeile vielleicht direkt im DataGrid suchen und dort löschen und dann anschließend ein Update auf die Datenbank machen?

Oder hat noch jemand eine andere Idee?
 

JensG

Erfahrenes Mitglied
Hallo,

wenn das Feld Rechnungsnummer ein String ist dann muss das Delete Kommando so aussehen.

Code:
Dim deleteCommand As New OleDb.OleDbCommand("delete from Verteilung_SW where Kennziffer = ' " & combobox2.SelectedIndex + 1 & " ' and  Rechner_Nr = " &  cint(Textbox2.text) , OleDbConnection1)
 
@JensG
Danke für deine Hilfe, ich habe das Ganze jetzt aber auf einem anderen Weg gelöst.

Bin einen Umweg über das Datagrid gegangen.

Code:
        Dim i As Integer
        Dim reihenanzahl As Integer
        reihenanzahl = DataSet11.Verteilung_SW.Count
        Dim gesReihe As Integer
        gesReihe = -1

        For i = 1 To reihenanzahl
            If DataGrid3.Item(i - 1, 1) = TextBox2.Text Then
                If DataGrid3.Item(i - 1, 2) = ComboBox2.SelectedIndex + 1 Then
                    gesReihe = i - 1
                End If

            End If

        Next

        If Not gesReihe = -1 Then
            DataSet11.Verteilung_SW(gesReihe).Delete()
            schalter2 = False
        Else
            MessageBox.Show("BlaBlaBla", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)
        End If

        OleDbDataAdapter3.Update(DataSet11, "Verteilung SW")
Werde bei Gelegenheit trotzdem noch mal den anderen Weg versuchen.

Gruß Ahnungsloser8000