vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Datenbanken
SQL-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!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL-Abfrage mit Bedingung 
Autor: 13uro
Datum: 17.06.05 22:03

Hi CyberDreams

danke für die schnelle Antwort.
Mit dem Sternchen klappts nicht!?
Mit dem Prozentzeichen aber schon.
Ich habe bisher auch alle Versuche mit dem
Sternchen unternommen, darum hatte ich auch keinen Erfolg
P.S. Kanst du mir vieleicht mit einem Link weiterhelfen wo mann als Anfänger
ein paar gute Tipps zu solchen SQL-Strings(Hochkomma,
Einfaches Hochkomma etc ????) nachlesen kann?

Uli

Wissen ist Macht; nichts wissen macht auch nichts!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL-Abfrage mit Bedingung 
Autor: 13uro
Datum: 19.06.05 11:23

Hi Dieter

Also wie ich oben geschrieben habe bin ich ziemlicher (genauer gesagt
absoluter) Datenbank-Anfänger. Ich will in meinem Projekt Daten aus
einer Access2000-DB einlesen. Die "einfachen" SQL-Befehle (Select *,
Select ... From....where....usw.) kriege ich auch hin, wo ich Schwierigkeiten habe
sind dann solche Geschichten wie oben wo man mit einfachen und doppelten
Hochkommas arbeiten muss, die dann auch noch in sich verschachtelt sind!
(In dem Bsp oben habe ich mir einen Wolf geschrieben mit den Hochkommas,
hatte aber wie gesagt keinen Erfolg!)
Ich habe bisher auch noch nichts gefunden wo diese Syntax-Sachen in
einfacher Art für Anfäger erklärt werden. Falls du mir da einen Tipp geben
könntest wäre das absolut super.

Uli

Wissen ist Macht; nichts wissen macht auch nichts!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL-Abfrage mit Bedingung 
Autor: 13uro
Datum: 19.06.05 12:40

Hi Dieter

Wie sieht diese Funktion aus?
Könntest du mir die mal per Mail zukommen lassen?
Zitat:

Damit die JetEngine, die dein SQL-Befhel ja auswerten (parsen) muß, überhaupt dfurchblickt, muß j irgendwie zwischen (SQL-)Befehlen und "Werten" unterschieden werden

Zur Syntax: Warum muss ich dann aber einen "Wert" zusätzlich in doppelte Hochkommas und das &-Zeichen einschliessen?
Zitat:

sSQL = "Select * From " & Table & " Where Hersteller like '" & Text1.Text & "'"

Uli

Wissen ist Macht; nichts wissen macht auch nichts!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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ß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL-Abfrage mit Bedingung 
Autor: Dieter Strassner
Datum: 19.06.05 18:36

Hi Uli,

> Jetzt ist auch bei mir der Groschen gefallen. ...

Na, schön! Freut mich auch.


> ... vieleicht kann ich mir ja bald eine andere Signatur einfallen lassen.

Wie wärs mit: "Kaum macht man es richtig, schon gehts!"


--
Viele Gr??e

Dieter Strassner

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel