Discussion:
Kombinationsfeld und Unterformular
(zu alt für eine Antwort)
Beat Würsten
2004-04-05 19:31:05 UTC
Permalink
Hallo NG!

Ich versuche in einem Unterformular ein Kombinationsfeld zu erstellen, dass
einen Datensatz
im Unterformular basierend auf dem im Kombinationsfeld gewählten Wert sucht.

Leider werden nach dem erstellen des Kombinationsfeldes alle Daten des
Unterformulars gezeigt.
Mein Wunsch wäre, dass nur die Daten gezeigt werden, die mit dem
Hauptformular verknüpft sind.(1:n Verknüpfung)

Müsste man an diesem Stück Code etwas ändern?

Private Sub Kombinationsfeld158_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Dim rs As Object

Set rs = Me.Recordset.Clone

rs.FindFirst "[BenutzerId] = " & Str(Nz(Me![Kombinationsfeld158], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Vielen Dank!
Beat
Alfred Bosch
2004-04-05 22:00:39 UTC
Permalink
Hi,

schau do mal auf der Seite von Anette Becker vorbei.
Sie hat sehr gute Beispiele zu diesem Thema.

Gruß

Alfred

http://www.pc-creativ.de
Post by Beat Würsten
Hallo NG!
Ich versuche in einem Unterformular ein Kombinationsfeld zu erstellen, dass
einen Datensatz
im Unterformular basierend auf dem im Kombinationsfeld gewählten Wert sucht.
Leider werden nach dem erstellen des Kombinationsfeldes alle Daten des
Unterformulars gezeigt.
Mein Wunsch wäre, dass nur die Daten gezeigt werden, die mit dem
Hauptformular verknüpft sind.(1:n Verknüpfung)
Müsste man an diesem Stück Code etwas ändern?
Private Sub Kombinationsfeld158_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[BenutzerId] = " & Str(Nz(Me![Kombinationsfeld158], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
Vielen Dank!
Beat
Tobias Schirdewan
2004-04-06 01:23:53 UTC
Permalink
Hi,
Post by Beat Würsten
Müsste man an diesem Stück Code etwas ändern?
rs.FindFirst "[BenutzerId] = " & Str(Nz(Me![Kombinationsfeld158], 0))
Versuch's mal so:
rs.FindFirst "[BenutzerId] = " & Str(Nz(Me![Kombinationsfeld158], 0)) & _
" AND [DeineVerknüpfungsID] = " & Forms![DeinHauptForm]![HauptID]

Auf diese Weise werden nur die Child-Datensätze berücksichtigt, die auch
tatsächlich mit dem MasterRecord verknüpft sind.

HTH
Grüße
Tobias
Beat Würsten
2004-04-07 19:02:12 UTC
Permalink
Hi!

Ich habe deine Idee (vielen Dank!) gleich umgesetzt. Leider hatte ich keinen
Erfolg.

Private Sub Kombinationsfeld158_AfterUpdate()
' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[AufgabenId] = " & Str(Nz(Me![Kombinationsfeld158], 0)) &
_

' [Form_3_Auswertung] ist das Hauptformular!
"AND [BenutzerId]=" & Forms![Form_3_Auswertung]![BenutzerId]

If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Er zeigt immer noch sämtliche Datensätze des Unterformulars an. (Als wäre
dieVerknüpfung [BenutzerId],[BenutzerId] nicht vorhanden.)
Ziel wäre, dass beim Auswählen eines bestimmten Benutzers im Hauptformular
nur die Datensätze [AufgabenId] im Unterformular angezeigt werden, die mit
dem Benutzer verknüpft sind.

mfG
Beat
Peter Doering
2004-04-07 20:04:50 UTC
Permalink
Hallo,
Post by Beat Würsten
[...]
Er zeigt immer noch sämtliche Datensätze des Unterformulars an. (Als wäre
dieVerknüpfung [BenutzerId],[BenutzerId] nicht vorhanden.)
Ziel wäre, dass beim Auswählen eines bestimmten Benutzers im Hauptformular
nur die Datensätze [AufgabenId] im Unterformular angezeigt werden, die mit
dem Benutzer verknüpft sind.
Dann musst du einen Filter auf das UFo setzen, z.B.

Me.Filter = "BenutzerID=" & Me!Kombifeld
Me.FilterOn = True

Pruefung auf Null (Nz) kriegst du selbst hin, oder?

Alternativ kannst du die RecordSource mit Bedingung neu setzen.

Gruss - Peter
--
Ich beantworte keine Fragen per Email.
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Beat Würsten
2004-04-09 07:50:40 UTC
Permalink
Leider sind meine VB-Kenntnisse zu klein, um aus deinem Vorschlag etwas
sinnvolles
basteln zu können. (Leider!)
Trotzdem will ich zu einer Lösung kommen.

Dem Unterformular einen Filter vorzusetzen leuchtet mir ein.

Me.Filter = "BenutzerID=" & Me!Kombifeld
Me.FilterOn = True

- Aber wo kommt der hin? Beim AfterUpdate desKombifeldes?
- Braucht es den Vorschlag von Tobias Schirdewan nicht mehr?

rs.FindFirst "[BenutzerId] = " & Str(Nz(Me![Kombinationsfeld158], 0)) & _
" AND [DeineVerknüpfungsID] = " & Forms![DeinHauptForm]![HauptID]

Ich wiederhole mein Problem:

Was ich habe:
Ein Hauptformular das mit einem Unterformular verknüpft ist. (1:n Beziehung)
Im Hauptformular befindet sich ein Kombifeld, wo man einen Benutzer
auswählen kann.
Nach dem Auswählen des Benutzers erscheinen im Unterformular, die zum
Benutzer
gehörenden Aufgaben.(Einzelformular)

Was ich möchte:
Im Unterformular möchte ich ein Such-Kombifeld, wo ich eine Aufgabe, die
der Benutzer erledigt hat suchen kann und es auch sogleich anzeigt.

Für weitere Ideen und Lösungsvorschläge bin ich sehr dankbar.

MfG
Beat
Tobias Schirdewan
2004-04-09 10:17:09 UTC
Permalink
Hallo Beat!

Zuächst einmal: Wie sieht denn ungefähr Deine Tabellenstruktur aus? Ich
nehme mal an, ungefähr so:
Haupttabelle (Benutzer)
ID, Benutzername, ...
Untertabelle (Aufgaben)
ID, BenutzerID (Verknüpfung), Aufgabe, Erledigt (ja/nein), Datum (o.ä.),...

Im Unterformular sollen im Kombifeld alle Einträge stehen, die im Feld
"Aufgabe" gespeichert sind und zur BenutzerID gehören.
Demnach sollte die Datenquelle für das Kombifeld eben lauten (wobei das
Kombifeld ungebunden sein muß (d.h. die Eigenschaft "Steuerelementinhalt"
bleibt leer):
"SELECT ID,Aufgabe FROM Untertabelle WHERE Erledigt = TRUE AND BenutzerID =
" & Forms![frmHauptForm]![ID]
Diese Einstellung kannst Du z.B. im "Beim Anzeigen" Ereignis des Hauptforms
vornehmen, so daß mit jedem Hauptdatensatz auch die zugehörrige Datenquelle
für die Unterdatensätze angezeigt werden. In der gleichen Ereignisprozedur
solltest Du auch den Filter für das Ufo erstmal ausschalten, sonst ist er
noch von der letzten Kombiauswahl gültig.

Bei Auswahl einer Aufgabe soll dann in einem Textfeld im Unterformular das
Datum (oder welche Feldinhalte auch immer) stehen. Das kannst Du dann z.B.
folgendermaßen erreichen:
In den Eigenschaften des Kombifeldes wählst Du bei "Ereignissen/Nach
Aktualisierung" den Eintrag "Ereignisprozedur" und klickst auf die 3 Punkte:
Private Sub cmbSuchKombi_AfterUpdate
Me.Filter = "ID = " & cmbSuchKombi.Column(0)
' So wird der Filter des Unterformulars auf den einen Datensatz gesetzt,
' der in der Untertabelle die gewünschten Daten enthält
Me.FilterOn = True
End Sub

So sollte es eigentlich klappen, ausgetestet habe ich es nicht.

Grüße
Tobias
Peter Doering
2004-04-09 17:41:40 UTC
Permalink
Hallo,
Post by Beat Würsten
Leider sind meine VB-Kenntnisse zu klein, um aus deinem Vorschlag etwas
sinnvolles basteln zu können. (Leider!)
Sorry, ich hatte nicht den kompletten Thread gelesen.

Wenn HFo und UFo ueber BenutzerID verknuepft sind, werden nur die Aufgaben
des im HFo angezeigten BenutzerID's angezeigt, und meine Empfehlung mit dem
Filter ist ueberfluessig.

Wenn du auch andere Benutzer-ID's im UFo siehst, kann an der Verknuepfung
etwas nicht stimmen. Ueberpruef sie nochmal.

Das ist unabhaengig vom Kombifeld. Da du nur zu einer bestimmten AufgabenID
springen willst, stimmt die Loesung, die du schon bekommen hattest
(Bookmark).

Uebrigens solltest du einen sprechenden Namen anstelle Kombinationsfeld158
vergeben.

Gruss - Peter
--
Ich beantworte keine Fragen per Email.
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Loading...