Entwickler-Ecke

Datenbanken - Datenbank nach Feldwerten durchsuchen...


erich.wanker - Fr 01.02.08 11:40
Titel: Datenbank nach Feldwerten durchsuchen...
Hallo Leute, hab ne Frage betreffend Firebird SQL / Zeos / Delphi7..

In einer Tabelle hab ich 2 Felder
erstes Feld: Objektname (Char(100))
zweites Feld: Verlinkung (Integer)

nun suche ich alle die Objektnamen, die eine Verlinkung mit Nr.:7 und mit Nr.:9 haben

Vielen Dank für die Hilfe..

Erich Wanker

************************************
als Beispiel:
Suche alle objekte, die 7 und 9 als Link besitzen..
Ergebnis: 2 Records -> Objekt1 und Objekt2

ObjName | Verlinkung
--------------------
Object1 13
Object1 21
Object1 44
Object1 501
Object1 7 !
Object1 9 !
Object2 34
Object2 76
Object2 3
Object2 86
Object2 7 !
Object2 134
Object2 9 !
Object3 1
Object3 2
Object3 4
Object3 5
Object3 6
Object3 7 !
Object3 17
Object3 21


************************************
--




Using:
Delphi7 | Jedi | Reportbuilder | LmdTools | Zeos | InfoPower | RXLib | Firebird 2.0

Links:
http://msdn.microsoft.com/library/default.asp
http://www.swissdelphicenter.ch/torry/
http://www.w3schools.com/sql/
http://www.delphi-fundgrube.de/
http://www.schattenbaum.net/php/


zuma - Fr 01.02.08 12:01

wie wär's mit

'Select * from tabelle where Verlinkung in (7,9)' ??

Am besten nen String mit den nr'n der Verlinkung füllen,
z.b. in einer schleife

Delphi-Quelltext
1:
lString := lString + Verlinkung + ', ';                    

den String dann noch eben vom überflüssigen letzen Komma befreien

Delphi-Quelltext
1:
lString := copy(lString, 0, length(lString)-1);                    

und dann mit

Delphi-Quelltext
1:
Format('Select * from tabelle where Verlinkung in (%s)', [lString])                    

den Sql aufbereiten und abschicken.

Tabelle und Verlinkung musste natürlich durch deine Bezeichner ersetzen ..


erich.wanker - Fr 01.02.08 12:40

Danke für deine schnelle Info,

ganz verstehen tu ich´s aber nicht ;-)
Bei deinem Ansatz wird ja das Feld "Objektname" ignoriert .. oder?
Hab bis dato inner join Lösungswege versuch - aber nix brauchbares gefunden ..

oder steh ich auf der Leitung .. (was ja immer öfters bei mir vorkommt - ich brauch Urlaub ;-) )

LiGrü

Erich


jasocul - Fr 01.02.08 12:47


SQL-Anweisung
1:
Select *                    

sorgt dafür, dass alle Felder (also auch Objektname) der Tabelle angezeigt werden. Dafür ist das "*" zuständig.


zuma - Fr 01.02.08 12:57

wie jasocul geschrieben hat ...
sollte deine Tabelle mal breiter werden (sprich, mehr spalten bekommen), wäre eine feldnamenangabe statt des * sicher sinnvoller/performanter.
so ala
Select Objektname, Verlinkung from ....


erich.wanker - Fr 01.02.08 16:13

ich fürchte, ich hab mich nicht richtig ausgedrückt...

Als Lösungsansatz (der !extrem! dumm ist..) könnte ich:


Erste Schleife
**************

Quelltext
1:
2:
3:
4:
5:
6:
Select Objektname from Tabelle group by Objektname -> (mehrere Vorkommen des gleichen objektnamens unterdrücken)
while not eof do begin
 x=fieldbyname(Objektname)
.*******hier kommt die zweite schleife rein
next record;
end;


Zweite Schleife
***************


Quelltext
1:
2:
3:
4:
5:
6:
7:
x:='';
Select Objektname,Verlinkung from Tabelle where Objektname = x order by Verlinkung descending
while not eof do begin
if fieldbyname(verlinkung) in (3,9) then x:=x+inttostr(fieldbyname(verlinkung)+',');
next record;
end;
if x ='3,9' then = weiß ich, das dieser Objektname zutreffend ist... diese info könnte ich nun in eine hilfstabelle oder in ein zusätzliches feld der Tabelle schreiben..

LiGrü

Erich

Moderiert von user profile iconjasocul: Code-Tags hinzugefügt