Schreiben von mehreren Werten in Access DB

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von jnpanzer.

    Schreiben von mehreren Werten in Access DB

    Hallo,
    hat jemand einen kleinen Tipp für mich.

    Es soll Überprüft werden ob die txt Box leer ist wenn ja dann ,mach nichts sonst mache einen Eintrag.
    MIt meinen Code wird nur der erste Zeile mit Werten in die DB geschrieben.
    Es soll aber pro If Abftage eine Zeile in die DB eingetragen werden.



    VB.NET-Quellcode

    1. Private Sub cmd_atabelle_schreiben_Click(sender As Object, e As EventArgs) Handles cmd_atabelle_schreiben.Click
    2. Dim sorte1 As Single
    3. Dim sorte2 As Single
    4. Dim karte1 As Single
    5. sorte1 = 1
    6. sorte2 = 2
    7. karte1 = 1
    8. txt_m_1 = CStr(txt_master_1.Text)
    9. txt_m_2 = CStr(txt_master_2.Text)
    10. Dim provider As String
    11. Dim dataFile As String
    12. Dim connString As String
    13. Dim str As String
    14. Dim myConnection As OleDbConnection = New OleDbConnection
    15. provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
    16. dataFile = DB & "dbminasatabellen.accdb"
    17. connString = provider & dataFile
    18. myConnection.ConnectionString = connString
    19. myConnection.Open()
    20. str = "INSERT INTO tabatabellen([tsnr], [sorte], [kreditart], [prozent], [berechnungsart]) values (?,?,?,?,?)"
    21. Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
    22. Try
    23. If txt_master_1.Text = "" Then
    24. Else
    25. cmd.Parameters.Add(New OleDbParameter("tsnr", CType(txt_tsnr.Text, Integer)))
    26. cmd.Parameters.Add(New OleDbParameter("sorte", CType(sorte1, Integer)))
    27. cmd.Parameters.Add(New OleDbParameter("kreditart", CType(karte1, Integer)))
    28. cmd.Parameters.Add(New OleDbParameter("prozent", CType(txt_master_1.Text, Single)))
    29. cmd.Parameters.Add(New OleDbParameter("berechungsart", CType(cb_prov1.SelectedIndex, Integer)))
    30. cmd.ExecuteNonQuery()
    31. End If
    32. If txt_master_2.Text = "" Then
    33. Else
    34. cmd.Parameters.Add(New OleDbParameter("tsnr", CType(txt_tsnr.Text, Integer)))
    35. cmd.Parameters.Add(New OleDbParameter("sorte", CType(sorte2, Integer)))
    36. cmd.Parameters.Add(New OleDbParameter("kreditart", CType(karte1, Integer)))
    37. cmd.Parameters.Add(New OleDbParameter("prozent", CType(txt_master_2.Text, Single)))
    38. cmd.Parameters.Add(New OleDbParameter("berechungsart", CType(cb_prov1.SelectedIndex, Integer)))
    39. cmd.ExecuteNonQuery()
    40. End If
    41. ' cmd.ExecuteNonQuery()
    42. cmd.Dispose()
    43. myConnection.Close()
    44. Catch ex As Exception
    45. MsgBox(ex.Message)
    46. End Try
    47. End Sub
    in zeilen #42-46 fügst dem Command 5 Parameter zu.
    in zeilen #56-60 noch einmal.
    Das macht zusammen 10 Parameter - damit ist das Command vmtl. überfordert, zumal jeweils 2 Parameter denselben Namen führen - da gibt es nicht zufällig eine Exception (die du uns verschweigst)?

    Ich würde dir sehr empfehlen, den TryCatch wegzumachen, weil so ists sehr schwierig, die genaue Fehlerzeile zu ermitteln.

    jnpanzer schrieb:

    ...und er fliegt in Zeile 62 raus.
    Gibt es auch eine Fehlermeldung?
    Und wenn ja, wie lautet die?



    jnpanzer schrieb:

    ...und kann das danach neu den Befehl füllen.
    Kannst du auch.
    Befüll die Parameter mit neuen Werten.

    Befülle nicht das Command mit noch mehr Parametern!

    Guck dir dazu auch die OleDbParameter - Klasse im ObjectBrowser an, die hat ja noch mehr Methoden und Properties, als nur New().

    ObjectBrowser? gugge: VisualStudio richtig nutzen (Google ist nicht deine Mami)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Habe es Versucht aber auch wieder ohne Erfolg.
    Meintest du doch so oder ?
    diesmal steigt er bei der ersten

    VB.NET-Quellcode

    1. cmd.ExecuteNonQuery()
    aus.


    VB.NET-Quellcode

    1. Private Sub cmd_atabelle_schreiben_Click(sender As Object, e As EventArgs) Handles cmd_atabelle_schreiben.Click
    2. Dim sorte1 As Single
    3. Dim sorte2 As Single
    4. Dim tsnr_sql As Integer
    5. Dim sorte_sql As Integer
    6. Dim kreditart_sql As Integer
    7. Dim prozent_sql As Single
    8. Dim berechnungsart_sql As Integer
    9. Dim provider As String
    10. Dim dataFile As String
    11. Dim connString As String
    12. Dim str As String
    13. Dim myConnection As OleDbConnection = New OleDbConnection
    14. provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
    15. dataFile = DB & "dbminasatabellen.accdb"
    16. connString = provider & dataFile
    17. myConnection.ConnectionString = connString
    18. myConnection.Open()
    19. str = "INSERT INTO tabatabellen([tsnr], [sorte], [kreditart], [prozent], [berechnungsart]) values (?,?,?,?,?)"
    20. Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
    21. cmd.Parameters.Add(New OleDbParameter("tsnr", CType(tsnr_sql, Integer)))
    22. cmd.Parameters.Add(New OleDbParameter("sorte", CType(sorte_sql, Integer)))
    23. cmd.Parameters.Add(New OleDbParameter("kreditart", CType(kreditart_sql, Integer)))
    24. cmd.Parameters.Add(New OleDbParameter("prozent", CType(prozent_sql, Single)))
    25. cmd.Parameters.Add(New OleDbParameter("berechungsart", CType(berechnungsart_sql, Integer)))
    26. 'Try
    27. If txt_master_1.Text = "" Then
    28. Else
    29. tsnr_sql = CInt(txt_tsnr.Text)
    30. sorte_sql = 1
    31. kreditart_sql = 1
    32. prozent_sql = CSng(txt_master_1.Text)
    33. berechnungsart_sql = CInt(cb_prov1.SelectedIndex)
    34. cmd.ExecuteNonQuery()
    35. End If
    36. If txt_master_2.Text = "" Then
    37. Else
    38. tsnr_sql = CInt(txt_tsnr.Text)
    39. sorte_sql = 2
    40. kreditart_sql = 1
    41. prozent_sql = CSng(txt_master_2.Text)
    42. berechnungsart_sql = CInt(cb_prov1.SelectedIndex)
    43. cmd.ExecuteNonQuery()
    44. End If
    45. ' cmd.ExecuteNonQuery()
    46. cmd.Dispose()
    47. myConnection.Close()
    48. ' Catch ex As Exception
    49. 'MsgBox(ex.Message)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jnpanzer“ ()

    Tja mit der Meldung kann ich nichts anfangen, denn es kann nicht sein.
    Es ist der Primärschlüssel auf tsnr kreditart und sorte

    In meinen ersten Beispiel
    Es hat der Eintragen in die DB ohne den zweiten Zeile Funktioniert
    Wenn ich die erste Zeile dann ausklammer danach wurde die zweite Zeile eingetragen.
    Ich gehe davon aus das der SQL Befehl funktioniert.

    Fehlermeldung:
    Ein Ausnahmefehler des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.

    Zusätzliche Informationen: Die von Ihnen gewünschten Änderungen an der Tabelle konnten nicht vorgenommen werden, da der Index,
    der Primärschlüssel oder die Beziehung mehrfach vorkommende Werte enthalten würde. Ändern Sie die Daten in den Feldern, die gleiche Daten enthalten,
    entfernen Sie den Index, oder definieren Sie den Index neu, damit doppelte Einträge möglich sind, und versuchen Sie es erneut.
    offensichtlich versuchst du 2mal den gleichen Datensatz abzuspeichern.

    Du machst da auch iwas ganz komisches.
    Erst tust du die Variablen in die Parameter, dann weist du den Variablen Werte aus Textboxen etc zu.
    Aber dann ists ja zu spät - die Variablen wurden ja schon zuvor in die Parameter gesteckt, als sie noch leer waren.

    jnpanzer schrieb:

    Ich werde wohl das noch mal neue machen müssen.
    Erzeuge die Connection und das Command nur einmal, und zwar nicht in der Click-Methode, weil die wird ja öfter aufgerufen.

    In der Click-Methode kannst du die einmal erzeugten OleDb-Objekte benutzen, mehrmals sogar - ganz wie gewünscht

    VB.NET-Quellcode

    1. Private _Connection As OleDbConnection
    2. Private _InsertCommand As OleDbCommand
    3. Private Sub InitOleDb()
    4. Dim connString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}dbminasatabellen.accdb", DB)
    5. _Connection = New OleDbConnection(connString)
    6. Dim str = "INSERT INTO tabatabellen([tsnr], [sorte], [kreditart], [prozent], [berechnungsart]) values (?,?,?,?,?)"
    7. _InsertCommand = New OleDbCommand(str, _Connection)
    8. _InsertCommand.Parameters.Add(New OleDbParameter("tsnr", OleDbType.Integer))
    9. _InsertCommand.Parameters.Add(New OleDbParameter("sorte", OleDbType.Integer))
    10. _InsertCommand.Parameters.Add(New OleDbParameter("kreditart", OleDbType.Integer))
    11. _InsertCommand.Parameters.Add(New OleDbParameter("prozent", OleDbType.Single))
    12. _InsertCommand.Parameters.Add(New OleDbParameter("berechungsart", OleDbType.Integer))
    13. End Sub
    14. Private Sub cmd_atabelle_schreiben_Click(sender As Object, e As EventArgs) Handles cmd_atabelle_schreiben.Click
    15. Dim sorte1 = 1
    16. Dim sorte2 = 2
    17. Dim karte1 = 1
    18. _Connection.Open()
    19. If txt_master_1.Text <> "" Then
    20. _InsertCommand.Parameters("tsnr").Value = CType(txt_tsnr.Text, Integer)
    21. _InsertCommand.Parameters("sorte").Value = CType(sorte1, Integer)
    22. _InsertCommand.Parameters("kreditart").Value = CType(karte1, Integer)
    23. _InsertCommand.Parameters("prozent").Value = CType(txt_master_1.Text, Single)
    24. _InsertCommand.Parameters("berechungsart").Value = CType(cb_prov1.SelectedIndex, Integer)
    25. _InsertCommand.ExecuteNonQuery()
    26. End If
    27. If txt_master_2.Text <> "" Then
    28. _InsertCommand.Parameters("sorte").Value = CType(txt_tsnr.Text, Integer)
    29. _InsertCommand.Parameters("sorte").Value = CType(sorte2, Integer)
    30. _InsertCommand.Parameters("kreditart").Value = CType(karte1, Integer)
    31. _InsertCommand.Parameters("prozent").Value = CType(txt_master_2.Text, Single)
    32. _InsertCommand.Parameters("berechungsart").Value = CType(cb_prov1.SelectedIndex, Integer)
    33. _InsertCommand.ExecuteNonQuery()
    34. End If
    35. _Connection.Close()
    36. End Sub

    Leider komme ich nicht weiter
    Ich habe das mal bei mir eingefügt nunkommt es zum Fehler bei der ersten Connection

    Fehlercode
    Ein Ausnahmefehler des Typs "System.NullReferenceException" ist in panzer.exe aufgetreten.
    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    Das deutet darauf hin das du versuchst an irgenteiner Stelle nix zu verarbeiten, das System erwartet aber nicht nix.
    Schau dir im Debuging mal an was gemacht wird wenn der Fehler auftritt.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Stimmt dein Connection String?

    Source={0}dbminasatabellen.accdb ist in der Variable DB die du in {0} einfügst ein "\" am Ende?
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Beider Varianten habe ich schon problert
    die 2.Variante muss laufen.

    VB.NET-Quellcode

    1. Private Sub InitOleDb()
    2. DIM DB as String
    3. DB = "C:\DB\"
    4. Dim connString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}dbminasatabellen.accdb", DB)
    5. _Connection = New OleDbConnection(connString)
    6. Dim str = "INSERT INTO tabatabellen([tsnr], [sorte], [kreditart], [prozent], [berechnungsart]) values (?,?,?,?,?)"


    und hatte auch das schon probiert, Variante 2

    VB.NET-Quellcode

    1. Private Sub InitOleDb()
    2. Dim connString = "Provider=Microsoft.ACE.OLEDB.12.0;" &
    3. "Data Source=C:\DB\dbminasatabellen.accdb"
    4. _Connection = New OleDbConnection(connString)
    5. Dim str = "INSERT INTO tabatabellen([tsnr], [sorte], [kreditart], [prozent], [berechnungsart]) values (?,?,?,?,?)"
    Die Sub "InitOleDb" hast du auch Aufgerufen?
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    jnpanzer schrieb:

    Jetzt habe ich und nun will er wenigstrens in dei DB Schreiben "_InsertCommand.ExecuteNonQuery()"

    War da noch eine Frage drin?
    Wenn nicht, viel erfolg :)
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."