Zum Inhalt springen

Visual Basic Problem lokale Datenbank update


martinposer

Empfohlene Beiträge

Hallo,

folgendes Problem: Ich habe eine lokale Datenbank erstellt, der Benutzer soll seine Daten in dieser speichern können. Da der Benutzer seine Daten immer nur verändern kann und er nicht doppelt in der Datenbank stehen soll, arbeite ich mit dem SQL Befehl update. Allerdings funktioniert das einfügen nicht obwohl mir keine Fehlermeldung angezeigt wird.


Dim con As New SqlServerCe.SqlCeConnection

        Dim cmd As New SqlServerCe.SqlCeCommand


        cmd.Connection = con

        con.ConnectionString = "Data Source = Azubi_Daten.sdf"


        Try

            con.Open()


            'Die eingetragenen Daten werden in die Datenbank importiert.

            cmd.CommandText = "update Datenpflege set Name = @Name"

            cmd.CommandText = "update Datenpflege set Geburtsdatum = @Geburtsdatum"

            cmd.CommandText = "update Datenpflege set Geburtsort = @Geburtsort"

            cmd.CommandText = "update Datenpflege set Beruf = @Beruf"

            cmd.CommandText = "update Datenpflege set Berufsschule = @Berufsschule"

            cmd.CommandText = "update Datenpflege set Ausbildungszeit =@Ausbildungszeit"

            cmd.CommandText = "update Datenpflege set Anschrift = @Anschrift"

            cmd.CommandText = "update Datenpflege set Betrieb = @Betrieb"


            'Über Parameter werden die Spalten mit Werten gefüllt

            cmd.Parameters.AddWithValue("Name", txtName.Text)

            cmd.Parameters.AddWithValue("Geburtsdatum", txtBirth.Text)

            cmd.Parameters.AddWithValue("Geburtsort", txtOrt.Text)

            cmd.Parameters.AddWithValue("Beruf", txtJob.Text)

            cmd.Parameters.AddWithValue("Berufsschule", txtSchool.Text)

            cmd.Parameters.AddWithValue("Ausbildungszeit", txtTime.Text)

            cmd.Parameters.AddWithValue("Anschrift", txtAnschrift.Text)

            cmd.Parameters.AddWithValue("Betrieb", txtFirma.Text)


            cmd.ExecuteNonQuery()



        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

        con.Close()


Habt ihr vielleicht eine Idee?

Vielen Dank :-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das funktioniert leider nicht :( Mein reader dazu sieht so aus:



 Dim con As New SqlServerCe.SqlCeConnection

        Dim cmd As New SqlServerCe.SqlCeCommand

        Dim reader As SqlServerCe.SqlCeDataReader


        cmd.Connection = con

        con.ConnectionString = "Data Source = Azubi_Daten.sdf"


        Try

            con.Open()

            cmd.CommandText = "select * from Datenpflege"

            reader = cmd.ExecuteReader


            Do While reader.Read


                'Auslesen der Persönlichen Daten

                txtName.Text = reader("Name")

                txtBirth.Text = reader("Geburtsdatum")

                txtAnschrift.Text = reader("Anschrift")

                txtOrt.Text = reader("Geburtsort")


                'Auslesen der Ausbildungsdaten

                txtFirma.Text = reader("Betrieb")

                txtJob.Text = reader("Beruf")

                txtSchool.Text = reader("Berufsschule")

                txtTime.Text = reader("Ausbildungszeit")


            Loop


        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

        con.Close()

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich sehe das Problem darin, dass der alte Befehl durch einen immer wieder neuen ersetzt wird (kann auch sein, dass ich mich irre)

ändert sich denn zumindest der Betrieb?

wenn ja, dann musst du jedes Mal, wenn du "cmd.CommandText = [...]" verwendest vor dem jeweilig nächsten ein "cmd.ExecuteNonQuery()" verwenden, damit auch _jeder_ Befehl ausgeführt wird

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich sehe das Problem darin, dass der alte Befehl durch einen immer wieder neuen ersetzt wird (kann auch sein, dass ich mich irre)

ändert sich denn zumindest der Betrieb?

wenn ja, dann musst du jedes Mal, wenn du "cmd.CommandText = [...]" verwendest vor dem jeweilig nächsten ein "cmd.ExecuteNonQuery()" verwenden, damit auch _jeder_ Befehl ausgeführt wird

Seh ich auch so. Er überschreibt seinen querrystring ständig ohne den vorherigen ausgeführt zu haben. Entweder einen nach dem andern ausführen (wie von Sacaldur bereits erklärt) oder zu einem einzigen Update Statement zusammenfassen (was ich persönlich für die elegantere Lösung halten würde).

Dann sollte das auch funktionieren.

lg

Gateway

Link zu diesem Kommentar
Auf anderen Seiten teilen

Seh ich auch so. Er überschreibt seinen querrystring ständig ohne den vorherigen ausgeführt zu haben. Entweder einen nach dem andern ausführen (wie von Sacaldur bereits erklärt) oder zu einem einzigen Update Statement zusammenfassen (was ich persönlich für die elegantere Lösung halten würde).

Dann sollte das auch funktionieren.

lg

Gateway

stimmt, daran habe ich nicht gedacht

sofern nur ein einziger Datensatz verändert werden soll, ist das defenitiv besser

aber... naja...

in dem Fall kann ich kein "WHERE" sehen, wodurch der zu ändernde Datensatz bestimmt wird (es sei denn, VB kennt sowas nicht ;D)

das heißt, jedes Mal würden einfach alle Datensätze so angepasst werden ^^

@martinposer:

du _musst_ eine WHERE Klausel einfügen, wenn du nur einen einzigen Datensatz ändern willst

Vielen Dank für eure Hilfe.

Hab das Problem jetzt gelöst, habe die Parameterangaben vor dem Commandtext ersetzt und update durch insert ersetzt.

ein Insert wird dir nichts bringen, wenn du Daten verändern willst

du würdest also immer wieder einen neuen Datensatz einfügen und genau das ist doch das, was du nicht haben wolltest, oder?

wenn erst durch das Insert dein Ziel "erreicht" ist, dann waren einfach keine Datensätze in der Tabelle, weshalb auch keine Datensätze aktualisiert werden konnten

diesen Fall solltets du prüfen, indem du vorher in der Datenbank nachschaust, ob schon ein Datensatz vorhanden ist

wenn ja -> UPDATE

wenn nein -> INSERT

(irgendein DBMS bzw. ABAP hatte einen Befehl verwendet, welches eine Kombination aus den beiden darstellt...)

Fazit:

du hast dein altes Problem lösen können, aber dafür ein neues aufgeworfen ;D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

falls es noch interessant ist für dich, ich würds so machen



        Dim con As New SqlServerCe.SqlCeConnection

        Dim cmd As New SqlServerCe.SqlCeCommand


        cmd.Connection = con

        con.ConnectionString = "Data Source = Azubi_Daten.sdf"


        Try

            con.Open()


            'Die eingetragenen Daten werden in die Datenbank importiert.

            cmd.CommandText = "update Datenpflege set Name = @Name, " _

                                      & "Geburtsort = @Geburtsort, " _

                                      & "Beruf = @Beruf, " _

                                      & "Berufsschule = @Berufsschule, " _

                                      & "Ausbildungszeit = @Ausbildungszeit, " _

                                      & "Anschrift = @Anschrift, " _

                                      & "Geburtsdatum = @Geburtsdatum, " _

                                      & "Betrieb = @Betrieb"


            cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 250)

            cmd.Parameters.Add("@Geburtsdatum", SqlDbType.NVarChar, 250)

            cmd.Parameters.Add("@Geburtsort", SqlDbType.NVarChar, 250)

            cmd.Parameters.Add("@Beruf", SqlDbType.NVarChar, 250)

            cmd.Parameters.Add("@Berufsschule", SqlDbType.NVarChar, 250)

            cmd.Parameters.Add("@Ausbildungszeit", SqlDbType.NVarChar, 250)

            cmd.Parameters.Add("@Anschrift", SqlDbType.NVarChar, 250)

            cmd.Parameters.Add("@Betrieb", SqlDbType.NVarChar, 250)


            cmd.Parameters("@Name").Value = txtName.Text

            cmd.Parameters("@Geburtsdatum").Value = txtBirth.Text

            cmd.Parameters("@Geburtsort").Value = txtOrt.Text

            cmd.Parameters("@Beruf").Value = txtJob.Text

            cmd.Parameters("@Berufsschule").Value = txtSchool.Text

            cmd.Parameters("@Ausbildungszeit").Value = txtTime.Text

            cmd.Parameters("@Anschrift").Value = txtAnschrift.Text

            cmd.Parameters("@Betrieb").Value = txtFirma.Text            


            cmd.ExecuteNonQuery()


        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

        con.Close()


gibt zwar tausend weg zum ziel und dieser ist gestimmt ein bisschen ausführlich, aber was solls. bei mir liefs so. die datentypen musst du natürlich noch an deine anpassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...