| |
VB & DatenbankenSQL-Abfrage mit Bedingung | | | Autor: 13uro | Datum: 17.06.05 21:35 |
| Hi vbarchiv
Ich bin ziemlicher DB-Neuling und brauche zu einem SQL-String
ein bischen Hilfe.
Ich habe ein HFlexGrid das mit Daten aus einer DB befüllt wird.
Dieses Befüllen will ich als Suche aus einer Textbox gestalten.
das funtz auch alles. Die Abfrage geht über folgenden SQL-String:
sSQL = "Select * From " & Table & " Where Hersteller like '" & Text1.Text & "'" Ich habe nun aber das Problem das ich immer den ganzen Feldinhalt in die Textbox schreiben muss bis das befüllen ausgeführt wird.
Wie schreibe ich diesen String um damit nach jederEingabe in die Textbox
die Werte eingelesen werden (also nach Eingabe von z.B. "A" werder alle Einträge die mit
"A" beginnen angezeigt, nach "Ab" alle die mit "Ab" beginnen usw.)
Uli
Wissen ist Macht; nichts wissen macht auch nichts! | |
Re: SQL-Abfrage mit Bedingung | | | Autor: CyberDreams | Datum: 17.06.05 21:48 |
| Simpel und einfach:
sSQL = "SELECT * FROM " & Table & " WHERE Hersteller LIKE '" & Text1.Text & "%'" Musst entweder Stern (*) oder Prozent (%) verwenden...musst ausprobieren
Mfg
CyberDreams | |
Re: SQL-Abfrage mit Bedingung | | | Autor: Dieter Strassner | Datum: 18.06.05 19:31 |
| Hallo Uli,
benutzt Du zufällig den MS-SQL-server?
Wenn ja, Starte den Query Analyzer und geh auf die HIlfe zu T-SQL...
Zu deinem SQL-Statement noch ein Hinweis:
da dein Argument zur WHERE-Klausel aus einer Textbox entbommen wird, kann der Benutzer ja dort vermutlich eingeben was er will. Vermutlich auch Namen wie z.B. "O'Neal" o.ä. Probiers mal aus! Du erhälst dann einen Fehler vom SQL-Serevr.
Warum? Weil das Hochkomma im Text den String beendet.
Lösung: Alle Hochkomma des textes aus der Textbox maskieren (=verdoppeln)
--
Viele Gr??e
Dieter Strassner
| |
Re: SQL-Abfrage mit Bedingung | | | Autor: Dieter Strassner | Datum: 19.06.05 11:43 |
| Hallo Uli,
ACCESS bietet doch eine Hilfe per F1, da sollte zur SQL-Syntax doch auch etwas zu finden sein.
Wg. Hochkomma:
Generell gilt: Damit die JetEngine, die dein SQL-Befhel ja auswerten (parsen) muß, überhaupt dfurchblickt, muß j irgendwie zwischen (SQL-)Befehlen und "Werten" unterschieden werden. Dies wird mittels Hochkomma erreicht. Ein Hochkomma leitet eine Werteangabe ein und wieder aus. Im Prinzip ganz einfach. Der Sonderfall das ein Hochkomma im Wert vorkommt, wird durch sog. "Maskierung" geregelt. Das heißt nichts anderes, als das das im Wert vorkommende Hochkomma verdoppelt wird.
Ich habe mir dafür eine kleine Funktion geschrieben, die den Werte-Text übergeben bekommt und die darin befindlichen Hochkomma verdoppelt (vba.Replace) und als String wieder rausgibt. Zusätzlich setzt die Funktion die sowie nochwendigen Einleitungs- und Ausleitungshochkomma dazu.
Doppelte Hochkomma (Anführungszeichen/Gänsefüßchen) sind mit als wenig genutzte Option beim SQL-Server bekannt. Dprüfet bei ACCESS nicht anders sein. Wo es noch "KuddelMuddel" geben könnte: Beim schreiben des SQL-Befehls mußt Du immer draufachten, in welcher Ebene Du die gerade befindet: In *VB* oder *innerhalb* der SQL-Syntax. Das Anführungszeichen hat hier exakt die geiche Funktion in VB wie das Hochkomma in SQL. Es grenzt die VB-Befehle von den Textinhalten ab. Das erste Anführungszeichen leitet es ein, das zweite wieder aus. Auch hier kannst Du per Maskierung (Verdoppelung) ein Anführungszeichen als Textinhalt darstellen.
--
Viele Gr??e
Dieter Strassner
| |
Re: SQL-Abfrage mit Bedingung | | | Autor: radler | Datum: 19.06.05 13:02 |
| Hallo 13uro,
falls Du ADO verwendest, würde ich Dir für solche Fälle empfehlen, Dich über das Command-Objekt zu informieren.
Die vom Benutzer eingegeben Werte können hierbei im Where-Abschnitt als Parameter übergeben werden. Somit gibt es keine Probleme mit Hochkommatas in der Benutzereingabe.
Weiterhin stellen u.U. ungeprüfte Benutzereingaben ein Sicherheitsproblem dar. In Deinem Fall (MSAccess) sicherlich nicht. Aber z.B. SQLServer und SQL-Injection kann ein Problem darstellen.
Vieleicht noch ein kleiner weiterer Tipp:
Unter Umständen, nicht unbedingt in dem von Dir skizzierten Fall, ist es für den Benutzer sinnvoller, selbst zu wählen, ob er Wildcards ( * -> %, ? -> _ ) verwendet oder nicht. Hardcodierte Wildcards würden dann nicht immer wie gewünscht funktionieren.
Anwendungsbeispiel:
Kunden-/Firmensuche -> der genaue Name ist nicht bekannt ("Maier GmbH" oder "Meier GmbH" oder "Mayer GmbH" oder "Gebr. Meyer GmbH").
Ein sinnvoller Suchstring wäre hier z.B.: *M??er*.
Hierbei ist allerdings zu beachten, daß dem Benutzer i.d.R. * und ? bekannt sind. D.h., diese Zeichen müssen von Dir entsprechend umgesetzt werden (s.o.).
Gruß | |
Re: SQL-Abfrage mit Bedingung | | | Autor: Progger_Walli | Datum: 19.06.05 14:24 |
| Hi
sSQL = "Select * From " & Table & " Where Hersteller like ' " & Text1.Text & " ' "
Hinter dem like hast du ein einfaches Anführungszeichen, welches in den String übernommen wird, danach schließt Du den String (mit ") und hängst den Text aus Text1.Text an, und an diesen String (eingeleitet durch das nächste ") hängst Du ein ' an, um den zu suchenden Text in Hesteller in der SQL-Anfrage zu schließen.
Das letzte " schließt Deinen String wieder ab.
Im Endeffekt sieht Dein String dann so aus:
Select * From Tabellenname Where Hersteller like ' Text '
wobei ich als Table Tabellenname und als Text in Text1.Text Text genommen habe.
Du musst nur darauf achten, ob die ganzen Quote's die Textteile so einschließen, wie Du Dir das vorgestellt hast.
Um das Ganze etwas übersichtlicher zu gestalten, habe ich hier und da ein Leerzeichen in die Quote's eingefügt.
Die sollten aber im Code dann wieder draußen sein.
MfG | |
Re: SQL-Abfrage mit Bedingung | | | Autor: 13uro | Datum: 19.06.05 17:26 |
| Hi progger
Jetzt ist auch bei mir der Groschen gefallen. Ich habe die ganzen
Zeichen eigentlich immer als Zusatz zu der im String zu übergebenden
Variable angesehen und kam dadurch nie dahinter wie die anzuordnen sind!
Wenn man das aber ganz einfach so betrachtet wie man es in jedem
vb-coding tut ist's ja eigentlich ganz einfach(und logisch).
Ich habe mal wieder den Wald vor lauter Bäumen nicht gesehen!
Danke für die Hilfe! Wieder ein Stückchen dazugelernt - vieleicht
kann ich mir ja bald eine andere Signatur einfallen lassen.
Uli
Wissen ist Macht; nichts wissen macht auch nichts! | |
Re: SQL-Abfrage mit Bedingung | | | Autor: Progger_Walli | Datum: 19.06.05 21:13 |
| Ich nochmal *g*
Für PHP nehme ich immer den PHP-Writer (von A. Weintrub *denk*).
Bis auf wenige Ausnahmen formatiert der den Code mit den ganzen Quotes korrekt, so kann man nen Fehler schneller finden.
Hier mal der Link:
http://www.weintrub.de/other/
Vll hilft Euch das Proggy ja auch mal, wenn Ihr verzweifelt nach na Axt sucht.
MfG | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|