Durch Benutzerauswahl festgelegte Daten aus Access Datenbank importieren

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Marsianer.

    Durch Benutzerauswahl festgelegte Daten aus Access Datenbank importieren

    Hallo erst mal,
    ich bin zum ersten Mal hier, finde das Forum aber sehr gut gelungen und es scheint auch viele User mit ner Menge Ahnung zu geben, die ich leider nicht habe. Leider habe ich für mein Problem noch keine Lösung gefunden. So ähnliche Ansätze schon, aber das hat mir bisher nicht viel geholfen.

    Ich bin in VB ein ziemlicher Anfänger, das sei erst mal gesagt. Ich muss jetzt ein Programm schreiben, in dem ich auch mit Access Datenbanken zu tun habe. Der Datenbankzugriff allgemein ist kein Problem.
    Ich habe eine Access Datenbank die aus 50 Zeilen mit unterschiedlichen Materialen. Ich habe 3 Spalten, die erste ist lediglich eine laufende Nummer, die zweite Spalte beeinhaltet den Materialnamen und die dritte Spalte die für das Programm wichtige Materialkonstante. Diese Datenbank mit den Angaben importiere ich dann in eine ComboBox, wo der Anwender später durch Anklicken sich ein Material aussuchen kann. Nach der Auswahl möchte ich die zu dem Material passende Materialkonstante als Variable importieren, so dass ich diese in späteren Berechnungen verwenden kann. Ich habe schon einiges Ausprobiert, und denke, dass ich mit ExecuteReader bestimmte Daten auslesen kann, weiß aber nicht wie. Ich füge mal den Quellcode des allgemeinen Imports an.

    Kann jemand helfen?

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim con As New OleDbConnection
    3. Dim cmd As New OleDbCommand
    4. Dim reader As OleDbDataReader
    5. con.ConnectionString =
    6. "Provider=Microsoft.ACE.OLEDB.12.0;" &
    7. "Data Source=C:\Users\Michael\Desktop\Projekt Industrieofen Software\Datenbanken\Materialtabelle.accdb"
    8. cmd.Connection = con
    9. cmd.CommandText = "select * from Materialtabelle"
    10. Try
    11. con.Open()
    12. reader = cmd.ExecuteReader()
    13. ComboBox1.Items.Clear()
    14. Do While reader.Read()
    15. ComboBox1.Items.Add(
    16. reader("Materialnummer") & " - " &
    17. reader("Bezeichnung") & " - ( " &
    18. reader("Wärmeleitfähigkeit") & " W/m*K )")
    19. Loop
    20. reader.Close()
    21. con.Close()
    22. Catch ex As Exception
    23. MessageBox.Show(ex.Message)
    24. End Try
    25. End Sub
    Das sieht mir nach einer ziemlich winzigen DB aus, da würde ich einfach alle Materials auslesen.

    Zunächst mal aber mit typisiertem Dataset, Databinding und DatagridView beschäftigen, weil Reader und Zeugs kann man dabei nicht gebrauchen.

    gugge "Datenbank in 10 Minuten" auf Movie-Tuts
    Anfangs lese ich ja auch alles aus. Aber wie komme ich später an einen Wert in Zeile X Spalte Y der Datenbank, nachdem der Benutzter aus der ComboBox ein Material ausgewählt hat, welches in Zeile X steht? Habe mal Screenshots angehängt wie ich mir das Benutzerseitig bisher vorstelle. Die Daten werden wunderbar in die ComboBox geladen, aber wie weise ich die Materialkonstante (in Klammern hinter dem Materialnamen) einer Variable zu?



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

    Habe das Problem gelöst bekommen, wenn auch sicher nicht auf die einfachste Art, aber was anderes hab ich nicht hinbekommen. Vielen dank an ErfinderDesRades für die versuchte Hilfestellung.


    VB.NET-Quellcode

    1. Dim con As New OleDbConnection
    2. Dim cmd As New OleDbCommand
    3. Dim reader As OleDbDataReader
    4. con.ConnectionString =
    5. "Provider=Microsoft.ACE.OLEDB.12.0;" &
    6. "Data Source=C:\Users\Michael\Desktop\Projekt Industrieofen Software\Datenbanken\Materialtabelle.accdb"
    7. cmd.Connection = con
    8. cmd.CommandText = "select * from Materialtabelle where Materialnummer = '" & Mid(ComboBox1.SelectedItem.ToString, 1, 2) & "'"
    9. Try
    10. con.Open()
    11. reader = cmd.ExecuteReader()
    12. Do While reader.Read()
    13. materialkonstante1 = (reader("Wärmeleitfähigkeit"))
    14. Loop
    15. reader.Close()
    16. con.Close()
    17. Catch ex As Exception
    18. MessageBox.Show(ex.Message)
    19. End Try
    gugge die SampleSolution von [VB 2010] Leere Zeile von Bindingsource anzeigen bei Combobox.selectedindex=-1
    wenn man da in den Combos was einstellt, wird diese Einstellung in den Datensatz direkt gespeichert - ich vermute mit "einer Variablen diesen Wert zuweisen" ist damit gemeint.
    Ne ich meinte eigentlich nur, dass ich den Wert einer programminternen Variable zuweisen möchte. An der Datenbank möchte ich (soweit geplant) über VB nichts ändern. Aber es hört sich interessant an, vielleicht lassen sich da auf einfache Weise einige Zusatzfunktionen einbauen. Danke

    Inzwischen ist mir aber etwas weiteres aufgefallen: Da ich im Programm ein Verzeichnis zur Datenbank angegeben habe, muss sich, wenn ich das Programm weiter geben möchte, die Datenbank am anderen Rechner genau im Selben Verzeichnis befinden. Wie kann ich das ändern? Ich kann ja auch die Datenbank über den Dantenbank-Explorer anhängen, was ich eigentlich nicht wollte, da ich allein über den Code nicht so ein Durcheinander bekomme. So wie es jetzt ist ist es wenigstens übersichtlich. Da mir aber vermutlich nichts anderes übrig bleibt, wüsste ich gerne, wie ich den entsprechenden Datenbankaufruf (aktuell ja mit Verzeichnisangabe) ändern muss. Habe dazu auch nichts direktes gefunden.

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

    Ich fass mal kurz zusammen, wie ich dein Problem verstanden habe:
    Du hast eine Combobox, die mit Werten aus einer DB befüllt wird. Der User wählt eine Zeile aus und das Ergebnis soll in eine Programmvariable gespeichert werden. In der Combo wird was anderes angezeigt (Materialname), als das, was gespeichert werden soll (Materialwert).

    Wenns so ist:
    Combos haben genau dafür entsprechende Eigenschaften:
    Mit DataSource stellste ein, wo deine Daten herkommen, das kann auch ein Array, ne ArrayList usw. sein. Du kannst also die erforderlichen Daten aus der DB holen und in einem Array/einer List oder so zwischenspeichern. Das Teil bindest du als DataSource an deine Combo.
    Mit DisplayMember stellst du die angezeigten Werte auf den Materialnamen ein
    Mit ValueMember stellst du die ausgewählten Werte auf die Materialkonstante
    Mit MeineVariable = MeineCombo.SelectedValue liest du die Materialkonstante aus und weist sie der Variablen zu
    Das ganze kannste steuern über das SelectedValueChanged-Ereignis der Combo.

    Auf msdn ist ein Beispiel dafür (da werden die db-Daten vorher noch in eine Klasse gepackt). Das Beispiel ist fürchterlich kompliziert geschrieben, damit man es per CopyAndPaste einfach rüberkopieren und ausprobieren kann. Versuch dich mal da durchzubeißen.
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D

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