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.

formulardaten speichern

Empfohlene Antworten

Private Sub cmdspei_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdspei.Click

        'Dim con As New OleDb.OleDbConnection

        Dim cmd As New OleDb.OleDbCommand

        'Dim anzahl As Integer

        Try

            cmd.CommandText = _

               "INSERT INTO tab_spot(Kundenname, Spotname, Sprecher1, Sprecher2, Sprecher3, Branche, Musik, Spottext, Spotbeschreibung, Spotlaenge)" & _

               "VALUES (" + txtkname.Text + "," + txtspname.Text + "," + txtsp1.Text + "," + txtsp2.Text + "," + txtsp3.Text + "," + cmdbra.Text + "," + txtmus.Text + "," + txtsptex.Text + "," + txtkbez.Text + "," + txtspl.Text + ")"

            MsgBox(cmd.CommandText)

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try


    End Sub

das ist der Quellcode.

und ich sehe einfach nicht wo da was falsch sein soll.

  • Antworten 51
  • Ansichten 6.3k
  • Erstellt
  • Letzte Antwort

Hallo,

ich habe Dir einen SQL-Statement für C# geschickt :D

Das wird so natürlich nicht in Deinen VB .Net Code passen...

Hier mal für VB .Net:


"INSERT INTO tab_spot(Kundenname, Spotname, Sprecher1, Sprecher2, Sprecher3, Branche, Musik, Spottext, Spotbeschreibung, Spotlaenge) VALUES (" & txtkname.Text & "," & "txtspname.Text" & "," & txtsp1.Text & "," & txtsp2.Text & "," & txtsp3.Text & "," & cmdbra.Text & "," & txtmus.Text & "," & txtsptex.Text & "," & txtkbez.Text & "," & txtspl.Text & ")"

Lass einfach die Zeilenumbrüche (SQL-String) im Code mal weg und benutze das Statement aus diesem Beitrag.

Wo führst Du das Command aus (command.ExecuteNonQuery())? Und wo werden die Verbindungen zur DB geöffnet und geschlossen? Oder sind das nur Testzeilen?

Gruß,

Thomas

nein sind keine testzeilen so habe ich das in meinem Programm geschrieben.

Hallo,

habe hier ganz auf die Schnelle mal ein paar Zeilen Code zusammengebaut die dir fürs Erste weiterhelfen sollten:


    Private Sub cmdspei_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdspei.Click

        'Connection erstellen / Der Connectionstring muss natürlich angepasst werden!

        Dim con As New OleDb.OleDbConnection("Provider=MySQLProv;Data Source=Host-/Datenbankname;User Id=myUsername;Password=myPassword ")

        'Statement als string erstellen

        Dim sql As String = "INSERT INTO tab_spot(Kundenname, Spotname, Sprecher1, Sprecher2, Sprecher3, Branche, Musik, Spottext, Spotbeschreibung, Spotlaenge) VALUES (" + txtkname.Text + "," + txtspname.Text + "," + txtsp1.Text + "," + txtsp2.Text + "," + txtsp3.Text + "," + cmdbra.Text + "," + txtmus.Text + "," + txtsptex.Text + "," + txtkbez.Text + "," + txtspl.Text + ")"

        'Command erstellen und diesem das SQL-Statement UND die Verbindung zuweisen!

        Dim cmd As New OleDb.OleDbCommand(sql, con)


        Try

            'Verbindung zur DB öffnen

            con.Open()

            'Command ausführen

            cmd.ExecuteNonQuery()

            'Verbindung wieder schliessen

            con.Close()

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

    End Sub

Du solltest Dich aber wirklich mit den Grundlagen beschäftigen sonst helfen Dir dort auch keine Beispiele mehr weiter.

Gruß,

Thomas

ich glaube ich werde doch erstmal die grundlagen dafür lernen bevor ich an der ganzen sache weiter mache.

habe jetzt alles noch mal so gemacht wie ihr mir gesagt habt und nun kommt endlich eine fehler meldung.

fehlermeldung lautet:

ES WURDE VERSUCHT, IM GESCHÜTZTEN SPEICHER ZU LESEN ODER ZU SCHREIBEN.

heißt es das die Datenbank schreib geschützt ist?

Kann es sein, dass dein User mit dem du die Connection aufmachst in der DB keine Schreib / Leserechte hat?

Bei MS SQL wären dass Datareader / Datawriter ... ohne diese Rechte des SQL Users darf der dann natürlich auch nichts in die DB schreiben bzw. nichts aus der DB lesen.

Von daher -> Rechtevergabe der Datenbank überprüfen

danke werde das gleich mal überprüfen.

wenn das daran liegt dann fresse ich ein besen weil ich komplizierter gedacht habe.

Hallo,

ich tippe darauf, dass es an der noch fehlenden Transaktionssicherheit liegt.

Ich habe mir mal die Mühe gemacht und den Code von gestern etwas angepasst. Es werden jetzt OleDB-Parameter genutzt. Das Command-Objekt führt das SQL-Statement jetzt in einer Transaktion aus. Das Schreiben in geschützten Speicher... usw. ist eine häufige Fehlermeldung für nicht transaktionssichere Anweisungen.

Hier mal der neue Code (Bitte auf die noch zu erstellenden Anpassungen achten!):


    Private Sub cmdspei_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdspei.Click

        'Connection erstellen / Der Connectionstring muss natürlich angepasst werden!

        Dim con As New OleDb.OleDbConnection("Hier steht Dein Connectionstring")

        'Statement als string erstellen (Noch ergänzen! Für jeden Parameter ein Fragezeichen...)

        Dim sql As String = "INSERT INTO vbtest(Kundenname, Spotname) VALUES (?, ?)"

        'Command erstellen und diesem das SQL-Statement zuweisen!

        Dim cmd As New OleDb.OleDbCommand(sql)


        'Parameter erstellen (100 ist hier die Feldgröße also anpassen!)

        Dim paramKundenname As New OleDbParameter("@kundenname", OleDbType.VarChar, 100)

        Dim paramSpotname As New OleDbParameter("@spotname", OleDbType.VarChar, 100)


        'Hier werden Parameter hinzugefügt was wesentlich sicherer und im SQL-String einfacher zu handhaben ist

        'Hinzufügen der Parameter zum Command (Hier ist die Reihenfolge WICHTIG!)

        cmd.Parameters.Add(paramKundenname).Value = txtkname.Text

        cmd.Parameters.Add(paramSpotname).Value = txtspname.Text


        Dim transaction As OleDbTransaction

        Dim affectedRows As Integer = 0


        Try            

            'Verbindung zur DB öffnen

            con.Open()

            transaction = con.BeginTransaction(IsolationLevel.ReadCommitted)

            cmd.Connection = con

            cmd.Transaction = transaction

            'Command ausführen

            affectedRows = cmd.ExecuteNonQuery()

            'Verbindung wieder schliessen

            transaction.Commit()

            con.Close()

            MessageBox.Show(String.Format("Es wurden {0} Datensätze eingefügt.", affectedRows.ToString()))

        Catch ex As Exception

            MsgBox(ex.Message)

        Finally

            con.Close()

        End Try

    End Sub

Gruß,

Thomas

danke das du dir wegen mir so ne mühe machst.

weiß gar nicht wie ich mich dafür bedanken kann.

ist ok eine frage habe ich noch. bei der Zeile

  Dim sql As String = "INSERT INTO vbtest(Kundenname, Spotname) VALUES (?, ?)"

in der klammer bei Values sollen die fragezeichen bleiben oder was kommt da rein?

und was meinst du mit dem Connectionstring??

Hallo,

die Fragezeichen sind Platzhalter für Parameter. Also bleiben die Fragezeichen stehen. Für jeden Wert den Du in VALUES() übergeben willst stellst Du ein Fragezeichen ein.

Beispiel:

INSERT INTO tabelle1 (vorname, nachname) VALUES (?, ?)
In dieser Reihenfolge wie du die Werte im SQL-Statement benötigst fügst du die OleDB-Parameter dem Command hinzu.

        Dim paramVorname As New OleDbParameter("@vorname", OleDbType.VarChar, 100)

        Dim paramNachname As New OleDbParameter("@nachname", OleDbType.VarChar, 100)


        'Hinzufügen der Parameter zum Command ([COLOR="Red"]Hier ist die Reihenfolge WICHTIG![/COLOR])

        cmd.Parameters.Add(paramVorname).Value = "Bill"

        cmd.Parameters.Add(paramNachname).Value = "Gates"

Daher ist die Reihenfolge wichtig. Die Parameter haben im Statement keinen Namen und werden nur der Reihenfolge nach zugewiesen.

gut danke ich versuche es gleich mal.

melde mich später wenn es klappt.

eine kleine frage habe ich noch was muss ich in die klammer rein schreiben???

Dim con As New OleDb.OleDbConnection("Hier steht Dein Connectionstring")

und wie ist das wenn ich das über ODBC mache?

weil mein chef kam gerade an und sagte ich soll auf die datenbank mit ODBC zugreifen weil es auch eine datenbank wäre mit ODBC.

ich verstehe es nicht es klappt immer noch nicht. ich weiß echt nicht was ich falsch mache.

das kenn ich schon das habe ich mir schon durchgearbeitet.

ich habe es genau so gemacht wie es dort drin steht aber es geht auch nicht.

Hallo,

im Kapitel 8 steht wirklich Schritt für Schritt was getan werden muss.

Auch Wichtig "Treiber Installation".

"Geht nicht" ist eine magere Beschreibung.

Was passiert?

Welche Fehlermeldung wird ausgegeben?

Gruß,

Thomas

ne hat sich erledigt mit dem fehler.

ich habe da was falsch gemacht weil das programm lässt sich jetzt nicht mehr ausführen. ich werde es einfahc noch mal machen.

es kommt jetzt eine Fehlermeldung die lautet.

Provider=MySQLProv ist auf dem lokalen rechner nicht registriert.

was kann ich da tun.

he Thomas.

ich muss dir jetzt Danken es Klappt alles super ich kann speichern und löschen.

alles kklappt so wie ich es wollte danke für die hilfe.

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.