Abfrage einer .mdb Datenbank mit einem Button

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ryLIX.

    Abfrage einer .mdb Datenbank mit einem Button

    Hallo Leute!

    Nachdem ich per SUFU nicht so wirklich was passendes gedunden habe, möchte ich kurz mein Problem posten.



    So sieht aktuell mein Beispiel aus. Ich will nun ein SQL Komando

    SQL-Abfrage

    1. SELECT * FROM Combobox1.Text WHERE Textbox1.Text

    ausführen. Soweit-sogut. Mein bisheriger Code lautet:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. 'Abfrage
    3. Dim cmd As DbCommand = New SqlCommand("SELECT * FROM Combobox1.Text WHERE Textbox1.Text")
    4. 'Wiederbefüllen??
    5. End Sub


    Nun meine Frage:

    Erkennt
    1.VB 08 in einer SQL abfrage TextBox1.Text?
    2.Wie befülle ich das DataGridView dann wieder?

    Ich hoffe ihr könnt mir helfen.

    Achja: Ich will bitte keinen C&P Code. Ich will nen Denkanstoß und vielleicht ein BSP wenn ihr 1. Lust habt 2. eines da habt :)

    LG

    Platzi
    1. Du hast schon verstanden was du da machst oder? Sonst würde ich dir das Galileo OpenBook ans Herz legen (es gibt 3) dort wird das Database handling gut beschrieben.

    Zu deinen Fehlern:
    1. Das hier -> SqlCommand("SELECT * FROM Combobox1.Text WHERE Textbox1.Text")
    ist ein String.
    Was du willst sollte so aussehen: SqlCommand("SELECT * FROM " & ComboBox1.Text & "WHERE " & TextBox1.Text & ";")

    2. Ist der Aufbau des Statements falsch.
    SELECT [ROW] FROM
    Hi!

    Ich danke dir erstmal für deine Hilfe. Jetzt glaube habe ich mich ned klar ausgedrückt. Also ich habe eine access Datenbank eingelesen. Die wird schön und ordentlich verarbeitet und befüllt das DataGridView. Jetzt habe ich in VB 2008 Express ja die möglichkeit, eine Abfrage hier zu gestalten:

    Das habe ich auch Wahrgenommen. Resultat:

    So. Jetzt meckert er erstmal rum mit

    , ich kann mir aber schon fast denken, woran das liegt. Er erkennt das TextBox1.Text nicht. Wenn ich das ganze in single quotet setze ('), dann erkennters als String. Auch die double quotet (") habe ich probiert, der erfolg blieb (leider) bei null. Geht das eigentlich so überhaupt? Oder habe ich wieder mal nen Fehler reingewurschtelt? Also wenn ich anstatt der Variable den String 'ALFKI' einsetze, dann bringt er tatsächlich die richtige "Lösung" raus.

    Zu dem DB Command:
    Ich habe das probiert, bin aber zu nichts gestoßen, als ich vermutet habe, dass das ganze für MySQL gedacht ist. SQL ist doch eigentlich nur der Befehl (also wie "SELECT * FROM Tabelle), oder?
    Wenn ich da irgendwas verwechsle, sage bitte jemand bescheid :)

    LG

    Platzi
    Also den Agfragegenerator würde ich nicht verwenden.
    Da sind Parameter bzw Variablen leider nicht möglich bzw ich weiß nicht wie das geht.

    SQL ist eigentlich das Script bzw die Befehlssprache.
    Aber MSSql und MySQL interpretieren einige Befehle halt anders.

    Kümmern wir uns erstmal um den korrekten aufbau deines Select Statements

    TextBox1.Text ist nur ein Platzhalter für den Suchbegriff (z.B. Kundennamen).

    Der Kunde heißt nun "ALFKI".

    ComboBox1.Text ist der Platzhalter für die Spalte in der gesucht werden soll (z.B. Kunde).

    Also ist die Spalte "Kunde"

    Also muss das Statement ohne Platzhalter so aussehen:

    SQL-Abfrage

    1. SELECT * FROM Kunden WHERE Kunde = 'ALFKI';


    Wie du schon erkannt hast werden Strings bei SQL single quoted.

    So nun weißt du aber nicht wo nach der Benutzer suchen will also musst du dein Statement mit Platzhaltern ausrüsten.

    VB.NET-Quellcode

    1. Dim cmd As DbCommand = New SqlCommand("SELECT * FROM DeineTabelle WHERE ? = ?;")
    2. With cmd.Parameters
    3. .Add("Spalte", DbType.AnsiString).Value = ComboBox1.Text 'Hier wird nun die Suchspalte festgelegt. Der Platzhalter wird durch einen String ersetzt
    4. .Add("Keyword", DbType.AnsiString).Value = TextBox1.Text 'Hier wird nun der Suchbegriff festgelegt, Platzhalter wird auch durch einen String ersetzt
    5. End With


    Das setzt du bei Button1_Click ein dann müsste es funktionieren.

    2 Tipps hab ich noch für dich:
    1. Geb dem Kind einen Namen. Wenn du später 3 Formulare mit insgesamt 35 Buttons hast wird es schwer noch zu wissen was Button12 macht.
    Besser wäre btnSuchen oder sowas. Das gleiche gilt natürlich auch für Textboxen oder Comboboxen.

    2. Versuch deine Datenbankverbindung und die Kommandos nur im Quelltext zu machen. Dann lassen sich auch immer Parameter bzw Variablen einbringen.