Autor Beitrag
rocco1980
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 18.09.09 12:18 
Servus Gemeinde,

da ich mit meinem SQL Wissen noch nie so weit vorgedrungen war, habe ich mich nun festgefahren und bräuchte Eure Hilfe.
Das sind die Fakten :

Ich bin dabei eine DB unter Nutzung der BDE zu realisieren die aus 3 Tabellen besteht.

Tabelle 1 spiegelt einen Vorgang wieder ( ID_Tabelle1, Datum, Ereigniss, Bemerkungen, ID_Tabelle2, IDTabelle3)
Tabelle 2 spiegelt eine Namensliste wieder ( ID_Tabelle2, Name, Vorname )
Tabelle 3 spiegelt eine Hilfsmittelliste wieder ( IDTabelle3, TypHilfsmittel )

Tabelle 1 ist somit die Haupttabelle und ist mit Tabelle 2 und 3 jeweils über eine eindeutige ID verbunden.

Soweit auch kein Problem. Nun zu meiner Frage. Folgendes Szenario soll ermöglicht werden. Unter meinem Delphi Programm soll eine Suche stattfinden die aus einer Maske mit 3 Checkboxen besteht. Also Suche nach Datum, nach Name und nach Hilfsmittel. Nun soll der Nutzer variieren können. Also Suche nach Datum und Namen oder Suche nach Datum und Hilfsmittel oder Suche nach Namen und Hilfsmittel. Also mehrere Wege.

Da dies alles in einer Abfrage geschehen soll, bin ich nun soweit das dieses Szenario über eine Unterabfrage oder auch mehrere geschehen muss. Nun bin ich die ganze Zeit schon am tüfteln wie diese Unterabfrage aussehen soll, bzw. wie somit auch die gesamte Abfrage aussehen muss um jeweils die unterschiedlichen Suchen durchführen zu können. Später soll alles dann per Parameter aus Delphi übergeben werden, was ja das kleinste Übel ist.

Im Voraus schon mal dank für das lesen bis hier hin..

bis dahin der Rocco
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 18.09.09 12:26 
Sollte durch einen klassischen Join über die Tabellen möglich sein

ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
Select 
 ...
from 
    Tabelle1 t1 
    join Tabelle2 t2 on t2.ID_Tabelle2 = t1.ID_Tabelle2
    join Tabelle3 t3 on t3.ID_Tabelle3 = t1.ID_Tabelle3
where
    ...
;

_________________
Markus Kinzler.
rocco1980 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 18.09.09 12:38 
Das verbinden ist mir schon klar und ist auch schon gemacht. Doch das Problem liegt weiter unten. Ich muss für die Suche 3 WHERE Klauseln definieren. Nach Datum, nach Name und nach Hilfsmitteln. Verbinde ich die 3 Klauseln über AND so kann ich nur auf einen Fall reagieren, wenn der Nutzer im Programm alle drei Felder angibt zur Suche. Verknüpfe ich die Klauseln mit ANY so zeigt er mir nich das erhoffte Ergebniss.

Einfacher vielleicht formuliert : Ich bräuchte eine Abfrage in der Abfrage für die 4 Suchszenarien. Kenne das aus Access-Zeiten.
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Fr 18.09.09 13:12 
Hi,

ich schätze, du wirst die Unterscheidung im Delphi Quelltext machen. Hier kannst du dann entweder deine Where Klausel dynamisch anpassen oder einen Filter auf das bereits gejointe Ergebnis setzen. Solltest du nicht wissen wie mal Filter oder Querys per Code setzt, kannst du es hier nachlesen.

Critter

_________________
Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
rocco1980 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 18.09.09 13:15 
Ich ahnte schon das es darauf hinauslaufen wird...mhhhh...ich lass das Thema noch offen. Vielleicht hat noch jemand eine Idee...
Guenter Forster
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 18.09.09 22:38 
Ich hatte auch schon über Stunden mit leer und NIL - Werten herumgedocktert. Da ja mal am Programm ja auch was geändert werden werden könnte ist das dynamische über delphi flexibler. In Deinem fall ja auch nur ein kurzer String - Zusatz wie

sqlstr = 'from xxx joinxxx'
if ceck1.checked then sqlstr := sqlstr + 'Where xxx'

und so weiter.
Dann können leicht neue Chekboxen hinzugefügt werden.

Gruß Günter
rocco1980 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 21.09.09 09:36 
Vielen Dank den Lesern und Beantwortern. Ich habe es nun so gelöst und handel die Abfragen über Delphi und dem SQL-String ab. Vielen Dank...

der Rocco