Datenbankprogrammierung, Access und VB.NET

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    Datenbankprogrammierung, Access und VB.NET

    Hallo,

    ich habe da ein dringendes Problem. Habe mich angemeldet da ich nicht mehr weiterkomme.
    Meine Abschlussarbeit geht über eine Permanentinventur die über Access läuft und ich per VB.NET programmiere. (Bin eindeutig kein Profi aber guter Anfänger)
    Meine Datenbank ist wie folgt aufgebaut: Bild im Anhang

    Ein paar Beispieldatensätze habe ich bereits eingetragen, die Trage ich durch ein Button ein:



    VB.NET-Quellcode

    1. [/size][/font]
    2. [font='courier new,courier,monospace'][size=12]Private Sub btneinpflegen_Click(sender As Object, e As EventArgs) Handles btneinpflegen.Click
    3. 'Bedingung erstellen ----> Zwangsfunktion: Es müssen ALLE Textfelder ausgefüllt sein
    4. If txtausführungsbezeichnung.Text = "" Or txtartikelnummer.Text = "" Or txtArtikelname.Text = "" Or txtMängelbezeichnung.Text = "" Or txtPreis.Text = "" Or txtZusatzinformationen.Text = "" Then
    5. MessageBox.Show("Bitte alle Informationen ausfüllen!")
    6. 'Erst wenn alles ausgefüllt ist, wird der neue Datensatz errzeugt und in die Datenbank eingefügt
    7. Else
    8. cmd.Connection = con
    9. con.Open()
    10. cmd.CommandText = [sql][/size]"INSERT INTO Artikeldaten(A_Artikelgruppen_ID ,Ausführungsbezeichnung ,Artikelnummer_intern , Artikelname ,A_Qualitätsgruppen_ID ,Mängelbezeichnung ,A_Status_ID ,A_Mitarbeiter_ID,Preis , A_Standort_ID , Zusatzinformation)
    11. Values(" & agrpid & ", '" & Trim(txtausführungsbezeichnung.Text) & "', '" & Trim(txtartikelnummer.Text) & "','" & Trim(txtArtikelname.Text) & "', " & quaid & ", '" & Trim(txtMängelbezeichnung.Text) & "', " & stsid & ", " & mitid & ", '" & Trim(txtPreis.Text) & "', " & stdnr & ", '" & Trim(txtZusatzinformationen.Text) & "')"[/sql][size=12]
    12. cmd.ExecuteNonQuery()
    13. btneinpflegen.Enabled = False
    14. MessageBox.Show("Datensatz wurde erfolgreich eingepflegt.")
    15. con.Close()
    16. 'Der Button wird statt des Buttons clear gezeigt
    17. btnIDlesen.Show()[/size]
    18. [size=12]'Der Button verschwindet wenn alle Bedingungen von btneinpflegen
    19. 'erfüllt sind
    20. btnclear.Visible = False
    21. 'Button Logout enabeled da nach der Datensatzeinpflege erst die Prozedure beendet werden muss
    22. btnlogout.Enabled() = False
    23. 'Textfelder können nicht mehr bearbeitet werden
    24. txtArtikelname.Enabled() = False
    25. txtartikelnummer.Enabled() = False
    26. txtausführungsbezeichnung.Enabled() = False
    27. txtMängelbezeichnung.Enabled() = False
    28. txtPreis.Enabled() = False
    29. txtZusatzinformationen.Enabled() = False
    30. 'der Button Fertig erscheint um das Programm erfolgreich zu beenden
    31. btnfertig.Show()
    32. 'Button Suchen verschwindet da sich nun nur auf den eingegebenen Datensatz konzentriert wird
    33. btnsuchen.Enabled() = False
    34. End If
    35. End Sub[/size]
    36. [/font]






    Nun möchte ich den Satz den ich eingepflegt habe durch die automatisch erstellte ID (Diese notiere ich mir vorher (Wird im Formular nach dem Einpflegen angezeigt))
    suchen und alle Informationen in meinen Comboboxen und Textfeldern wiedergeben. Die IDs sollen natürlich (wie beim einpflegen auch) in den ComboBoxen als Bezeichnung stehen und nicht als ID.
    Durch den Button "suchen" wird nun eine InputBox erstellt in der die ID eingegeben werden kann und danach soll gesucht werden.
    aktueller CODE hierzu ist folgender:



    VB.NET-Quellcode

    1. ​[/font]
    2. Private Sub btnsuchen_Click(sender As Object, e As EventArgs) Handles btnsuchen.Click
    3. 'Wert der Inputbox wird geholt
    4. id = InputBox("Nach welcher Artikel_ID soll gesucht werden?", "id")
    5. 'im Textfeld Artikel_ID wird ausgegraut die ID angezeigt
    6. txtArtikel_ID.Text = id
    7. 'Nun wird die Datenbank durchgesucht wo die ID = die id ist die ich im Textfeld stehem habe
    8. cmd.Connection = con
    9. con.Open()
    10. cmd.CommandText =
    11. [sql]"Select
    12. ad.A_Artikel_ID,
    13. ag.Artikelgruppen_name,
    14. ad.Ausführungsbezeichnung,
    15. ad.Artikelnummer_intern,
    16. ad.Artikelname,
    17. qg.Qualitätsgruppen_Name,
    18. ad.Mängelbezeichnung,
    19. st.Status_Bezeichnung,
    20. ma.Mitarbeiter_Namen,
    21. ad.Preis,
    22. so.Standort_Bezeichnung,
    23. ad.Zusatzinformation
    24. FROM
    25. Artikelgruppen as ag,
    26. Artikeldaten as ad,
    27. Mitarbeiter as ma,
    28. Qualitätsgruppen as qg,
    29. Status as st,
    30. Standort as so
    31. where
    32. ad.A_Artikelgruppen_ID = ag.Artikelgruppen_ID
    33. and ad.A_Mitarbeiter_ID = ma.Mitarbeiter_ID
    34. and ad.A_Qualitätsgruppen_ID = qg.Qualitätsgruppen_ID
    35. and ad.A_Status_ID = st.Status_ID
    36. and ad.A_Standort_ID = so.Standort_ID
    37. and ad.A_Artikel_ID = " & id & ""[/sql][font='courier new,courier,monospace'][size=12]
    38. 'Hier sollen die Daten eingefügt werden
    39. reader = cmd.ExecuteReader
    40. Do While reader.Read()
    41. ' hier sollen die ComboBoxen und die Textfelder mit den Daten der SQL Abfrage "befüllt" werden
    42. Loop
    43. con.Close()
    44. [/size][/font]



    Ein Bild meines Formulares füge ich im Anhang ebenfalls hinzu. Ich brauche dringend Hilfe da mein Projekt bis Mitte nächster Woche komplett fertig sein muss. Ich hoffe jemand kann mir helfen wird wahrscheinlich nicht das einzige Problem bleiben. Hoffe auf schnelle Antwort. Ich hoffe es hilft auch anderen die in einer ähnlichen Problematik stecken.


    LG PL1511

    Bilder
    • Beziehung dtb.JPG

      53,06 kB, 797×504, 306 mal angesehen
    • Lagerform.JPG

      43,38 kB, 604×459, 336 mal angesehen

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „PL1511“ ()

    Willkommen im Forum :)

    bitte verwende den Code-Tag für VB 6.0 oder VB.NET.

    Zudem sprichst du oben von Access/VBA, aber hast das Thema mit VB.NET getaggt. also was nun? Überarbeite das kurz, dann kann man sicherlich auch helfen.


    @PL1511 Zu deiner Frage: schau dir mal das an, das könnte dir helfen :)
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    vielleicht lag es am etwas verspäteten Edit, aber schau dir mal den Link unter Post#2 an.

    Bei VBA Komboboxen gibt es eine Unterscheidung zwischen .Text und .Value. In diesem Link findest du auch ein Bsp, was du eigentlich nur auf dein Projekt anwenden musst.

    VG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Du verwendest kein VBA, wieso schreibst es in den Titel?

    Deine Herangehensweise ist eigentlich Schrott, denn dafür sollte man Databinding verwenden.
    So müsstest du zu Fuss jedem Control einen Wert aus dem Reader zuweisen.

    Also etwa so zum Beispiel

    VB.NET-Quellcode

    1. txtausführungsbezeichnung.Text = reader.Item("Ausführungsbezeichnung").toString


    Ist aber nicht wirklich zu empfehlen, aber keine Ahnung wie weit du bist und ob du so schnell Databinding verstehst, gibt dazu einige Tutorials.
    Kurz bindest du damit Daten (in deinem Fall halt ein SQL Query) and deine Controls und kümmerst dich nicht um SQL.
    Das ist meine Signatur und sie wird wunderbar sein!
    Danke für die ehrliche Antwort.
    Das die Herangehensweise nicht die beste ist dachte ich mir schon und von Databinding habe ich auch schon gehört.
    Da ich keine Anwendungsentwicklering bin, sondern ebend mein Projekt auf Niveau der IT-Kauffrau ist, bin ich nicht soooo vorteilhaft an die Sache herangegangen da gebe ich dir schämend Recht. Bin froh das dass alles bis jetzt auch so läuft
    Einige Sachen die nicht ohne weiteres funktioniert haben bin ich gut "umschifft". Wollte halt jetzt wissen ob jemand ne "einfache" Lösung für dieses Problem hat.

    Danke für jede Antwort


    Aktualisierung:

    Textboxen füllen funktioniert. Sieht zwar nicht schön geschrieben aus aber funktioniert und darum geht es.... hat jemand ne Lösung für die Comboboxen?

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

    Comboboxen haben die Eigenschaften
    ComboBox123.SelectedItem und ComboBox123.SelectedIndex
    Du kannst damit das zu selektierende Item via Code setzen.
    Das ist meine Signatur und sie wird wunderbar sein!
    Ziel ist das finden der ID zum passenden Namen, da knna man doch mit SelectedIndex nichts machen, oder?!
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Man könnte den Index des zu suchenden Items finden und es dann setzen xD
    Ich habe ja auch nur geschrieben das man den beiden Eigenschaften das selektierte Item setzen kann.
    Mit SelectedItem kannst du auch direkt das Item setzen.

    VB.NET-Quellcode

    1. ​comboBox1.SelectedItem = "MeinItemText";


    Aber das funktioniert natürlich nur sinnvoll wenn die Items eindeutig sind.
    Das ist meine Signatur und sie wird wunderbar sein!
    aus meiner Sicht wäre das einfachste eine 2-Spaltige Kombobox.
    1. Spalte id, 0cm breit
    2. Spalte text, Xcm breit


    und beim Select kannst du auf spalte ID die Id auslesen und hast die griffbereit. aus meiner Sicht sollte das immernoch so wies im Link steht am besten gehen xD

    Wie füllst du eig. deine Kombobox?
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    is VB jetzt VBA oder VB.NET. Ich bin von .NET ausgegangen, sry.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    @Acr0most
    VB.Net.... hatte ebend vb stehen sry
    Meine comb werden beim Laden des Forms durch erstellte Funktionen eingelesen:

    VB.NET-Quellcode

    1. 'Funktion zum auslesen der Tabelle "Artikelgruppen"
    2. Function A_grp_lesen() As Dictionary(Of Integer, CArtikelgruppen)
    3. Dim AGruppen As New Dictionary(Of Integer, CArtikelgruppen)
    4. cmd.Connection = con
    5. con.Open()
    6. cmd.CommandText = "SELECT * FROM Artikelgruppen"
    7. reader = cmd.ExecuteReader()
    8. Do While reader.Read()
    9. Dim AGrup As New CArtikelgruppen
    10. AGrup.Artikelgruppen_ID = reader("Artikelgruppen_ID")
    11. AGrup.Artikelgruppen_name = reader("Artikelgruppen_name")
    12. AGruppen.Add(AGrup.Artikelgruppen_ID, AGrup)
    13. Loop
    14. reader.Close()
    15. con.Close()
    16. Return AGruppen
    17. End Function


    Funktion auslesen

    VB.NET-Quellcode

    1. Artikelgruppe = db.A_grp_lesen
    2. cmbartikelgruppe.DataSource = Artikelgruppe.Values.ToList
    3. cmbartikelgruppe.DisplayMember = "Artikelgruppen_name"


    Also wenn ich nicht ganz blöd bin die Richtung die @Mono meinte

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

    Wenn ich die Komboboxen füllen will kann ich die Abfrage dazu nicht auch mit nem "INNER JOIN" machen?

    SQL-Abfrage

    1. ​SELECT
    2. ad.A_Artikel_ID,
    3. ag.Artikelgruppen_name,
    4. qg.Qualitätsgruppen_Name,
    5. st.Status_Bezeichnung,
    6. ma.Mitarbeiter_Namen,
    7. so.Standort_Bezeichnung
    8. FROM
    9. Artikeldaten ad
    10. Inner JOIN
    11. Artikelgruppen ag
    12. ON ad.A_Artikelgruppen_ID = ag.Artikelgruppen_ID
    13. Inner JOIN
    14. Qualitätsgruppen qg
    15. ON ad.A_Qualitätsgruppen_ID = qg.Qualitätsgruppen_ID
    16. Inner JOIN
    17. Status st
    18. ON ad.A_Status_ID = st.Status_ID
    19. Inner JOIN
    20. Mitarbeiter ma
    21. ON ad.A_Mitarbeiter_ID = ma.Mitarbeiter_ID
    22. Inner JOIN
    23. Standort so
    24. ON ad.A_Standort_ID = so.Standort_ID
    25. Inner JOIN
    26. Artikeldaten ad
    27. ON ad.A_Artikel_ID = 39
    Mein Problem mit der Combobox ist leider immernoch nicht gelöst.

    Das die eingelesenen Werte nicht geändert werden können ist mir bewusst, nur kann ich irgendwie die 1. anzeige im Combofeld anzugleichen auf die die ich als Datensatz eingepflegt habe?

    Meine Lösung bis jetzt:

    VB.NET-Quellcode

    1. Private Sub btnsuchen_Click(sender As Object, e As EventArgs) Handles btnsuchen.Click
    2. 'Wert der Inputbox wird geholt
    3. id = InputBox("Nach welcher Artikel_ID soll gesucht werden?", "id")
    4. 'im Textfeld Artikel_ID wird ausgegraut die ID angezeigt
    5. txtArtikel_ID.Text = id
    6. 'Nun wird die Datenbank durchgesucht wo die ID = die id ist die ich im Textfeld stehem habe
    7. cmd.Connection = con
    8. con.Open()
    9. cmd.CommandText =
    10. "Select
    11. ad.A_Artikel_ID,
    12. ag.Artikelgruppen_name,
    13. ad.Ausführungsbezeichnung,
    14. ad.Artikelnummer_intern,
    15. ad.Artikelname,
    16. qg.Qualitätsgruppen_Name,
    17. ad.Mängelbezeichnung,
    18. st.Status_Bezeichnung,
    19. ma.Mitarbeiter_Namen,
    20. ad.Preis,
    21. so.Standort_Bezeichnung,
    22. ad.Zusatzinformation
    23. FROM
    24. Artikelgruppen as ag,
    25. Artikeldaten as ad,
    26. Mitarbeiter as ma,
    27. Qualitätsgruppen as qg,
    28. Status as st,
    29. Standort as so
    30. where
    31. ad.A_Artikelgruppen_ID = ag.Artikelgruppen_ID
    32. and ad.A_Mitarbeiter_ID = ma.Mitarbeiter_ID
    33. and ad.A_Qualitätsgruppen_ID = qg.Qualitätsgruppen_ID
    34. and ad.A_Status_ID = st.Status_ID
    35. and ad.A_Standort_ID = so.Standort_ID
    36. and ad.A_Artikel_ID = " & id & ""
    37. reader = cmd.ExecuteReader
    38. Do While reader.Read()
    39. 'Textboxen werden eingepflegt
    40. txtPreis.Text = reader.Item("Preis").ToString
    41. txtartikelnummer.Text = reader.Item("Artikelnummer_intern").ToString
    42. txtArtikelname.Text = reader.Item("Artikelname").ToString
    43. txtausführungsbezeichnung.Text = reader.Item("Ausführungsbezeichnung").ToString
    44. txtZusatzinformationen.Text = reader.Item("Zusatzinformation").ToString
    45. txtMängelbezeichnung.Text = reader.Item("Mängelbezeichnung").ToString
    46. cmbartikelgruppe.SelectedIndex = cmbartikelgruppe.Items.IndexOf("Artikelgruppen_name")
    47. 'cmbartikelgruppe.ValueMember = "Artikelgruppen_name"
    48. Loop
    49. con.Close()
    50. End Sub​


    Wie schon beschrieben, funktioniert das ausgeben der Textboxen, nur es sollten halt in den Comboboxen der als erster Wert die angezeigt werden die im Datensatz hinterlegt sind. (Wie oben schon beschrieben ist im Datensatz die ID gespeichert und ich möchte halt die Bezeichnung haben.