PDA

Vollständige Version anzeigen : Situationsabhängige Abfrage für Kombinationsfeld


Barbara Flindt
07.05.2001, 09:06
Hallo, Forumsteilnehmer,

kann man in Access 97 die Abfrage für die Datenherkunft variieren, je nach dem, ob eine schon vorhandene Auswahl angezeigt wird oder der Dropdown-Pfeil gedrückt wird ?

Mein Problem:
es gibt folgende Tabellen: Projekte, Berater und Teams. Ein Projekt kann 1-n Berater haben, die Verknüpfung steht in der Teams-Tabelle. Ob ein Berater aktiv ist, steht in der Berater-Tabelle. In einem Formular zur Projektbearbeitung werden per Unterformular, basierend auf Teams in einem Kombinationsfeld die Berater dieses Projekts angezeigt / eingegeben.
Wenn ein Berater eingegeben werden soll, sollen natürlich nur aktive Berater ausgewählt werden können. Das klappt auch, da die Abfrage mit 'where [inaktiv] = false' läuft.
Wenn aber ein älteres Projekt angezeigt wird, soll aber ein Berater, der mittlerweile inaktiv ist, trotzdem angezeigt werden (mit 'inaktiv' vor dem Namen). Im Moment wird dann kein BeraterNamen angezeigt.

Vielen Dank im Voraus!
Barbara

Steffen
07.05.2001, 09:32
Hallo Barbara,

also wenn ich das richtig verstanden habe, so verwendest Du ein Endlosformular für die Anzeige Deiner Projekte. Vielleicht bringt Dich ja folgendes weiter.
Übergebe dem Kombinationsfeld doch einfach generell als Datengrundlage die Tabelle "Berater". Beim GotFocus-Ereignis des Kombinationsfeldes würde ich dann der Eigenschaft RecordSource (bin mir da jetzt nicht ganz sicher) den SQL-Ausdruck ("SELECT * FROM Berater WHERE [inaktiv]= False") übergeben. Und wenn das LostFocus-Ereignis eintritt, würde ich wieder die gesamte Tabelle ("SELECT * FROM Berater") als Datenherkunft für das Kombinationsfeld setzen.

Steffen

Barbara Flindt
07.05.2001, 10:43
Hallo Steffen,
danke für die prompte Antwort!
Leider ist es nicht so einfach - ich habe es gerade mal ausprobiert, und habe ein neues Problem.

Also, das Hauptformular basiert auf der Tabelle Projekte, und zeigt jeweils einen Projektsatz an. In dem HF gibt ein Unterformular 'Beratungsteams', welches über Projekt-Id vernüpft ist zur Projekt-Id in der Tabelle 'Teams' (Teams enthält nur Projekt-Id und Berater-Id als Felder).

Das Unterformular selbst basiert auf dieser Abfrage:
SELECT DISTINCTROW [Teams].Projekt_ID, [Teams].Berater_ID, Berater.Name, Berater.Vorname, Projekte.Projekt_Nr, IIf([inaktiv]=True,"inaktiv: " & [Vorname] & " " & [Name],[Vorname] & " " & [Name]) AS Berater
FROM Berater INNER JOIN (Projekte INNER JOIN [Teams] ON Projekte.ID = [Teams].Projekt_ID) ON Berater.Berater_ID = [Teams].Berater_ID;

Dieses Unterformular ist ein Endlosformular mit einem Kombinationsfeld mit folgender Datenherkunft:

SELECT Berater.Berater_ID, IIf([Inaktiv]=True,"inaktiv: " & [Vorname] & " " & [Name],[Vorname] & " " & [Name]) AS Gesamtname, Berater.Azubi
FROM Berater
WHERE (((Berater.Inaktiv)=False))
ORDER BY Berater.Name, Berater.Vorname;

Eben, wo ich es kopiert habe, sehe ich gerade, dass ich das 'inaktiv:' vor den Namen in der Kombinationsfeld-Abfrage hätte sparen können... Aber das ist jetzt nicht das Problem.
Ich habe wie von dir vorgeschlagen für das Kombinationsfeld bei GotFocus und LostFocus die RecordSource-Eigenschaft geändert und erhalte nun, wenn ich zu dem Kombinationsfeld gehe, die "Parameterabfrage" für Projekt_Id. Die scheint also irgendwo 'unterwegs' verloren zu gehen ??

Steffen
07.05.2001, 12:51
Hallo Barbara,

leider konnte ich Deinen aufgetretenen Fehler nicht nachvollziehen. Ich habe mir mal eine kleine "Testdatenbank" erstellt, aber leider konnte ich nicht die gleiche Fehlermeldung generieren. Bei Bedarf sende ich sie Dir gern per eMail zu.

Steffen

Barbara Flindt
09.05.2001, 08:31
Hallo Steffen,

vielen Dank für die BeispielDatenbank, die mir mein Problem gelöst hat. Hier nun noch die Lösung für andere Leser:

das Zauberwort heißt RowSource. RecordSource bezieht sich auf das Formular, RowSource auf das Kombinationsfeld. Bei dem Ereignis GotFocus kann man mit 'if Me.NewRecord' abfragen, ob ein neuer Satz angefügt wird oder nicht.

Nochmals danke,
Barbara