Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Visual Basic Problem lokale Datenbank update

Empfohlene Antworten

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 :-)

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()

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

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

Vielen Dank für eure Hilfe.

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

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.