Ich müsste meine Datenbank nach verschiedenen
"verbotenen Zeichen" durchsuchen die sich im Laufe der
Zeit eingeschlichen haben. ( z.B. "*?#)
Aber mit dem Like - Operator bekomme ich das nicht hin,
da brauche ich immer zwei Abfragen. Je nachdem ob
das gesuchte Zeichen am Anfang oder in der Mitte ist.
Das muss doch bestimmt auch mit nur einer Abfrage gehen?
PS
Weiß jemand warum mein Mausrad im VBA-Editor nicht
funktioniert?
Merci
Dafür nutz ich schon lange VBSCROLL von hier:
http://www.gasanov.net/VBScroll.asp
Servus
Winfried
--
Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
KnowHow.mdb: http://www.freeaccess.de/knowhow.asp
Access-FAQ: http://www.donkarl.com/AccessFAQ.htm
Access-Stammtisch: http://www.access-muenchen.de
Wolfgang Schneider wrote:
> Ich müsste meine Datenbank nach verschiedenen
> "verbotenen Zeichen" durchsuchen die sich im Laufe der
> Zeit eingeschlichen haben. ( z.B. "*?#)
> Aber mit dem Like - Operator bekomme ich das nicht hin,
> da brauche ich immer zwei Abfragen. Je nachdem ob
> das gesuchte Zeichen am Anfang oder in der Mitte ist.
> Das muss doch bestimmt auch mit nur einer Abfrage gehen?
WHERE Feldname Like "*[*]*"
bringt dir alle * an beliebiger Stelle im Text.
> PS
> Weiß jemand warum mein Mausrad im VBA-Editor nicht
> funktioniert?
Funktioniert im VBE erst ab A07. Vorher:
http://www.geocities.com/SiliconValley/2060/freewheel.html
Gruss - Peter
--
2. SQL Server-Entwickler-Konferenz
Nürnberg, 12./13.4.2008 + 19./20.4.2008
http://www.donkarl.com/SEK
Winfried...@gmx.de (Winfried Sonntag) schrieb am Samstag, 22. März 2008
19:13
>> Weiß jemand warum mein Mausrad im VBA-Editor nicht
>> funktioniert?
>
> Dafür nutz ich schon lange VBSCROLL von hier:
> http://www.gasanov.net/VBScroll.asp
Hey, super Tipp !!!!
Das funktioniert !!
Echt erstaunlich was MS so _nicht_ auf die Reihe kriegt.
ciao
nos...@doering.org (Peter Doering) schrieb am Samstag, 22. März 2008 19:19
>> Ich müsste meine Datenbank nach verschiedenen
>> "verbotenen Zeichen" durchsuchen die sich im Laufe der
>> Zeit eingeschlichen haben. ( z.B. "*?#)
>> Aber mit dem Like - Operator bekomme ich das nicht hin,
>> da brauche ich immer zwei Abfragen. Je nachdem ob
>> das gesuchte Zeichen am Anfang oder in der Mitte ist.
>> Das muss doch bestimmt auch mit nur einer Abfrage gehen?
>
> WHERE Feldname Like "*[*]*"
>
> bringt dir alle * an beliebiger Stelle im Text.
Jo, habe ich gerade getestet. und stimmt die Sternchen
bekommt man alle. Nur leider keine Gänsefüßchen.
WHERE Feldname Like "*["]*" bringt einen Syntaxfehler.
Auch mit der zeichenfunktion (die mir liebr wäre)
funktioniert es nicht.
WHERE Feldname Like "*[Zchn(34)]*"
Gibt es dafür eine Lösung?
Danke
oder
WHERE Feldname Like "*[" & Zchn(34) & "]*"
Wolfgang Schneider wrote:
> Winfried Sonntag:
>
>>> Weiß jemand warum mein Mausrad im VBA-Editor nicht
>>> funktioniert?
>>
>> Dafür nutz ich schon lange VBSCROLL von hier:
>> http://www.gasanov.net/VBScroll.asp
>
> Echt erstaunlich was MS so _nicht_ auf die Reihe kriegt.
Wie in meiner ersten Antwort erwaehnt ist das Scrolling im VBE seit A07
onboard moeglich.
Vielen herzlichen Dank, Peter, endlich eine Lösung für ein Problem, das ich
mit A97/Win2000 nicht hatte, erst mit A97/WinXP ... Es ist jetzt erst das
dritte oder vierte Programm, das ich ausprobiert habe, diesmal *endlich* mit
Erfolg. Nocheinmal vielen Dank!
Gruss - Guido
Probier mal LIKE "*[""]*" (2 Anführungszeichen).
Manchmal braucht es die "in maskiert".
Danke für deine Antwort
nos...@doering.org (Peter Doering) schrieb am Montag, 24. März 2008 02:04
> WHERE Feldname Like "*[" & Zchn(34) & "]*"
Bitte entschuldige, ich habs noch nicht getestet.
Aber ich denke es wird funktionieren.
Gehe ich recht in der Annahme das ich mir dieser Lösung
nach jeden Zeichen suchen kann das einen ASCII-Code hat?
Ich müsste nur die Zahl (per VBA in einer Schleife) ändern?
Wer Zeit und Lust hat kann mir noch ein paar Tipp's geben
welche Zeichen noch Probleme machen könnten?
Im Moment würde ich nach folgenden suchen: "?*#
Danke und
mfg
Wolfgang Schneider wrote:
> (Peter Doering)
>
>> WHERE Feldname Like "*[" & Zchn(34) & "]*"
>
> Gehe ich recht in der Annahme das ich mir dieser Lösung
> nach jeden Zeichen suchen kann das einen ASCII-Code hat?
Eigentlich schon. Mit Zeichen unter 32 koennte es problematisch werden,
weil sie entweder nicht sichtbar sind oder durch oder Linefeed
dargestellt werden. Aber ich wuerde an deiner Stelle einfach probieren.
Innerhalb der Where-Klausel kann nix passieren.
> Ich müsste nur die Zahl (per VBA in einer Schleife) ändern?
In VBA lautet die Funktion Chr().
Du kannst auch auf einen Schlag alle unerlaubten Zeichen ausgeben lassen,
indem du nur die erlaubten angibst. Im Beispiel sind alle Buchstaben und
Zahlen erlaubt, alles andere wird ausgegeben:
WHERE Feldname Like "*[!0-9A-Za-z]*"
Weitere Details siehe <F1>Like
> WHERE Feldname Like "*[!0-9A-Za-z]*"
>
> Weitere Details siehe <F1>Like
ACHTUNG
Like in VBA gibt eine andere Hilfe zurück, als wenn man LIKE innerhalb der
SQL-Ansicht einer Abfrage aufruft. Aber beiden gemeinsam ist, dass man wohl
innerhalb der eckigen Klammern einen "Regular Expression" Ausdruck angeben
kann.
hier die beiden gegenübergestellt (möglicherweise durch die pure
Textdarstellung etwas verstümmelt)
================================================================
IN SQL:
================================================================
Like-Operator
Wird zum Vergleichen eines Zeichenfolgenausdrucks mit einem Suchmuster in
einem SQL-Ausdruck verwendet
Syntax
Ausdruck Like "Muster"
Die Syntax für den Like-Operator besteht aus folgenden Teilen:
TeilBeschreibung
AusdruckIn einer WHERE-Klausel verwendeter SQL-Ausdruck.
MusterZeichenfolge oder Zeichenfolgenkonstante, mit der Ausdruck verglichen
wird.
Bemerkungen
Sie können den Like-Operator verwenden, um Werte in einem Feld zu finden,
die mit dem von Ihnen angegebenen Muster übereinstimmen. Für Muster können
Sie den vollständigen Wert (z. B. Like "Schmidt") oder Platzhalterzeichen
angeben, um einen Bereich von Werten zu finden (z. B. Like "Schm*").
In einem Ausdruck können Sie den Like-Operator verwenden, um einen Feldwert
mit einem Zeichenfolgenausdruck zu vergleichen. Wenn Sie z. B. Like "C*" in
einer SQL-Abfrage eingeben, gibt die Abfrage alle Feldwerte zurück, die mit
dem Buchstaben C beginnen.In einer Parameterabfrage können Sie den Benutzer
zur Eingabe eines Suchmusters auffordern.
Im folgenden Beispiel werden Daten zurückgegeben, die mit dem Buchstaben P
beginnen und anschließend einen Buchstaben von A bis F und drei Ziffern
enthalten:
Like "P[A-F]###"
In der folgenden Tabelle wird gezeigt, wie Sie Like verwenden können, um
Ausdrücke auf verschiedene Muster zu überprüfen.
Art der Entsprechung
Muster Entsprechung
(gibt True zurück)Keine Entsprechung
(gibt False zurück)
Mehrere Zeichena*aaa, aBa, aBBBaaBC
*ab*abc, AABB, XabaZb, bac
Sonderzeichena[*]aa*aaaa
Mehrere Zeichenab*abcdefg, abccab, aab
Einzelne Zeichena?aaaa, a3a, aBaaBBBa
Einzelne Zifferna#aa0a, a1a, a2aaaa, a10a
Zeichenbereich[a-z]f, p, j2, &
Außerhalb des Bereichs[!a-z]9, &, %b, a
Keine Ziffern[!0-9]A, a, &, ~0, 1, 9
Kombinationa[!b-m]#An9, az0, a99abc, aj0
Siehe auch
SQL-AusdrückeVerwenden von Platzhalterzeichen in Zeichenfolgenvergleichen
WHERE-Klausel (Microsoft Jet SQL)
Beispiel
Like-Operator (Beispiel)
================================================================
In VBA:
================================================================
Like (Operator)
Dient zum Vergleichen zweier Zeichenfolgen.
Syntax
Ergebnis = Zeichenfolge Like Muster
Die Syntax des Operators Like besteht aus folgenden Teilen:
TeilBeschreibung
ErgebnisErforderlich. Eine beliebige numerische Variable.
ZeichenfolgeErforderlich. Ein beliebiger Zeichenfolgenausdruck.
MusterErforderlich. Ein beliebiger Zeichenfolgenausdruck mit einem gültigen
Vergleichsmuster (wie unter Bemerkungen beschrieben).
Bemerkungen
Wenn Zeichenfolge und Muster übereinstimmen, ist Ergebnis True. Bei
fehlender Übereinstimmung ist Ergebnis False. Hat entweder Zeichenfolge oder
Muster den Wert Null, so ist Ergebnis ebenfalls Null.
Das Verhalten des Operators Like hängt von der Option Compare-Anweisung ab.
Die Standardmethode für den Zeichenfolgenvergleich in allen Modulen ist
Option Compare Binary.
Bei Option Compare Binary basieren Zeichenfolgenvergleiche auf einer
Sortierreihenfolge, die durch die interne binäre Darstellung der Zeichen
festgelegt ist. Die Sortierreihenfolge wird durch die Code-Seite festgelegt.
Das folgende Beispiel zeigt eine typische binäre Sortierreihenfolge:
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text führt zu Zeichenfolgenvergleichen, die die im
Gebietsschema des Systems gewählte Sortierreihenfolge für Zeichen verwenden
(wobei keine Unterschiede in der Groß- und Kleinschreibung berücksichtigt
werden). Die oben dargestellten Zeichen würden beim Sortieren mit Option
Compare Text folgende Reihenfolge erhalten:
(A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)
Der integrierte Mustervergleich stellt ein vielseitiges Hilfsmittel für
Zeichenfolgenvergleiche dar. Mit den Mustervergleichsfunktionen können Sie
Platzhalterzeichen, Zeichenlisten oder Zeichenbereiche in einer beliebigen
Kombination verwenden, um Zeichenfolgen zu vergleichen. Welche
Platzhalterzeichen für Muster verwendet werden können und wofür diese
jeweils stehen, ist der folgenden Tabelle zu entnehmen:
Zeichen in MusterSteht in Zeichenfolge für
?Ein beliebiges einzelnes Zeichen.
*Kein oder mehrere Zeichen.
#Eine beliebige einzelne Ziffer (0 - 9).
[ZeichenListe]Ein beliebiges einzelnes Zeichen in ZeichenListe.
[!ZeichenListe]Ein beliebiges einzelnes Zeichen, das nicht in ZeichenListe
enthalten ist.
Eine in eckige Klammern ([ ]) gesetzte Gruppe mit einem oder mehreren
Zeichen (ZeichenListe) kann zum Vergleich für jedes beliebige Zeichen in
Zeichenfolge verwendet werden und kann nahezu alle Zeichen-Codes (auch
Ziffern) enthalten.
Anmerkung Die Sonderzeichen linke Klammer ([), Fragezeichen (?), das
Zeichen # und das Sternchen (*) müssen in eckige Klammern gesetzt werden, um
für einen Vergleich herangezogen werden zu können. Die rechte eckige Klammer
(]) kann nicht innerhalb einer Gruppe zu vergleichender Zeichen verwendet
werden. Sie kann jedoch außerhalb einer Gruppe als einzelnes Zeichen
angegeben werden.
Sie können in ZeichenListe auch einen Bereich von Zeichen angeben, indem Sie
den größten und den kleinsten Wert des Bereichs getrennt durch einen
Bindestrich (-) angeben. [A-Z] führt zum Beispiel zu einer Übereinstimmung,
wenn die entsprechende Zeichenposition in Zeichenfolge einen Großbuchstaben
im Bereich von A bis Z enthält. Mehrere Bereiche können Sie ohne weitere
Trennzeichen nacheinander in einem Klammernpaar angeben.
Die Bedeutung des angegebenen Bereichs hängt von der zur Laufzeit geltenden
Zeichenreihenfolge ab (die durch Option Compare und das Gebietsschema auf
dem ausführenden System festgelegt wird). Im beschriebenen Beispiel für
Option Compare Binary [A-E] ist A, B und E im Bereich [A-E] enthalten. Bei
Option Compare Text] sind die Zeichen A, a, À, à, B, b, E, e im Bereich
[A-E] enthalten. Ê oder ê sind nicht enthalten, weil Zeichen mit einem
Akzent in der Sortierreihenfolge hinter den entsprechenden Zeichen ohne
Akzent liegen.
Nachfolgend weitere wichtige Regeln zum Mustervergleich:
Ein Ausrufezeichen (!) am Anfang von ZeichenListe bedeutet, daß sich eine
Übereinstimmung ergibt, wenn in Zeichenfolge ein beliebiges Zeichen außer
den Zeichen in ZeichenListe gefunden wird. Wird das Ausrufezeichen außerhalb
der eckigen Klammern verwendet, so dient es als Platzhalterzeichen für sich
selbst.
Ein Bindestrich (-) kann entweder am Anfang (nach einem Ausrufezeichen,
sofern vorhanden) oder am Ende von ZeichenListe erscheinen, um als
Platzhalterzeichen für sich selbst zu dienen. In jeder anderen Position
dient der Bindestrich zur Kennzeichnung eines Zeichenbereichs.
Wenn ein Zeichenbereich festgelegt wird, müssen die Zeichen in aufsteigender
Sortierreihenfolge (vom niedrigsten zum höchsten) angegeben werden. [A-Z]
ist demnach ein zulässiges Muster, [Z-A] dagegen nicht.
Die Zeichenfolge [] wird als Null-Zeichenfolge ("") interpretiert.
In einigen Sprachen gibt es bestimmte Zeichen im Alphabet, die eigentlich
zwei separate Zeichen darstellen. In verschiedenen Sprachen wird zum
Beispiel das Zeichen "æ" verwendet, um die Zeichen "a" und "e" darzustellen,
wenn Sie nebeneinander erscheinen. Der Operator Like erkennt, daß das
einzelne Sonderzeichen und die beiden einzelnen Zeichen gleichwertig sind.
Wenn eine Sprache, in der eines dieser Sonderzeichen verwendet wird, in den
Ländereinstellungen des Systems angegeben ist, wird eine Übereinstimmung des
einzelnen Sonderzeichens entweder in Muster oder in Zeichenfolge mit der
entsprechenden Folge aus zwei Zeichen in der anderen Zeichenfolge erkannt.
Genauso wird eine Übereinstimmung zwischen einem einzelnen Sonderzeichen in
Muster, das in eckige Klammern eingeschlossen ist (als einzelnes Zeichen, in
einer Liste oder in einem Bereich), und der entsprechenden Folge aus zwei
Zeichen in Zeichenfolge erkannt.
--
mit freundlichen Grüßen aus Nürnberg
Klaus Oberdalhoff KO...@gmx.de
Ich beantworte keine NG-Fragen und -Nachfragen per Mail!
Newbie-Info: http://www.doerbandt.de/Access/Newbie.htm
KnowHow-mdb und andere Beispiele: http://www.freeaccess.de
Sofern Access 200x bitte beachten:
http://www.freeaccess.de/MS-Access-Artikel.asp?ID=99
Ich unterstütze PASS Deutschland e.V. (http://www.sqlpass.de)
Nächstes Treffen in Nürnberg am 06.05.2008