Autor Beitrag
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Fr 24.01.03 11:35 
Hallöle...

Folgendes Problem:

1 Datenbank. In dieser 4 relevante Felder. 2 EditFelder.

1. EditFeld liefert Suchstring für DBFeld 1

2. EditFeld liefert Suchstring für DBFeld 2, 3 ODER 4

Ich versuche also folgendes zu realisieren:

1. in DBFeld1 zeige nur die, und immer nur die, die mit Edit1
übereinstimmen
2. suche in DBFeld2, 3 und 4 nach Ähnlichkeiten mit Edit2, und zeige
diese zusätzlich zur 1. filterung an

so hab ichs probiert, klappt aber nicht:

SELECT * FROM datenbank WHERE dbfeld1 = 'edit1'
AND dbfeld2 = 'edit2'
OR dbfeld3 = 'edit2'
OR dbfeld4 = 'edit2'

dann hab ichs so probiert, geht auch nicht:

SELECT * FROM datenbank WHERE dbfeld2 = 'edit2'
OR dbfeld3 = 'edit2'
OR dbfeld4 = 'edit2'
AND dbfeld1 = 'edit1'

klingt warscheinlich kompliziert, aber ich hoffe ihr wisst was ich meine.. :D

mfg
kiwicht
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 24.01.03 13:16 
Hi,

kiwicht hat folgendes geschrieben:

SELECT * FROM datenbank WHERE dbfeld1 = 'edit1'
AND dbfeld2 = 'edit2'
OR dbfeld3 = 'edit2'
OR dbfeld4 = 'edit2'


Ich gehe jetzt nur hierauf ein. Erstens hat AND Priorität, auch ohne gesetzte Klammern. Also machst Du hier folgendes : Du kriegst nur etwas zurückgeliefert, sofern edit 1 und 2 in der DB gefunden werden. Sewhe ich das richtig, so kannst Du die ORs auch gleich weglassen. So müßte es aber gehen :

ausblenden Quelltext
1:
2:
3:
AND (dbfeld2 = 'edit2'
  OR dbfeld3 = 'edit2'
  OR dbfeld4 = 'edit2')


Gruß
Hansa
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.01.03 13:17 
Weiß nicht ganz was du meinst. Habs auch ehrlich gesagt nur überflogen.

Probiers mal mit dem JOIN Befehl und verwende LIKE statt =. (wobei letzteres kein Problem darstellen sollte).
Ich glaub aber nicht, daß das ist, was du meinst.

Nachtrag:

Is ja dummfug was ich sage.
Du arbeitest ja nicht mit mehreren Tabellen. :)

_________________
Stellen Sie sich bitte Zirkusmusik vor.
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Fr 24.01.03 13:30 
Jepp, mit Join hatte ich auch schon geliebäugelt, und dann über den Umweg einer temporären Tabelle... ich lies es sein,

denn die Lösung mit Klammern funktioniert... hätt ich damals in Wahlpflicht Logik-Mathe bloss besser aufgepasst... :D :D

Danke für die Hilfe!
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 24.01.03 13:45 
Hi,

Zitat:
... hätt ich damals in Wahlpflicht Logik-Mathe bloss besser aufgepasst...


hehe, ich habs gemacht. :mrgreen: So was einfaches mit Joins oder sogar temp. Tabellen.... :hair:

Gruß
Hansa
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Fr 24.01.03 14:29 
Hallo,

was willst Du damit?
Zitat:

SELECT * FROM datenbank WHERE dbfeld1 = 'edit1'
AND dbfeld2 = 'edit2'
OR dbfeld3 = 'edit2'
OR dbfeld4 = 'edit2'


Ist doch klar, dass nichts gefunden wird, solange in der DB keine Einträge vorhanden sind, die "edit1" und "edit2" enthalten.

Ich würde einmal folgendes Probieren:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
var s:String;
...
  s:='SELECT * FROM datenbank WHERE dbfeld1=''%s'' AND dbfeld2=''%s'' OR dbfeld3=''%s'' OR dbfeld4=''%s''';
MyQuery.SQL.Text:=Format(s, [edit1.Text, edit2.Text, edit2.Text, edit2.Text]);
MyQuery.Open;
...


Oben beschriebenes Verfahren gilt für Strings und die Annahme, dass Edit1 und Edit2 keinen Leerstring enthalten.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 24.01.03 15:08 
Hi,

Zitat:
Oben beschriebenes Verfahren gilt für Strings und die Annahme, dass Edit1 und Edit2 keinen Leerstring enthalten.

...und würde genau so wenig funktionieren, wie das ursprüngliche. :mrgreen:

@kiwicht : Geht es doch nicht? :?!?:
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Fr 24.01.03 16:44 
jupp.. die klammer-methode funzt hervoragend... und bei der von smiegel, seh ich nich durch... :oops: die ergibt doch das gleiche wie meine lösung, einmal AND, dreimal OR.. nunja, egal, jetzt geht es ja! :D
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Fr 24.01.03 17:03 
Hallo,

@hansa

stimmt, Du hast recht. Habe in meinem Beispiel vergessen die Klammer zu setzen. Man sollte nicht nur einfach über die Postings hinweglesen sondern sie eigentlich richtig lesen.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 24.01.03 19:28 
Hi,

smiegel hat folgendes geschrieben:
Habe in meinem Beispiel vergessen die Klammer zu setzen. Man sollte nicht nur einfach über die Postings hinweglesen sondern sie eigentlich richtig lesen.


Was soll ich dazu noch sagen ? :shock: Genauso isses. Dasselbe Problem wie vorher. :P

Gruß
Hansa