welche Möglichkeit gibt es eine Teilstringsuche in einer Datenbank
durchzuführen ?
Also z.B.
Eingabe: er -> Result: ERwin, MeiER, HintERhuber, ...
Mit einem Filter geht das ja nicht, mit Lookup, Locate auch nicht ... Wie
denn dann, oder muß
ich wirklich alle Datensätze durchlaufen und einen Pos() Stringvergleich
machen ???
Oder vielleicht per SQL-Query ?
Ciao, Andre.
Geht mit SQL im WHERE-Abschnitt:
<Field> [not] LIKE <Ausdruck>,
wobei '%' Platzhalter für beliebig viele Zeichen (auch gar keins) und '_'
Platzhalter für genau ein Zeichen ist.
Das einzige Problem ist, daß LIKE casesensitiv ist (also auf
Groß-,Kleinschreibung achtet).
Wenn du also wirklich alle Einträge haben willst, wo die gesuchte
Kombination auftaucht, egal, ob groß oder klein geschrieben, wird dir nicht
viel anderes übrig bleiben, als von Hand durchzugehen.
Thomas
>Hallo,
Hallo Andre!
>
>welche Möglichkeit gibt es eine Teilstringsuche in einer Datenbank
>durchzuführen ?
War da nicht grad gestern hier irgendwas...?
>...
>Oder vielleicht per SQL-Query ?
Ja, und mit "like", imho.
Rgds.
Heiko.
>Mit einem Filter geht das ja nicht, mit Lookup, Locate auch nicht ... Wie
>denn dann, oder muß
>ich wirklich alle Datensätze durchlaufen und einen Pos() Stringvergleich
>machen ???
Teilstrings kann man doch mit einem Filter heraussortieren.
Die folgenden string vars:
fieldval = Fieldname
filterval = Teilstring
procedure TForm1.MeineTabelleFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
accept:=false;
if pos(UPPERCASE(filterval),UPPERCASE(DataSet[filterval] ))<>0 then
accept:=true;
end;
Es waere noch angebracht auf null Werte von filterval +fieldval zu pruefen.
mfg
ken
Funktioniert zumindest Lokal
> War da nicht grad gestern hier irgendwas...?
Ja aber mit nem tollen Subject ...
Habs jetzt bei GENAUEREM hinsehen auch gefunden. :)
Ca, Andre.
> procedure TForm1.MeineTabelleFilterRecord(DataSet: TDataSet;
> var Accept: Boolean);
> begin
> accept:=false;
> if pos(UPPERCASE(filterval),UPPERCASE(DataSet[filterval] ))<>0 then
> accept:=true;
> end;
>
> Es waere noch angebracht auf null Werte von filterval +fieldval zu
pruefen.
Ahh, das ist ja nicht schlecht ... DANKE ! :)) (Hätt ich ja auch selber
drauf kommen können!) ;)
Ca, Andre.
probier mal
select * from tabelle where upper(feld) like '%ER%'.
Das Upper müßtest Du in die jeweilige Syntax der DB übersetzen,
z.B. Uppercase, etc....
Access und einige andere DB's nehmen ein * anstelle des % als
Wildcard.
Denke daran, dass mit upper(feld) kein Index benutzt werden kann,
es sei denn Du benutzt Oracle8i oder den SQL-Server 7, die
können das wohl. Also könnte u.U. die Abfrage etwas länger
dauern, dürfte aber schneller sein, als eine Abfrage mit pos().
Viele Grüße
Uli
> welche Möglichkeit gibt es eine Teilstringsuche in einer Datenbank
> durchzuführen ?
der letzte Absatz war Schwachsinn, denn mit '%ER%' kannst Du
sowieso keinen Index benutzen (höchstens mit 'ER%') :-).
>Hallo,
>
>> War da nicht grad gestern hier irgendwas...?
>
> Ja aber mit nem tollen Subject ...
Ich war's nich! ;-)
Heiko.
Aber ich, sorry und einen Haufen Asche auf mein Haupt... ;-)
Jörg