AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

View mit Parameter?

Ein Thema von stahli · begonnen am 12. Dez 2009 · letzter Beitrag vom 13. Dez 2009
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#1

View mit Parameter?

  Alt 12. Dez 2009, 11:46
Datenbank: Firebird • Version: 2.1 • Zugriff über: IBX
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
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: View mit Parameter?

  Alt 12. Dez 2009, 12:41
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: View mit Parameter?

  Alt 12. Dez 2009, 12:42
Oder die SP gleich anstatt des Views verwenden
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: View mit Parameter?

  Alt 13. Dez 2009, 14:26
@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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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