Datagrid Abfrage

werner_sg

Erfahrenes Mitglied
Ich habe ein Datagrid welches mir die Daten anzeigt und auch in die Textboxen schreibt

Jetzt würde ich das gerne mit einer Suche kombinieren, sprich also mit einer zweiten Abfrage und dem Suchkriterien in einem textfeld

uber das Datagrid lässt sich ja eigentlich ganz simple eine zweite Abfrage erstellen, funktioniert aber irgendwie nicht

SQL:
SELECT        ID, Anrede, Titel, Kunde, Vorname, Gebiurtsdatum, Geburtsort, WOHNORT, STRASSE, WOHNORT2, STRASSE2, FahrerlaubnisNr, KLASSEN, AUSTELLUNGSORT, ABLAUFDATUM, Telefon, Mobil, EMAIL_ADD, FOTO, FOTO1, LAND,
                         AusweisNr, AUSWEIS_STADT, AUSWEIS_ABLAUF, Vermerk
FROM            tblmieter
WHERE        (Kunde LIKE textBox12.[Text])

ich hab schon einiges durch aber er zeigt mir schon beim Testen im Abfrage Generator immer null an ( habe auch mal ein Platzhalter eingefügt)

Was muss ich jetzt (und warum) bei WHERE einfügen damit er die Eingaben in textBox12 auch richtig verarbeitet
 
Die Abfrage direkt in Access mal ausgeführt?

Was ich komisch finde ist diese Zeile
Code:
(Kunde LIKE textBox12.[Text])
kommt in dem SQLL dann wirklich der textuelle Wert der Textbox textBox12 rein?
(Kenne diese schreibweise so nicht).

Ersetzte mal textBox12.[Text] hard mit dem Text den du suchen willst, wenn er dann was findet liegt es an dieser textbox Angabe.


Achtung,
wenn du Text von außen eifnach so an dein SQL weitergibst besteht große Gefahr von SQL Injection.
Sprich Nutzer könnten dadurch einfach ein DROP TABLE oder so einbringen.
 
Die Abfrage direkt in Access mal ausgeführt?

Was ich komisch finde ist diese Zeile
Code:
(Kunde LIKE textBox12.[Text])


Das hat er beim letzten mal so automatisch geändert

versucht hatte ich es auch mit LIKE "textBox12.Text" / 'textBox12.Text' / "&textBox12.Text&" / +textBox12.Text+ etc

mit Wert findet er es

es liegt an der TextBox Übergabe , alle zu findenden Schreibweisen die funktionieren sollten liefern den Wert Null
 
Abhängig davon welche Datenbank benutzt wird: Bei dem LIKE-Operator musst du Wildcards setzen.

Beispiel MySQL
SQL:
//blabla
WHERE EinFeld LIKE '%EinWert%'  //Entspricht einem "enthält"

//Blablaba
WHERE EinFeld LIKE 'EinWert%'   //Entspricht "beginnt mit"

//blabla
WHERE EinFeld LIKE '%EinWert'   //Entspricht "endet mit"

In Access ist es anstatt dem "%" ein "*" glaube ich

EDIT: Ausserdem: Falls dein originales SQL da oben ttasächlich so stimmt, kann es nicht funktionieren, weil die Datenbank erwartet, dass TextBox12 ein Objekt der Datenbank ist. Dein SQL weiss also gar nicht, dass es einen Wert aus einer textBox ziehen soll.
Und das mit den eckigen Klammern um "Text" ist wahrscheinlich der Versuch ein Keyword zu escapen
 
Abhängig davon welche Datenbank benutzt wird: Bei dem LIKE-Operator musst du Wildcards setzen.

Beispiel MySQL
SQL:
//blabla
WHERE EinFeld LIKE '%EinWert%'  //Entspricht einem "enthält"

//Blablaba
WHERE EinFeld LIKE 'EinWert%'   //Entspricht "beginnt mit"

//blabla
WHERE EinFeld LIKE '%EinWert'   //Entspricht "endet mit"

In Access ist es anstatt dem "%" ein "*" glaube ich

EDIT: Ausserdem: Falls dein originales SQL da oben ttasächlich so stimmt, kann es nicht funktionieren, weil die Datenbank erwartet, dass TextBox12 ein Objekt der Datenbank ist. Dein SQL weiss also gar nicht, dass es einen Wert aus einer textBox ziehen soll.
Und das mit den eckigen Klammern um "Text" ist wahrscheinlich der Versuch ein Keyword zu escapen
funktioniert nur mit festen Werten aber nicht mit der TextBox
 
Was meinst du mit "festen" Werten?

In VBA würde ich es z.B. so machen (Parameter-Nutzung aussen vor):
Code:
Dim SQLString As String
SQLString = "SELECT ID, Anrede, Titel, Kunde, Vorname, Geburtsdatum, Geburtsort, WOHNORT, STRASSE, WOHNORT2, STRASSE2, FahrerlaubnisNr, KLASSEN, AUSTELLUNGSORT, ABLAUFDATUM, Telefon, Mobil, EMAIL_ADD, FOTO, FOTO1, LAND, AusweisNr, AUSWEIS_STADT, AUSWEIS_ABLAUF, Vermerk
FROM            tblmieter
WHERE        Kunde LIKE '%" & textBox12.Text & "%'"
Debug.Print SQLString
Beachte Anführungszeichen, Wildcards und String-Zusammenbau
 
Was meinst du mit "festen" Werten?

In VBA würde ich es z.B. so machen (Parameter-Nutzung aussen vor):
Code:
Dim SQLString As String
SQLString = "SELECT ID, Anrede, Titel, Kunde, Vorname, Geburtsdatum, Geburtsort, WOHNORT, STRASSE, WOHNORT2, STRASSE2, FahrerlaubnisNr, KLASSEN, AUSTELLUNGSORT, ABLAUFDATUM, Telefon, Mobil, EMAIL_ADD, FOTO, FOTO1, LAND, AusweisNr, AUSWEIS_STADT, AUSWEIS_ABLAUF, Vermerk
FROM            tblmieter
WHERE        Kunde LIKE '%" & textBox12.Text & "%'"
Debug.Print SQLString
Beachte Anführungszeichen, Wildcards und String-Zusammenbau
geht ja um eine Abfrage direkt über den Tabeladapter in der Entwurfsansicht, dort gehts nur mit festem Wert also wenn ich direkt einen Wert eingebe der das kriterium erfüllt oder halt nicht.
Alle Kombis die ich finden konnte habe ich getestet auch das Kunde LIKE '%" & textBox12.Text & "%'"
Hab mich von der Spielerei getrennt und mache es wieder komplett per Hand in der .vb datei da funktioniert das ja auf diese art.

Aber wenn ich dich jetzt schon mal hier drann habe, was anderes


Code:
Sql = "SELECT Marke, tblfahrzeuge.Modell, tblfahrzeuge.Fahrzeugnummer FROM tblfahrzeuge  LEFT JOIN tblreservierung ON tblfahrzeuge.Fahrzeugnummer = tblreservierung.Fahrzeugnummer  WHERE tblreservierung.KFZ_ABGEHOLT='nein'"

er zeigt mir alle Fahrzeuge an welche zwar vermietet sind aber noch nicht abgeholt wurden und damit theoretisch ja noch verfügbar sind da die buchung ja erst in x tagen oder wochen sein kann

er zeigt mir aber alle einträge an, soll er aber nicht

meine Überlegungen haben alle nicht funktioniert

am liebsten hätte ich
Code:
 Sql = "SELECT Marke, tblfahrzeuge.Modell, tblfahrzeuge.Fahrzeugnummer FROM tblfahrzeuge  LEFT JOIN tblreservierung ON tblfahrzeuge.Fahrzeugnummer = tblreservierung.Fahrzeugnummer  WHERE tblreservierung.KFZ_ABGEHOLT='nein' or Where NOT tblfahrzeuge.Fahrzeugnummer IN tblreservierungen.Fahrzeugnummer"
aber das gibt mir einen Syntaxfehler den ich nicht erkenne

WHERE tblreservierung.KFZ_ABGEHOLT='nein' // bis hierhin ja ok

or Where NOT tblfahrzeuge.Fahrzeugnummer IN tblreservierungen.Fahrzeugnummer // hier sollte er eigentlich schon mal Fahrzeuge die noch nie reserviert wurden auch mit dazu packen, aber da ist schon direkt ein fehler drinn

Und last but not least Fahrzeugnummern die er schon hat nicht öfters auflisten
 
Ein zweites WHERE??!???!!
Code:
            dbcmd = New OleDbCommand("SELECT * FROM tblfahrzeuge  " &
            " WHERE  Fahrzeugnummer NOT IN  " &
            " (SELECT Fahrzeugnummer FROM tblreservierung " &
            " WHERE(" & sqlStrDt1 & " BETWEEN Mietbegin And Mietende) " &
            " Or ( " & sqlStrDt2 & " BETWEEN Mietbegin And Mietende))", conn)

hier gehts doch auch, mir erschien das logisch :unsure:

Ok wie gehts sauber
 
Ein zweites WHERE??!???!!
Habs gelöst

Code:
            Sql = "SELECT Marke, Modell, Fahrzeugnummer, Art " &
                  "FROM tblfahrzeuge " &
                  " WHERE Modell='" & TxtKFZ.Text & "' AND  Fahrzeugnummer NOT IN " &
                  " (SELECT Fahrzeugnummer FROM tblreservierung " &
                    " WHERE (Date() BETWEEN Mietbegin And Mietende)) "

er zeigt mir jetzt alle zum derzeitigen zeitpunkt verfügbaren Fahrzeuge und auch keine doppelten Einträge mehr

:giggle: aber auch mit zwei WHERE
 
Zurück