Supportnet / Forum / Datenbanken
Direktes SQL-Ergebnis in ein Ausgabefeld übernehmen
Frage
Ich habe eine Tabelle mit Filmen (FilmID, Titel ...) eine Tabelle mit Darstellern (DarstellerID, Name) und eine Verknüpfungstabelle (FilmID, DarstellerID). Somit hat ein Film mehrere Darsteller. Jetzt habe ich eine Filmliste (Endlosformular) in der ich Titel, und die ersten 2 Darsteller anzeigen möchte im Format:
TITEL DARSTELLER1 DARSTELLER 2
Jetzt möchte ich einfach ein SQL-Statement erstellen wie z.B. Select first Darsteller from.... usw. Das Ergebnis möchte ich einfach in ein ungebundenes Ausgabefeld stellen. Wie funktioniert das?
Generell gefragt: Wie kann ich einfach nur ein normales Textfeld auf die Maske werfen und es mit dem Ergebnis eines SQL-Statements füllen! Tausend Dank!
Antwort 1 von JohnnyLoser
Zitat:
...nur EIN normales Textfeld ... mit DEM Ergebnis eines SQL-Statements füllen!
...nur EIN normales Textfeld ... mit DEM Ergebnis eines SQL-Statements füllen!
Hi,
grundsätzlich mußt Du Dir natürlich klar sein, daß ein SQL-Query mehr als nur einen Wert zurückgeben kann. Dies kannst Du nur einschränken, indem Du in der Selektion Funktionen, wie FIRST, LAST, MIN, MAX, SUM oder COUNT benutzt oder über die Kriterien der Abfrage (WHERE-Klausel) diese soweit einschränkst, daß nur ein Wert zurückgegeben wird, bzw. eine Kombination aus Funktion und Kriterien.
Wenn also nur ein Wert zurückgegeben wird, kann im Formular in den Steuerelementeigenschaften eines "ungebundenen" Textfeldes eine DLookUp-Funktion (DomWert) verwenden, wie z.B.:
=DomWert(Feld;Tabelle[;Kriterien])Feld kann hierbei ein Feldname oder eine Funktion sein.
Tabelle kann sowohl eine Tabelle, als auch eine Abfrage sein.
Kriterien ist optional und stellt die WHERE-Klausel ohne "WHERE" dar.
Beispiele:
=DLookUp("Feld1";"Tabelle1")
'gibt den Wert aus Feld1 des ersten Datensatzes der Tabelle1 wieder
=DLookUp("MAX(Feld1)";"Tabelle1")
'gibt den höchsten Wert aus Feld1 wieder
=DLookup("Feld1";"Abfrage1";"ID = " & Me.xID)
'gibt den Wert aus Feld1 wieder, wo das Feld ID mit
'dem Wert des Formularfeldes xID übereinstimmt
=DLookUp("SUM(Wert1)";"Abfrage1";"ID < " & Me.xID)
'gibt die Summe aller Werte des Feldes Wert1 aus der
'Abfrage1 wieder, deren ID kleiner als der Wert des
'Formularfeldes xID istIch hoffe, das hilft Dir schon weiter
Johnny
Antwort 2 von oliverV
Hallo Johnny,
dein Tipp dürfte nur bedingt weiterhelfen, ich habe auch eine Filmdatenbank, die genauso aufgebaut ist wie Manfred’s DB.
Tabelle Filme
Tabelle Schauspieler
Tabelle Schauspielerzuordnung (ID, ID-Film, ID-Schauspieler)
Auto-Wert ist inkrementell.
Davon ausgehend, das der „wichtigste“ Schauspieler als erstes erfasst wird, also die niedrigste ID in der Tabelle Schauspielerzuordnung hat, ist es kein Problem mit MIN den Hauptdarsteller zu ermitteln.
Das Problem ist allerdings der 2. Schauspieler (mit der 2. niedrigsten ID).
Für einen einzelnen Film kann man sich in einer Abfrage die zwei niedrigsten ID’s anzeigen lassen, aber für alle Filme (als Basis für das Endlosformular / -Bericht)...
Als Lösung könnte ich mir eine zählgesteuerte Schleife vorstellen, dafür bin ich aber zu VBAhnungslos.
Gruß
oliver
dein Tipp dürfte nur bedingt weiterhelfen, ich habe auch eine Filmdatenbank, die genauso aufgebaut ist wie Manfred’s DB.
Tabelle Filme
Tabelle Schauspieler
Tabelle Schauspielerzuordnung (ID, ID-Film, ID-Schauspieler)
Auto-Wert ist inkrementell.
Davon ausgehend, das der „wichtigste“ Schauspieler als erstes erfasst wird, also die niedrigste ID in der Tabelle Schauspielerzuordnung hat, ist es kein Problem mit MIN den Hauptdarsteller zu ermitteln.
Das Problem ist allerdings der 2. Schauspieler (mit der 2. niedrigsten ID).
Für einen einzelnen Film kann man sich in einer Abfrage die zwei niedrigsten ID’s anzeigen lassen, aber für alle Filme (als Basis für das Endlosformular / -Bericht)...
Als Lösung könnte ich mir eine zählgesteuerte Schleife vorstellen, dafür bin ich aber zu VBAhnungslos.
Gruß
oliver
Antwort 3 von JohnnyLoser
Hi Oliver,
diesen Gedanken hatte ich auch zuerst, allerdings wieder verworfen, als ich festgestellt habe, daß die Tabellen keinen Verweis auf die "Wertigkeit" des Schauspielers enthielten. Du hast in der Zuordnungs-Tabelle noch ein zusätzliches ID-Feld, welches Dir die Prioritätsfolge widergibt, Manfred nicht.
@Manfred
Vielleicht kannst Du Deine Tabelle um dieses ID-Feld ergänzen.
Deine Angaben sind etwas verwirrend für mich:
a) ...eine Filmliste (Endlosformular) in der ich Titel, und die ersten 2 Darsteller anzeigen möchte...
b) ...Das Ergebnis möchte ich einfach in ein ungebundenes Ausgabefeld stellen...
c) ...nur ein normales Textfeld auf die Maske werfen und es mit dem Ergebnis eines SQL-Statements füllen...
Mir ist nicht ganz klar, was Du vorhast.
Johhny
diesen Gedanken hatte ich auch zuerst, allerdings wieder verworfen, als ich festgestellt habe, daß die Tabellen keinen Verweis auf die "Wertigkeit" des Schauspielers enthielten. Du hast in der Zuordnungs-Tabelle noch ein zusätzliches ID-Feld, welches Dir die Prioritätsfolge widergibt, Manfred nicht.
@Manfred
Vielleicht kannst Du Deine Tabelle um dieses ID-Feld ergänzen.
Deine Angaben sind etwas verwirrend für mich:
a) ...eine Filmliste (Endlosformular) in der ich Titel, und die ersten 2 Darsteller anzeigen möchte...
b) ...Das Ergebnis möchte ich einfach in ein ungebundenes Ausgabefeld stellen...
c) ...nur ein normales Textfeld auf die Maske werfen und es mit dem Ergebnis eines SQL-Statements füllen...
Mir ist nicht ganz klar, was Du vorhast.
Johhny
Antwort 4 von MANFRED PETER MAIER
Hallo zusammen! Danke für die nützlichen Hinweise! Werde die Sachen ausprobieren!
@Johnny:
Den jeweiligen Darsteller über SQL zu ermitteln (mit First) ist kein Problem. Nur die Verknüpfung zu einem Feld im Endlosformular, zur jeweiligen ID war für mich das Problem. Vor allem kannte ich DLookup nicht. Vorher hab ich mir immer die Frage gestellt: "Da kann man wunderbar in VBA mit Docmd.SQL ein SQL ausführen, aber das Ergebnis irgendwo reinspeichern (in eine Variable) geht nicht!"
Wenn das so funktioniert, werde ich das Feld mit der Wertigkeit natürlich einführen.
@Oliver
Du hast mein Problem genau erkannt! Was meinst Du genau mit zählgesteuerter Schleife? Ich habe bei jedem angezeigten Datensatz die FilmID als unsichtbares Feld dabeistehen. Somit hätte ich die Verbindung vom Film zu den Darstellern, aber wenn ich auf dieses Feld zugreifen will, nimmt er immer nur den Wert des ersten Datensatzes.
@Johnny:
Den jeweiligen Darsteller über SQL zu ermitteln (mit First) ist kein Problem. Nur die Verknüpfung zu einem Feld im Endlosformular, zur jeweiligen ID war für mich das Problem. Vor allem kannte ich DLookup nicht. Vorher hab ich mir immer die Frage gestellt: "Da kann man wunderbar in VBA mit Docmd.SQL ein SQL ausführen, aber das Ergebnis irgendwo reinspeichern (in eine Variable) geht nicht!"
Wenn das so funktioniert, werde ich das Feld mit der Wertigkeit natürlich einführen.
@Oliver
Du hast mein Problem genau erkannt! Was meinst Du genau mit zählgesteuerter Schleife? Ich habe bei jedem angezeigten Datensatz die FilmID als unsichtbares Feld dabeistehen. Somit hätte ich die Verbindung vom Film zu den Darstellern, aber wenn ich auf dieses Feld zugreifen will, nimmt er immer nur den Wert des ersten Datensatzes.
Antwort 5 von JohnnyLoser
Hi Manfred,
ich habe eine Beispieldatenbank erstellt, die Dein Problem lösen kann.
Die Lösung hier zu umschreiben ist mir einfach zu mühselig, daher schicke ich Dir die Datei einfach mal per mail.
Gruß
Johnny
ich habe eine Beispieldatenbank erstellt, die Dein Problem lösen kann.
Die Lösung hier zu umschreiben ist mir einfach zu mühselig, daher schicke ich Dir die Datei einfach mal per mail.
Gruß
Johnny

