carp-catcher
Goto Top

VB Access Datenbank Tabelle leeren

Hallo

ich lasse den inhalt einer Datenbank (Access) in einer listbox anzeigen.
Einen in der list box markierten Eintrag lösche ich so:

con.Open()
            cmd.CommandText = "delete from personen " &  
                "where personalnummer = " &  
                pnummer(ListBox1.SelectedIndex)
con.Close()

Aber wie leere ich die ganze Tabelle?

Ich danke im Voraus

LG

Content-Key: 178389

Url: https://administrator.de/contentid/178389

Printed on: April 28, 2024 at 17:04 o'clock

Member: wiesi200
wiesi200 Jan 04, 2012 at 20:03:15 (UTC)
Goto Top
Hallo,

in dem du deinen SQL Befehl nicht mit dem SelectedIndex der ListBox1 einschränkst.
Member: carp-catcher
carp-catcher Jan 04, 2012 at 20:19:42 (UTC)
Goto Top
danke für die schnelle Antwort face-smile

hört sich gut an .... aber ich weiß nicht so recht wie es richtig geht vll kannst mir da noch einmal helfen face-smile

habe
con.Open()
cmd.CommandText = "delete from personen " &
"where personalnummer = " &
pnummer(ListBox1)
con.Close()
und

con.Open()
cmd.CommandText = "delete from personen " &
"where personalnummer = " &
pnummer(ListBox1.Items)
con.Close()

probiert ...

will aber noch nicht so recht ....
Member: NetWolf
NetWolf Jan 04, 2012 at 20:51:34 (UTC)
Goto Top
Moin Moin,

eine "where" Bedingung ist eine Einschränkung! Also lasse sie einfach weg.

Der richtige SQL-Befehl wäre dann:
delete * from personen

Grüße aus Rostock
Wolfgang
(Netwolf)
Member: carp-catcher
carp-catcher Jan 04, 2012 at 22:09:29 (UTC)
Goto Top
hmm danke dir aber ...


con.Open()
cmd.CommandText = "delete * from personen"
con.Close()


sollte eigl funktionieren ... tut aber nicht face-sad


weiß jemand einen rat ?
Member: Biber
Biber Jan 05, 2012 at 15:20:03 (UTC)
Goto Top
Moin carp-catcher,

machst du irgendwo auch ein Execute mit dem cmd.CommandText?
Zu sehen ist doch nur das Befüllen der Textvariablen mit dem Statement.

poste doch bitte den ganzen Quelltext.

Grüße
Biber
Member: carp-catcher
carp-catcher Jan 06, 2012 at 13:08:08 (UTC)
Goto Top
hallo,


ich kopier mal rein.

Imports System.Data.OleDb

Public Class Form1
    Dim con As New OleDbConnection
    Dim cmd As New OleDbCommand
    Dim reader As OleDbDataReader
    Dim pnummer As New ArrayList



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        con.ConnectionString =
            "Provider=Microsoft.Jet.OLEDB.4.0;" &  
            "Data Source=C:\Temp\firma.mdb"  
        cmd.Connection = con
    End Sub

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

    Private Sub AlleSehen()
        Try
            con.Open()
            cmd.CommandText = "select * from personen"  
            Ausgabe()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        con.Close()

        nachname.Text = ""  
        vorname.Text = ""  
        id.Text = ""  
        gehalt.Text = ""  
        geburtstag.Text = ""  
    End Sub

    Private Sub Ausgabe()
        reader = cmd.ExecuteReader()
        ListBox1.Items.Clear()
        pnummer.Clear()
        Do While reader.Read()
            ListBox1.Items.Add(reader("name") & " # " &  
                reader("vorname") & " # " &  
                reader("personalnummer") & " # " &  
                reader("gehalt") & " # " &  
                reader("geburtstag"))  
            pnummer.Add(reader("personalnummer"))  
        Loop
        reader.Close()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim anzahl As Integer

        Try
            con.Open()
            cmd.CommandText =
                "insert into personen " &  
               "(name, vorname, personalnummer, " &  
               "gehalt, geburtstag, bild) values ('" &  
               nachname.Text & "', '" &  
              vorname.Text & "', " &  
               id.Text & ", " &  
               gehalt.Text.Replace(",", ".") &  
               ", '" & geburtstag.Text & "', '" & bildpfad.Text & "')"  
            MessageBox.Show(cmd.CommandText)

            anzahl = cmd.ExecuteNonQuery()
            If anzahl > 0 Then
                MessageBox.Show(
                    "Ein Datensatz eingefügt")  

            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            MessageBox.Show("Bitte mindestens einen" &  
                " Namen, eine eindeutige Personal" &  
                "nummer und ein gültiges Geburts" &  
                "datum eintragen")  
        End Try
        con.Close()



       




    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click


        Dim anzahl As Integer

        Try
            con.Open()
            cmd.CommandText =
                "update personen set " &  
               "name = '" & nachname.Text & "', " &  
               "vorname = '" & vorname.Text &  
               "', " & "personalnummer = " &  
               id.Text & ", " &  
               "gehalt = " &  
               gehalt.Text.Replace(",", ".") &  
               ", " & "geburtstag = '" &  
               geburtstag.Text & "' " &  
               "where personalnummer = " &  
               pnummer(ListBox1.SelectedIndex)


            anzahl = cmd.ExecuteNonQuery()
            If anzahl > 0 Then
                MessageBox.Show("Datensatz geändert")  
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            MessageBox.Show("Bitte einen Datensatz" &  
                " auswählen und mindestens einen" &  
                " Namen, eine eindeutige ID" &  
                "und ein gültiges Geburts" &  
                "datum eintragen")  
        End Try
        con.Close()

        AlleSehen()

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click


        Dim anzahl As Integer
        If id.Text = "" Then  
            MessageBox.Show(
                "Bitte einen Datensatz auswählen")  
            Exit Sub
        End If

        If MessageBox.Show("Wollen Sie den ausge" &  
               "wählten Datensatz wirklich löschen?",  
               "Löschen", MessageBoxButtons.YesNo) =  
                    DialogResult.No Then
            Exit Sub
        End If

        Try
            con.Open()
            cmd.CommandText = "delete from personen " &  
                "where personalnummer = " &  
                pnummer(ListBox1.SelectedIndex)


            anzahl = cmd.ExecuteNonQuery()
            If anzahl > 0 Then
                MessageBox.Show("Datensatz gelöscht")  
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        con.Close()

        AlleSehen()


    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click


        Try
            con.Open()
            cmd.CommandText =
                "select * from personen where" &  
                " name like '%" & nachname.Text & "%'"  
            Ausgabe()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        con.Close()


    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Try

            con.Open()
            cmd.CommandText = "select * from personen" &  
                " where personalnummer = " &  
                pnummer(ListBox1.SelectedIndex)

            reader = cmd.ExecuteReader()
            reader.Read()

            nachname.Text = reader("name")  
            vorname.Text = reader("vorname")  
            id.Text =
                reader("personalnummer")  
            gehalt.Text = reader("gehalt")  
            geburtstag.Text = reader("geburtstag")  

            reader.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        con.Close()

    End Sub


    
' button 6 soll die datenbank leeren  

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click



      

       
            con.Open()
        cmd.CommandText = "delete from personen"  

            con.Close()
            
      






    End Sub

   


    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

        OpenFileDialog1.Filter = "Images Files (*.bmp, *.gif, *.jpg)|*.bmp;*.gif;*.jpg"  

        If OpenFileDialog1.ShowDialog = DialogResult.OK Then

            bildpfad.Text = OpenFileDialog1.FileName
        Else
            Exit Sub
        End If

    End Sub


End Class


sorry das er code so lang ist ...


grüße
Member: Biber
Biber Jan 06, 2012 at 17:07:40 (UTC)
Goto Top
Moin capri-fischer,

in den Zeilen 152 bis ca. Zeile 164 (dem End Try des Delete-Blocks) ist doch vorgekaspert, wie es bei dir aussehen muss.
Kopierie den (fast vollständig fehlenden Code) in deinen Dummy-Block "Button6_Click()" von Zeile 219-232.

Aber: erst nachdem du verstanden hast, wie es im o.a. Delete-UseCase oder auch im Insert-Usecase (ab Zeile 58ff gestrickt ist.

Frage nebenbei:
Haben eure Ober-EntwicklerInnen euch weissgemacht, dass einem die Haare ausfallen oder ein sechster Zeh am linken Fuss wächst, falls man Kommentarzeilen in vorhandenen Codebrei einfügt?
Oder dass es sieben Jahre regnen wird, falls mal der Sinn und Zweck eines einzelnen Subs in einem Halbsatz im Klartext eingetragen wird?

Codequalität lässt sich nur in zwei Masseinheiten sprachunabhängig messen.
Im Anteil der Kommentarzeilen am Gesamtsourcecode oder in WTFs pro Codezeile.

Der Code oben käme bei beiden Methoden nicht gut weg.

Ich finde es ein starkes Stück, dass jemand dir als Einsteiger einen derart lieblos runtergeleierten Spaghetticode vor die Füße gekippt hat - und zwar nicht zum Glattziehen und Nachdokumentieren, sondern zum Erweitern (=also um Aufbauen auf das vorhandene).

-> So was wäre bei uns (toi toi toi) nicht "produktiv gegangen".

Grüße
Biber
Member: carp-catcher
carp-catcher Jan 07, 2012 at 22:07:44 (UTC)
Goto Top
abend,


wie die befehle in meinem code funktionieren weiß ich schon face-smile
sagt mir mein schlaues buch ^^

wenn ich

[code]
con.Open()
cmd.CommandText = "delete from personen " & "where personalnummer = " & pnummer(ListBox1.SelectedIndex)
anzahl = cmd.ExecuteNonQuery()

If anzahl > 0 Then
MessageBox.Show("Datensatz gelöscht")
End If
[/code]

in mein button 6 ereigniss kopiere(welches alles löschen soll) und ausfühere löscht er den ausgewählten index.
Brauch ich net zu testen um das zu wissen.
Was mir allerdings grad einfällt .... kann ich nicht auch jede Zeile einzeln löschen.
Mit for each item sollte das ja gehen.
Ich werde es morgen testen und poste dann.


grüße
carp
Member: Biber
Biber Jan 07, 2012 at 22:55:41 (UTC)
Goto Top
Moin carp-dingser,

mach es doch nicht so kompliziert.
Ich meinte natürlich, den "Delete-einen-Satz"-Fall sinngemäß zu übernehmen.
Also mit dem angepassten Delete-Statement ohne WHERE-Clause.
Oder meinetwegen mit einem "Where (1=1)", wenn es dir ohne WHERE-Bedingung zu unvollständig aussieht.

Die wesentliche Verbesserung zu dem von dir geposteten Zustand ist doch, dass das von NetWolf liebevoll vorbereitete Statement nun auch tatsächlich ausgeführt wird mit cmd.ExecuteNonQuery().

Ausserdem solltest du nicht eine Fehlermeldung auswerfen, wenn keine Datensätze gelöscht wurden, sondern hier (genau wie auch in den anderen INSERT, UPDATE, DELETE-Fällen) prüfen, ob es einen Fehler (SQLERROR) gab.

Und bitte bitte endlich für dich und andere das Gestrunkele nachdokumentieren, dann zwei Schritt zurücktreten, in Ruhe schauen, was da abgeht und dann ausmisten, diesen Bläh-Code.

Irgendetwas Gefundenes durch beharrliches Copy & Paste ohne eigene Auseinandersetzung mit dem Thema zu einer Doktorarbeit hochstilisieren zu wollen - das hat auch bei anderen nicht geklappt.

Grüße
Biber
Member: carp-catcher
carp-catcher Jan 08, 2012 at 17:22:55 (UTC)
Goto Top
abend ....

wie kommt man denn auf carp-dingser :D ... egal ^^
Also erstmal, ich mache VB noch nicht lange und bin noch in der lern Phase ... deswegen hab ich mich ja hier im Forum angemeldet ;)
Ja ich weiß der code ist ein bissl unübersichtlich .... aber da gibts doch nen schönen Spruch.
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.
:D
Ich bedanke mich bei euch allen face-smile
Ich habe es so gemacht wie ihr gesagt habt.

con.Open()
cmd.CommandText = "delete * from personen"  
cmd.ExecuteNonQuery()
'MessageBox.Show(cmd.CommandText)  
con.Close()

Extra für biber ohne LEERZEICHEN ....


LG carp