Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi View mit Parameter? (https://www.delphipraxis.net/144624-view-mit-parameter.html)

stahli 12. Dez 2009 10:46

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBX

View mit Parameter?
 
Hallo,

ich habe mal eine kurze Verständnisfrage:

Bei einer View ist es wohl nicht möglich, einen Parameter zuzuweisen - oder übersehe ich da etwas?
Ich kann nicht nachträglich das Ergebnis filtern, da der Parameter in der "not exist"-Klausel steckt und in der Rückgebemenge nicht mit enthalten ist.

Konkret will ich hier alle Vereinsmitglieder erhalten, die in einem bestimmten Turnier noch nicht eingesetzt sind.

Delphi-Quellcode:
CREATE VIEW CLUBMEMBERSFREEFORMELEE(
    CLUBPOS,
    CLUBID,
    CLUBPOWERPOS,
    CLUBPOWERID,
    MEMBERPOS,
    GID)
AS
select c.pos, c.gid, p.pos, p.gid, m.pos, m.gid from members m
join clubpowers p on (m.clubpowerid = p.gid)
join clubs c on (p.clubid = c.gid)
where (m.activate = 1) and
      (not exists (select pl.gid from tournamentmeleeplayers pl
                   join tournamentsmelee t on (pl.tournamentmeleeid = t.gid)
                   where (pl.personid = m.personid) and (t.gid = :tgid) // hier geht es um :tgid
                  ))
order by c.pos nulls last, c.gid, p.pos nulls last, p.gid, m.pos nulls last, m.gid
;
Ohne "and (t.gid = :tgid)" erhalte ich alle Vereinsmitglieder, die noch in KEINEM Turnier eingesetzt sind. Soweit funktioniert das :-)
Nun möchte ich die Abfrage auf ein bestimmtes Turnier (t.gid) beziehen.

Ich bin dabei, dafür eine dynamische Abfrage zu regeln (also eine Select-Abfrage mit den jeweiligen Parametern).

Gibt es bessere Lösungen, die ich noch nicht gefunden habe?
Eine globale "Datenbankvariable" (in meinem Fall "tgid") wäre m.E. nützlich. Man könnte dann tgid einen Wert zuweisen (in meinem Fall varchar(50)) und künftig würde die View diesen Wert als Parameter benutzen.
Gibt es so etwas?


Stahli

Jürgen Thomas 12. Dez 2009 11:41

Re: View mit Parameter?
 
Hallo,

VIEWs mit Parametern gibt es in der Tat nicht. Meistens regelt man das mit einer WHERE-Klausel beim Aufruf der VIEW; aber das hilft dir natürlich überhaupt nicht.

Eine mögliche Alternative ist eine StoredProcedure, die diesen Parameter als Input übernimmt, intern die View benutzt und die getroffenen Datensätze als Output liefert.
Zitat:

Eine globale "Datenbankvariable" (in meinem Fall "tgid") wäre m.E. nützlich.
Schau dir einmal in den ReleaseNotes von 2.0 und 2.1 an, was zu den CONTEXT-Variablen gesagt wird. Das könnte dein Problem lösen.

Gruß Jürgen

mkinzler 12. Dez 2009 11:42

Re: View mit Parameter?
 
Oder die SP gleich anstatt des Views verwenden

stahli 13. Dez 2009 13:26

Re: View mit Parameter?
 
@Jürgen:
Danke, so etwas wie die Kontext-Variablen meinte ich, allerdings frei zu definieren durch den Nutzer.
Also normale Variablen wie in einer Prozedur, nur halt global in der DB (und vielleicht sogar von außen???) verwendbar. Wenn sie vielleicht sogar von außen verwendbar wären, könnte man sie als Schnittstelle nutzen und z.B. die gerade erzeugte ID eines neuen Datensatzes einer Tabelle hinterlegen und vom Programm aus abfragen o.ä.
Wie mir die Kontext-Variablen jetzt konkret helfen könnten, konnte ich wegen meinem schlechten englisch nicht erkennen.
Vielleicht wären die globalen Variablen ja eine sinnvolle Sache, die jemand kompetentes (also nicht ich ;-) ) bei dem Firebird-Team mal anregen könnte...
Globale Variablen könnten auch helfen, rekursive Triggeraufrufe u.ä. zu unterbinden.

Wie gesagt, in bin in dem Bereich noch nicht so fit, aber das wären m.E. nützliche Optionen einer FB-Datenbank und hätten mir die Arbeit an einigen Stellen erleichtert.


@mkinzler:
Ja, die SP werde ich mir mal für künftige (komplexe) Probleme vormerken.
Im Moment erschien es mir einfacher, ein einfaches Select-Statement dynamisch zu erzeugen und bei Bedarf auszuführen.


Danke Euch beiden.

Gruß
Stahli


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz