Datentypkonflikt

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von Yanbel.

    @Yanbel
    lege den Adapter weiter oben extra für diese Form fest hab jede kleinigkeit überprüft es besteht keine chance das dort ein anderer Parameter ist.
    Komisch Komisch
    Aber hier erstmal alles von Anfang an an Code:

    Quellcode

    1. Private Sub EditToolStripMenuItem3_Click(sender As Object, e As EventArgs) Handles EditToolStripMenuItem3.Click
    2. Dim editlicense As New LicenseEdit
    3. editlicense.bslicenses = bslicenses
    4. editlicense.Softwareid = DgvSoftware.CurrentRow.Cells(0).Value
    5. editlicense.ShowDialog()
    6. End Sub


    Das ist alles was dazu auf der Main Form gemacht wird

    hier der Rest:

    Quellcode

    1. Public con As New OleDbConnection(")
    2. Public dapcs2 As New OleDbDataAdapter
    3. Public dtcombosoftware As New DataTable
    4. Public Property Softwareid As Integer
    5. Public Property bslicenses As BindingSource
    6. <Obsolete>
    7. Private Sub LicenseEdit_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. Dim cb11 As New OleDbCommandBuilder(dapcs2)
    9. Dim cmd As New OleDbCommand
    10. cmd.Parameters.AddWithValue("@sofid", Softwareid)
    11. cmd.CommandText = "Select * From Licenses where software_id = @sofid"
    12. cmd.Connection = con
    13. dapcs2.SelectCommand = cmd
    14. dapcs2.Fill(dtcomboSoftware)
    15. bslicenses.DataSource = dtcombosoftware
    16. cbblicense.DataSource = bslicenses
    17. cbblicense.DisplayMember = "license"
    18. txtlicense.DataBindings.Add("Text", bslicenses, "license")
    19. numamount.DataBindings.Add("Value", bslicenses, "overall")
    20. lblHeader.Text = "Edit license-" & txtlicense.Text
    21. End Sub
    22. Private Sub Btncanceleditlicenses_Click(sender As Object, e As EventArgs) Handles btncanceleditlicenses.Click
    23. Form1.Show()
    24. Close()
    25. End Sub
    26. Private Sub Btneditlicenses_Click(sender As Object, e As EventArgs) Handles btneditlicenses.Click
    27. bslicenses.EndEdit()
    28. dtcombosoftware.GetChanges()
    29. If dtcombosoftware.GetChanges IsNot Nothing Then
    30. If MessageBox.Show("Do you want to save your changes?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
    31. dapcs2.Update(dtcombosoftware)
    32. End If
    33. End If
    34. Form1.Show()
    35. Close()
    36. End Sub
    37. End Class

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

    Hast du in irgendeiner Stelle deines Codes folgenden Variablen gefüllt?

    dapcs2.UpdateCommand
    dapcs2.InsertCommand
    dapcs2.DeleteCommand

    Kenne mich mit OleDB nicht aus, aber ich schätze mal die müssen gefüllt sein

    docs.microsoft.com/de-de/dotne…ter?view=netframework-4.8

    Dein Adapter weiß jetzt nur, was ein SelectCommand ist.

    Und nimm den ConnectionString aus deinem Beispiel raus ;)


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

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

    @Yanbel
    Huch da weißt jetzt wohl wie ich heiße :D. Danke fürs drauf Aufmerksam machen.
    Nein der DataAdapter regelt das von selbst und generiert dann den passenden Befehl in dem er entweder Updated, Inserted oder Deleted. Hab ich zumindest so verstanden
    und auch schon an allen anderen Forms erfolgreich angewendet das ist auch der Grund warum es mich so wundert das der Code nicht funzt 8| .
    Sicher dass er nicht anhand deines Select-Statements ein passendes Schema baut und die Where-Klausel einfach aus dem SELECT-Command übernimmt kopiert?

    Setz mal einen Breakpoint an dieser Stelle:

    VB.NET-Quellcode

    1. dapcs2.Update(dtcombosoftware)


    Und schau in den Adapter rein, welches UpdateStatement er verwenden will.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.
    Keine Ahnung warum der Code bei dir lauffähig war, ich musste ihn ein wenig anpassen und jetzt funktioniert alles inkl. Schreiben in die Datenbank:

    VB.NET-Quellcode

    1. Public con As New OleDbConnection("Data Source=DEINEIP;Initial Catalog=DEINEDATENBANK;User Id=USER;Password=PASSWORT;Provider=SQLOLEDB;")
    2. Public dapcs2 As New OleDbDataAdapter
    3. Public dtcombosoftware As New DataTable
    4. Public Property Softwareid As Integer
    5. Public Property bslicenses As New BindingSource
    6. Private Sub LicenseEdit_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. Dim cb11 As New OleDbCommandBuilder(dapcs2)
    8. Dim cmd As New OleDbCommand
    9. cmd.Parameters.Add("@sofid", OleDbType.Integer, 0, "software_id").Value = Softwareid
    10. cmd.CommandText = "SELECT * FROM Licenses WHERE software_id = ?"
    11. cmd.Connection = con
    12. dapcs2.SelectCommand = cmd
    13. dapcs2.Fill(dtcombosoftware)
    14. bslicenses.DataSource = dtcombosoftware
    15. cbblicense.DataSource = bslicenses
    16. cbblicense.DisplayMember = "license"
    17. txtlicense.DataBindings.Add("Text", bslicenses, "license")
    18. lblHeader.Text = "Edit license-" & txtlicense.Text
    19. End Sub
    20. Private Sub Btncanceleditlicenses_Click(sender As Object, e As EventArgs) Handles btncanceleditlicenses.Click
    21. Close()
    22. End Sub
    23. Private Sub Btneditlicenses_Click(sender As Object, e As EventArgs) Handles btneditlicenses.Click
    24. bslicenses.EndEdit()
    25. dtcombosoftware.GetChanges()
    26. If dtcombosoftware.GetChanges IsNot Nothing Then
    27. If MessageBox.Show("Do you want to save your changes?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
    28. dapcs2.Update(dtcombosoftware)
    29. End If
    30. End If
    31. Close()
    32. End Sub



    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Yanbel“ ()

    @Yanbel

    Da komm ich auf die Arbeit und sehe das ^^. Mag eigentlich nicht wenn ich Code gestellt bekomme deshalb hab ich mir das erst kurz angeschaut. Du hast im CommandText statt den Parameternamen ein Fragezeichen benutzt liegt.
    normalerweise meines Wissens wirds nicht so gemacht hängt das damit zusammen das man Den DataAdapter noch dabei hat?

    und 2tens. Riesiges Danke Probiere den Code gleich mal aus hast mir aufjedenfall riesig geholfen^^.

    mfg
    Fabimaurice
    @fabimaurice

    Genau, in Verbindung mit dem DataAdapter werden die Skalarvariablen mit einem ? übergeben, damit der Adapter daraus ein Schema generieren kann.

    Kann verstehen, dass du es nicht magst, wenn du Code gestellt bekommst, aber das war hier ja nicht der Fall. 90% des Codes stammen ja von dir und das der DataAdapter ein Schema generiert, hätte ich ohne deine Vorarbeit auch nicht gewusst. War also Teamwork :thumbsup: .

    Sag mal bescheid, wenn das bei dir jetzt auch hinhaut. ;)


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.