Access Abfrage / Doppelte Werte sollen in eine Textbox

  • VB.NET
  • .NET (FX) 4.0

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von chenjung.

    Access Abfrage / Doppelte Werte sollen in eine Textbox

    Ich weiß, die Frage ist nicht ganz ohne ^^ Und ich stehe auf dem Schlauch, hoffe ihr könnt mir helfen.

    Ich habe da eine Frage bezüglich der Verbindung zwischen der Access Datenbank und meinem kleinem VB Programm.

    Im Prinzip läuft das Programm, wie es soll. Sprich, es sucht nach eingabe im Textfeld nach dem Eintrag in der DB. Soweit so gut. Sprich, dieses Programm sucht nach Personalnummern und zeigt diese in den Vordefinierten Feldern. Das geht alles gut.

    Jetzt frage ich mich, wie schaffe es, in der jetzigen Abfrage noch eine weitere Abfrage einzubauen, sodass die doppelten Werte in einer Textbox anzeigt werden?

    Beim Buchen (nicht über mein Programm) werden Mitarbeiter Erfasst und auf deren Karten werden Schließfächer gebucht. Und diese Daten kommen in eine .txt Datei. Diese verwende ich und gleiche damit immer meine Access Datenbank ab.

    So sieht die Abfrage aus, über die Suche mit der Personalnummer:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Dim con As New OleDbConnection
    3. Dim cmd As New OleDbCommand
    4. Dim reader As OleDbDataReader
    5. con.ConnectionString =
    6. "Provider=Microsoft.Jet.OLEDB.4.0;" &
    7. "Data Source=C:\Users\DE-96688\Desktop\Datenbank.mdb"
    8. cmd.Connection = con
    9. cmd.CommandText = "select ID, Chipnummer, Ausweisnummer, PersoNr, Bemerkungen, Beschreibung, Kostenstelle, Spinnd from Abgleich WHERE PersoNr ='" & eingabe.Text & " '"
    10. Try
    11. con.Open()
    12. reader = cmd.ExecuteReader()
    13. reader.Read()
    14. ID.Text = reader("ID")
    15. Ausweisnummer.Text = reader("Ausweisnummer")
    16. PersonNr.Text = reader("PersoNr")
    17. Kostenstelle.Text = reader("Kostenstelle")
    18. Chipnummer.Text = reader("Chipnummer")
    19. Beschreibung.Text = reader("Beschreibung")
    20. Bemerkungen.Text = reader("Bemerkungen")
    21. Spinnd.Text = reader("Spinnd")
    22. con.Close()
    23. Catch ex As Exception
    24. MessageBox.Show("Kein Datensatz gefunden")
    25. End Try


    Es geht. Nur wie kann ich jetzt dort eine weitere Abfrage mit einbauen, sodass er zugleich auch die doppelten Werte anzeigt, wenn dieser Datensatz doppelt vorkommen könnte? Als Abfrage habe ich mir gedacht, wäre Chipnummer und Kartennummer wichtig, da mehrfach eine Karte auf eine Chipnummer gebucht werden kann, ebenso kann eine Personalnummer mehrfach auf einer Chipkarte sein. Würde heißen, ich müsste die beiden Werte Chipnummer und Kartennummer für die Erweiterung der Suche für die Anzeige der möglichen doppelten Werte einbauen,
    oder? Das Ergebnis sollte in der Textbox anzeigt werden, mit der Chipnummer / Kartennummer.

    Da ich Access verwende, denke ich, kann man da keine SQL / MySQL Befehle nutzen oder? Was meint ihr?

    Danke für Ideen / Tipps.
    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!

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

    chenjung schrieb:

    Da ich Access verwende, denke ich, kann man da keine SQL / MySQL Befehle nutzen oder? Was meint ihr?


    Klar kann man das. Das setzt dein Command dann für dich um.
    Du kannst sogar mit Properties arbeiten
    Du schmeist dein Select einfach in einen Dataadapter.
    Dann kannst du die Ergebnisse auswerten indem du damit z.B. eine Datatable füllst.
    Das hätte auch den Vorteil das du das Try-Catch loswerden könntest.
    Denn mit If DataAdapter.Fill(DataTable) > 0 then .... kannst du prüfen ob es überhaupt treffer gibt.
    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."
    Hi Schamash,

    danke für deine Antwort.

    Also wäre das so was in der Richtung (ist ein Beispiel aus dem Netz) Für die Kontaktaufnahme zur Datenbank? Muss dann ja noch angepasst werden! ^^ Aber grob die Richtung stimmt??

    VB.NET-Quellcode

    1. Imports OleDbDataAdapter
    2. Private Sub OleDbDataAdapter_Click(ByVal sender As Object, ByVal Args As System.Event)
    3. 'Create a connection object
    4. Dim ConnectionString As String = "provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source= C:/northwind.mdb"
    5. Dim SQL As String = "SELECT * FROM Orders"
    6. Dim conn As OleDbConnection = New OleDbConnection(ConnectionString)
    7. ' open the connection
    8. conn.Open()
    9. ' Create an OleDbDataAdapter object
    10. Dim adapter As OleDbDataAdapter = New OleDbDataAdapter()
    11. adapter.SelectCommand = New OleDbCommand(SQL, conn)
    12. ' Create Data Set object
    13. Dim ds As DataSet = New DataSet("orders")
    14. ' Call DataAdapter's Fill method to fill data from the
    15. ' DataAdapter to the DataSet
    16. adapter.Fill(ds)
    17. ' Bind dataset to a DataGrid control
    18. dataGrid1.DataSource = ds.DefaultViewManager
    19. End Sub

    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!
    Ich würde es so etwa machen:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim con As New OleDb.OleDbConnection
    2. Dim cmd As New OleDb.OleDbCommand
    3. Dim dtAbleich As New DataTable
    4. cmd.CommandText = "select ID, Chipnummer, Ausweisnummer, PersoNr, Bemerkungen, Beschreibung, Kostenstelle, Spinnd from Abgleich WHERE PersoNr = @pnummer"
    5. cmd.Parameters.Add("@pnummer", OleDb.OleDbType.BSTR).Value = eingabe.Text
    6. cmd.Connection = con
    7. con.Open()
    8. Dim DA As New OleDb.OleDbDataAdapter(cmd)
    9. If DA.Fill(dtAbleich) > 0 Then
    10. GDV.DataSource = dtAbleich
    11. Else
    12. GDV.DataSource = Nothing
    13. End If
    14. con.Close()
    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."
    Das sieht interessant aus.

    Somit müsste ich oben och die Verbindung herstellen ? (Dim ConnectionString As String = "provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source= C:/northwind.mdb") und dann die Textfelder angeben?

    Eingabe ist ja der Wert, der Abgefragt werden soll. Würde bedeuten ich müsste noch die Textfelder (ID,Chpinummer usw) noch ansprechen damit sie mit den Datengefüllt wird, und ein neues Textfeld für den Wert, wenn ein Datensatz doppelt vorkommt, wie z.b. Kartennummer oder Chipnummer? Ich weiß ich stell mich nicht gerade geschickt an ^^ Sorry dafür.

    Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim ConnectionString As String = "provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source= C:\Users\DE-96688\Desktop\Datenbank.mdb"
    2. Dim con As New OleDb.OleDbConnection
    3. Dim cmd As New OleDb.OleDbCommand
    4. Dim dtAbleich As New DataTable
    5. cmd.CommandText = "select ID, Chipnummer, Ausweisnummer, PersoNr, Bemerkungen, Beschreibung, Kostenstelle, Spinnd from Abgleich WHERE PersoNr = @pnummer"
    6. cmd.Parameters.Add("@pnummer", OleDb.OleDbType.BSTR).Value = eingabe.Text
    7. cmd.Connection = con
    8. con.Open()
    9. Dim DA As New OleDb.OleDbDataAdapter(cmd)
    10. If DA.Fill(dtAbleich) > 0 Then
    11. GDV.DataSource = dtAbleich
    12. Else
    13. GDV.DataSource = Nothing
    14. End If
    15. ID.Text = ""
    16. Ausweisnummer.Text = ""
    17. PersonNr.Text = ""
    18. Kostenstelle.Text = ""
    19. Chipnummer.Text = ""
    20. Beschreibung.Text = ""
    21. Bemerkungen.Text = ""
    22. Spinnd.Text = ""
    23. con.Close()



    Wobei ich glaube mit den Füllen der TextBoxen hab ich was falsch geschrieben glaub ich ^^
    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „chenjung“ ()

    Du müsstest den ConString der Connection noch zuweisen.
    Die DT könntest du mit For each durchlaufen.
    Die Filter-felder könntest du in eine Liste schreiben und die anderen Textfelder nur beim ersten durchlauf befüllen lassen.
    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."
    Danke für den Tipp! Danke für deine Hilfe.

    Ich denke da muss ich noch bisschen basteln ^^

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim ConnectionString As String = "provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source= C:\Users\DE-96688\Desktop\BeloXX\BeloxxDatenbank.mdb"
    2. Dim con As New OleDb.OleDbConnection
    3. Dim cmd As New OleDb.OleDbCommand
    4. Dim dtAbleich As New DataTable
    5. Dim reader As OleDbDataReader
    6. con.Open()
    7. cmd.CommandText = "select ID, Chipnummer, Ausweisnummer, PersoNr, Bemerkungen, Beschreibung, Kostenstelle, Spinnd from Abgleich WHERE PersoNr = @pnummer"
    8. cmd.Parameters.Add("@pnummer", OleDb.OleDbType.BSTR).Value = eingabe.Text
    9. cmd.Connection = con
    10. Dim DA As New OleDb.OleDbDataAdapter(cmd)
    11. If DA.Fill(dtAbleich) > 0 Then
    12. GDV.DataSource = dtAbleich
    13. Else
    14. GDV.DataSource = Nothing
    15. End If
    16. con.Open()
    17. reader = cmd.ExecuteReader()
    18. reader.Read()
    19. ID.Text = reader("ID")
    20. Ausweisnummer.Text = reader("Ausweisnummer")
    21. PersonNr.Text = reader("PersoNr")
    22. Kostenstelle.Text = reader("Kostenstelle")
    23. Chipnummer.Text = reader("Chipnummer")
    24. Beschreibung.Text = reader("Beschreibung")
    25. Bemerkungen.Text = reader("Bemerkungen")
    26. Spinnd.Text = reader("Spinnd")
    27. con.Close()

    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!
    Eher so:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim ConnectionString As String = "provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source= C:\Users\DE-96688\Desktop\BeloXX\BeloxxDatenbank.mdb"
    2. Dim con As New OleDb.OleDbConnection
    3. Dim cmd As New OleDb.OleDbCommand
    4. Dim dtAbleich As New DataTable
    5. con.ConnectionString = ConnectionString
    6. con.Open()
    7. cmd.CommandText = "select ID, Chipnummer, Ausweisnummer, PersoNr, Bemerkungen, Beschreibung, Kostenstelle, Spinnd from Abgleich WHERE PersoNr = @pnummer"
    8. cmd.Parameters.Add("@pnummer", OleDb.OleDbType.BSTR).Value = eingabe.Text
    9. cmd.Connection = con
    10. Dim DA As New OleDb.OleDbDataAdapter(cmd)
    11. If DA.Fill(dtAbleich) > 0 Then
    12. GDV.DataSource = dtAbleich
    13. ID.Text = dtAbleich.Rows(0).Item("ID").ToString
    14. Ausweisnummer.Text = dtAbleich.Rows(0).Item("Ausweisnummer").ToString
    15. PersonNr.Text = dtAbleich.Rows(0).Item("PersoNr").ToString
    16. Kostenstelle.Text = dtAbleich.Rows(0).Item("Kostenstelle").ToString
    17. Chipnummer.Text = dtAbleich.Rows(0).Item("Chipnummer").ToString
    18. Beschreibung.Text = dtAbleich.Rows(0).Item("Beschreibung").ToString
    19. Bemerkungen.Text = dtAbleich.Rows(0).Item("Bemerkungen").ToString
    20. Spinnd.Text = dtAbleich.Rows(0).Item("Spinnd").ToString
    21. Else
    22. GDV.DataSource = Nothing
    23. ID.Text = String.Empty
    24. Ausweisnummer.Text = String.Empty
    25. PersonNr.Text = String.Empty
    26. Kostenstelle.Text = String.Empty
    27. Chipnummer.Text = String.Empty
    28. Beschreibung.Text = String.Empty
    29. Bemerkungen.Text = String.Empty
    30. Spinnd.Text = String.Empty
    31. End If
    32. con.Close()


    Dann brauchst du keinen zusätzlichen Reader. Die Daten hast du ja schon in der DT und musst nur die erste Row auswerten.
    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."
    Vielen dank für deine Hilfe.

    Ich werd mir daheim den Quellcode mal genauer ansehen.

    Sehe ich das richtig, sobald mehr als ein Datensatz zb. mit einer Kartennummer vorhanden ist, wird dies in der dazugehörigen TextBox angezeigt? Also z.b. Kartennummer 2 ist 4 malvorhanden und wird somit in der TextBox Kartennummer aufgeführt? ^^
    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!
    In dem Beispiel ist es so, sobald es zu einer PersNR mehere Treffer gibt, wird das DataGridView mit den Treffern gefüllt und in den Textboxen wird der erste Treffer angezeigt.
    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."