DropDown mit Daten aus MySQL DB füttern

  • VB.NET

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von samson.

    Bei dieser Art von Combobox-Einsatz braucht man den Valuemember garnet zu belegen.
    Den selektierten Datensatz kann man aus BindingSource.Current abrufen. Jedenfalls, wenn man ein typisiertes Dataset verwenden täte.

    So kannste aber mit

    VB.NET-Quellcode

    1. dim drv= directCast( myDataView(Combo.SelectedIndex) , DataRowView)
    auch sowas ähnliches abrufen wie eine DataRow.
    Moin Moin Zusammen...

    nun ist einige Zeit ins Land gegangen,... Und ich bin immernoch am "basteln"... Leider immernoch ohne Erfolg...
    Ich hab die ersten 30 Seiten der Suchergebnisse von Google durchprobiert,... ohne Erfolg...

    Hier nun mein aktueller Stand und mein Problem...

    VB.NET-Quellcode

    1. Dim MysqlConn As MySqlConnection
    2. Dim COMMAND As MySqlCommand
    3. Dim READER As MySqlDataReader
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. Button2.Enabled = False
    6. PictureBox1.Visible = False
    7. MysqlConn = New MySqlConnection
    8. MysqlConn.ConnectionString = "server=ipadresse;uid=user;pwd=passwort;database=vb_test;port=3306;"
    9. Try
    10. MysqlConn.Open()
    11. Label2.Text = "Datenbankverbindung: OK"
    12. Dim Query As String
    13. Query = "SELECT * FROM vb_test.ms_kunden WHERE id = '1' ORDER BY matchcode"
    14. COMMAND = New MySqlCommand(Query, MysqlConn)
    15. READER = COMMAND.ExecuteReader
    16. While READER.Read
    17. 'Dim matchcode = READER.GetString("matchcode")
    18. 'ComboBox1.Items.Add(matchcode)
    19. TextBox1.Text = CStr(READER.GetInt32(CInt("matchcode"))) 'andere Schreibweisen versucht... Ohne Erfolg (READER.GetInt32(CInt("matchcode")) oder READER.GetInt32("matchcode") oder
    20. End While
    21. MysqlConn.Close()
    22. Catch ex As MySqlException
    23. MessageBox.Show(ex.Message)
    24. Finally
    25. MysqlConn.Dispose()
    26. End Try
    27. End Sub


    Anstatt TextBox1.Text = READER.GetString("matchcode")
    habe ich schon das versucht...

    VB.NET-Quellcode

    1. While READER.Read
    2. Dim matchcode = READER.GetString("matchcode")
    3. ComboBox1.Items.Add(matchcode)
    4. End While


    Beim Debuggen kommt die Fehlermeldung die ich angehängt habe...


    Vielleicht kann mir ja jemand dabei helfen...
    Danke schon mal :)

    NACHTRAG!
    Option Strict On ist aktiv...
    Die Frage die sich mir dabei stellt ist lediglich, woher nimmt er Zahlen... Ich frage in der MySQL-DB doch einen "Namen" ab...
    Nein! Doch! OHH!

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

    Wie bitte sehr soll man "matchcode" in eine Ganzzahl konvertieren? Da hat doch VB keine Ahnung wie das gehen soll. Ich denke mal selbst du hast keine Ahnung wie das gehen soll. Oder wie stellst du dir das vor. Mach mal aus "matchcode" eine Ganzzahl. Wenn du irgendwo ein Feld mit Namen matchcode definiert hast, dann musst du die Anführungszeichen weglassen. Ansonsten wird das als String gewertet.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Sorry! Hab den Fehler gefunden,... 1. wie @shaebich schon geschrieben hatte,... vergessen den Limit 1 weg zu nehmen bzw. den einen datensatz nur zu laden.
    2. Fehler lag irgendwo in der ComboBox... Weiße Schrift auf weißem Hintergrund... Warum auch immer... daran hatte ich nichts verändert...

    nach nun weiteren 9 stunden googlen bin ich auch fündig geworden...

    VB.NET-Quellcode

    1. Private Sub FillComboBox()
    2. Dim conn As New MySqlConnection
    3. Dim myCommand As New MySqlCommand
    4. Dim myAdapter As New MySqlDataAdapter
    5. Dim dsToBeFilled As New DataSet
    6. Dim SQL As String
    7. conn = New MySqlConnection()
    8. conn.ConnectionString = "server=localhost;uid=test;pwd=test;database=vb_test;port=3306;"
    9. SQL = "SELECT * FROM ms_kunden"
    10. Try
    11. conn.Open()
    12. myCommand.Connection = conn
    13. myCommand.CommandText = Sql
    14. myAdapter.SelectCommand = myCommand
    15. myAdapter.Fill(dsToBeFilled)
    16. For Each row As DataRow In dsToBeFilled.Tables(0).Rows
    17. ComboBox1.Items.Add(row.Item("kdnr").ToString() & " - " & row.Item("matchcode").ToString())
    18. Next
    19. Catch myerror As MySqlException
    20. MessageBox.Show("Error connecting to the database: " & myerror.Message)
    21. End Try
    22. End Sub


    ich komme aber nicht auf die kdnr, das ich diese weiter verarbeiten kann...
    Kann mir da nochmal wer helfen?
    Nein! Doch! OHH!

    samson schrieb:

    Hab den Fehler gefunden,... vergessen den Limit 1 weg zu nehmen

    In Deinem Posting Nr.25 gibts kein LIMIT, nur eine Bedingung, also hast Du es leider nicht verstanden :rolleyes: .
    Trotzdem weiterhin viel Spaß beim Raten.
    Wie wäre es mit einem nützlichen Buch für Grundlagen?
    Es wäre für Dich befriedigender, wenn Du verstehst was Du tust.
    Naja kein plan was du 9 Stunden lang bei google gesucht hast. Aber nach ca. 2min und 2 Klicks komm ich auf die Seite:

    dotnetspider.com/resources/431…ate-delete-Operation.aspx

    Dort ist eig. alles aufgeführt was man braucht. Wenn du jetzt noch das DataGridView durch deine ComboBox austauscht, hast du die Member in der ComboBox...:D

    So schwer kanns doch nicht sein. Bekommst du die richtigen Werte mit deiner Abfrage? ... Eventuell solltest du dir auch SQL anschauen.

    Quellcode

    1. Select * From ALL


    ist nicht alles was man können muss ...

    samson schrieb:

    For Each row As DataRow In dsToBeFilled.Tables(0).Rows
    ComboBox1.Items.Add(row.Item("kdnr").ToString() & " - " & row.Item("matchcode").ToString())
    Next


    Wie wäre es, wenn du diesen Part eventuell einfach mal an ein DataGridView bindest um zu schaun ob du überhaupt Werte aus deinem SQL String bekommst? Anstatt wie wild 2 Strings miteinander verknüpfen zu wollen und diese in einer ComboBox auszugeben.
    Moin Moin,

    erstmal danke an alle... Ich habe eine annehmbare Lösung hinbekommen...

    Hier der Code von meinem Projekt...

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.Net.Mail
    3. Imports MySql
    4. Imports MySql.Data
    5. Imports MySql.Data.MySqlClient
    6. Public Class Form1
    7. Public filename As String = Nothing
    8. Public filetarget As String = Nothing
    9. Public kdnr As String = Nothing
    10. Dim MysqlConn As MySqlConnection
    11. Dim COMMAND As MySqlCommand
    12. Dim READER As MySqlDataReader
    13. Dim WithEvents Upload As Net.WebClient
    14. Private Sub UploadFTP(ByVal Datei As String, _
    15. ByVal Dateiname As String, _
    16. ByVal Ftp As String, _
    17. ByVal Benutzername As String, _
    18. ByVal Passwort As String)
    19. ' WebClient
    20. Upload = New Net.WebClient
    21. ' URL mit Zieldatei
    22. Dim url As String = Ftp & IIf(Ftp.EndsWith("/"), "", "/") & Dateiname
    23. ' Anmeldedaten am FTP-Server
    24. Upload.Credentials = New Net.NetworkCredential(Benutzername, Passwort)
    25. ' Datei asnychron uploaden
    26. Upload.UploadFileAsync(New Uri(url), Datei)
    27. End Sub
    28. Private Sub Upload_UploadFileCompleted(ByVal sender As Object, _
    29. ByVal e As System.Net.UploadFileCompletedEventArgs) Handles Upload.UploadFileCompleted
    30. MysqlConn = New MySqlConnection
    31. MysqlConn.ConnectionString = "server=server;uid=user;pwd=passwort;database=db;port=3306;"
    32. Try
    33. MysqlConn.Open()
    34. ToolStripStatusLabel1.Text = "Datenbankverbindung: OK"
    35. Dim Query As String
    36. Query = "INSERT INTO ms_archiv (kdnr, file) VALUES ('" + kdnr + "', '" + filename + "')"
    37. COMMAND = New MySqlCommand(Query, MysqlConn)
    38. READER = COMMAND.ExecuteReader
    39. MysqlConn.Close()
    40. Catch ex As MySqlException
    41. MessageBox.Show(ex.Message)
    42. Finally
    43. MysqlConn.Dispose()
    44. End Try
    45. MsgBox("Datei an KMS übergeben", MsgBoxStyle.Exclamation, "Information")
    46. ProgressBar1.Visible = False
    47. lblProgress.Visible = False
    48. Button1.Enabled = False
    49. End Sub
    50. Private Sub Upload_UploadProgressChanged(ByVal sender As Object, _
    51. ByVal e As System.Net.UploadProgressChangedEventArgs) Handles Upload.UploadProgressChanged
    52. ProgressBar1.Value = e.ProgressPercentage
    53. ProgressBar1.Refresh()
    54. lblProgress.Text = e.ProgressPercentage & "%"
    55. End Sub
    56. Private Sub FillComboBox()
    57. Dim conn As New MySqlConnection
    58. Dim myCommand As New MySqlCommand
    59. Dim myAdapter As New MySqlDataAdapter
    60. Dim dsToBeFilled As New DataSet
    61. Dim SQL As String
    62. conn = New MySqlConnection()
    63. conn.ConnectionString = "server=server;uid=user;pwd=passwort;database=db;port=3306;"
    64. SQL = "SELECT * FROM ms_kunden"
    65. Try
    66. conn.Open()
    67. myCommand.Connection = conn
    68. myCommand.CommandText = SQL
    69. myAdapter.SelectCommand = myCommand
    70. myAdapter.Fill(dsToBeFilled)
    71. For Each row As DataRow In dsToBeFilled.Tables(0).Rows
    72. ComboBox1.Items.Add(row.Item("matchcode").ToString())
    73. Next
    74. ToolStripStatusLabel1.Text = "Datenbankverbindung: OK"
    75. Catch myerror As MySqlException
    76. MessageBox.Show("Error connecting to the database: " & myerror.Message)
    77. End Try
    78. End Sub
    79. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    80. Button1.Enabled = False
    81. Button2.Enabled = False
    82. PictureBox1.Visible = False
    83. lblProgress.Visible = False
    84. FillComboBox()
    85. End Sub
    86. Public Function scanImage() As String
    87. 'Pfad zur Temp Datei des erfassten Bildes
    88. Dim strTempImagePath As String = String.Empty
    89. 'Windows GUI zur Interaktion mit dem Gerät
    90. Dim wiaDialog As New WIA.CommonDialog
    91. 'Variable für das erfasste Bild
    92. Dim wiaImage As WIA.ImageFile = Nothing
    93. Try
    94. 'Aufruf der Windows GUI zur Interaktion mit dem Gerät,
    95. 'rückgabe ist das erfasste Bild
    96. wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, , , , False, )
    97. Catch ex As Exception
    98. MsgBox("Ein Fehler ist aufgetreten! Überprüfen Sie ob das Gerät Eingeschaltet und angeschlossen ist." & Environment.NewLine & Environment.NewLine & ex.Message)
    99. End Try
    100. If Not wiaImage Is Nothing Then
    101. 'Bild temporär Speichern
    102. Dim rnd As New Random
    103. Dim ZufallsZahl As Integer = rnd.Next(12, 600000000)
    104. filename = "tempfile_" & ZufallsZahl & ".jpg"
    105. filetarget = "C:\Temp\tempfile_" & ZufallsZahl & ".jpg"
    106. wiaImage.SaveFile(filetarget)
    107. PictureBox1.Visible = True
    108. PictureBox1.Image = New Bitmap(filetarget)
    109. Button2.Enabled = True
    110. Else
    111. MsgBox("Es wurde kein Bild erfasst!", MsgBoxStyle.Exclamation, "Information")
    112. End If
    113. Return strTempImagePath
    114. End Function
    115. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    116. scanImage()
    117. PictureBox1.Visible = True
    118. End Sub
    119. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    120. ProgressBar1.Value = 0
    121. ProgressBar1.Visible = True
    122. Dim sFile As String = "C:\Temp\" & filename
    123. Dim sDestFile As String = filename
    124. Dim sServer As String = "ftp://domain.de/scans"
    125. Dim sUser As String = "user"
    126. Dim sPwd As String = "passwort"
    127. UploadFTP(sFile, sDestFile, sServer, sUser, sPwd)
    128. PictureBox1.Visible = False
    129. Button2.Enabled = False
    130. End Sub
    131. Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    132. End Sub
    133. Private Sub ComboBox1_TextChanged(sender As Object, e As System.EventArgs) Handles ComboBox1.TextChanged
    134. Button1.Enabled = True
    135. MysqlConn = New MySqlConnection
    136. MysqlConn.ConnectionString = "server=server;uid=user;pwd=passwort;database=db;port=3306;"
    137. Try
    138. MysqlConn.Open()
    139. ToolStripStatusLabel1.Text = "Datenbankverbindung: OK"
    140. Dim Query As String
    141. Query = "SELECT kdnr FROM ms_kunden WHERE matchcode = '" & ComboBox1.Text & "'"
    142. COMMAND = New MySqlCommand(Query, MysqlConn)
    143. READER = COMMAND.ExecuteReader
    144. While READER.Read
    145. TextBox1.Text = READER.GetInt32(0)
    146. kdnr = TextBox1.Text
    147. End While
    148. MysqlConn.Close()
    149. Catch ex As MySqlException
    150. MessageBox.Show(ex.Message)
    151. Finally
    152. MysqlConn.Dispose()
    153. End Try
    154. End Sub
    155. End Class


    Danke an alle...
    Nein! Doch! OHH!