Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Master-Detail-Formular

Begonnen von crystal, November 05, 2016, 21:45:38

⏪ vorheriges - nächstes ⏩

crystal

Hallo Leute,

gern möche ich ein Master-Detail-Formular erstellen, ähnlich Outlook:
links Kurz-Ansicht (der Mails) als Endlos-Formular, rechts daneben Details (der Mail).

Bei einem geteilten Formular finde ich keine Möglichkeit, den "Selektions-Bereich" individuell zu gestalten - es wird immer eine Tabellen-Ansicht dargestellt.

Oder muss ich für links einfach ein Endlos-Formular definieren und für rechts ein zweites Formular, das mir die Details anzeigt (per VBA an die Länge des ersten Formulars angepasst und an dessen rechten Rand "geklebt")?

Oder wie geht das?

Danke im Voraus für Antworten!

crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MzKlMu

Hallo,
nimm doch einfach für die Linke Seite ein Listenfeld, das in einem Hauptformular angezeigt wird. Im Listenfeld zeigst Du die Kurzinfos an. Mit einem Klick auf den Eintrag zeigt das Hafo den angeklickten Eintrag im Detail. 3, 4 Zeilen Code, mehr ist das nicht.
Gruß Klaus

crystal

Hallo Klaus,

Danke für deine Antwort.
Problem ist nur, dass ich links schon mehrere Datenfelder darstellen muss, weil die Datenfelder für sich nicht eindeutig sind. Ich bräuchte also quasi ein mehrzeiles Listenfeld, um einzelne Datensätze voneinander unterscheiden zu können...
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

PhilS

Zitat von: crystal am November 05, 2016, 21:55:55Problem ist nur, dass ich links schon mehrere Datenfelder darstellen muss, weil die Datenfelder für sich nicht eindeutig sind. Ich bräuchte also quasi ein mehrzeiles Listenfeld, um einzelne Datensätze voneinander unterscheiden zu können...
Was wäre das Problem mit einem großen Form, das rechts die Details anzeigt und links in einem Unterformular die Listenansicht als Endlosformular? - So wie du es zu Beginn angedeutet hast.
Das sollte die Anforderungen erfüllen und ist auch recht einfach umzusetzen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

crystal

Hi PhilS,

habe ich schon probiert. Leider zeigt Access im linken Unterformular immer nur genau einen Datensatz an - dem vom HF.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Josef P.

Hallo!

Dann wird das Unterformular mit dem Hauptformular verknüpft sein.
Beachte: Access hat leider das lästige "Feature", die Verknüpfungsfelder selbst zu setzen, wenn die Quelle des Unterformular geändert wird.

Tipp bezüglich Synchronisierung der beiden Unterformulare: Wenn du beiden das identische Recordset zuweist, musst du dich um keine Navigation bestehender Datensätze kümmern.

mfg
Josef

crystal

Hallo Josef,

du hast Recht: ich habe jetzt die Verknüpfung rausgenommen und sehe im UF eine Liste aller Records, allerdings nur als Tabelle, nicht als mehrzeiliges Formular. Im HF wird der erste DS angezeigt. Selektiere ich im UF einen anderen DS, geschieht im HF nichts.

Oder muss ich mein Detail-Form auch als Subform einbinden, weil du von den beiden UFs sprichst?

Danke für einen weiteren Tipp, der mir auf die Sprünge hilft.

Gruß
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Josef P.

Hallo!

Du kannst auch das Hauptformular und das Unterformular verbinden.

Wenn du im UF einen Datensatz auswählst und diesem im HF sehen willst, müssen entweder beide das selbe Recordset verwenden oder du reagierst im HF auf das Current-Ereignis des UF und springst zum ausgewählten Datensatz.

Zum Testen die Variante mit dem selben Recordset:
Im HF:
private sub Form_Load()
   With me.DeinUnterformularSteuerelement
      set .Form.Recordset = me.Recordset
      'zur Sicherheit noch die Verknüpfungseigenschaften leeren, falls das "Feature" wirkt (musst du ausprobieren)
      .LinkMasterFields = vbnullstring
      .LinkChildFields = vbnullstring
   end with
end sub



Zitatallerdings nur als Tabelle, nicht als mehrzeiliges Formular.
Dann hast du im Formular im Unterformularsteuerelement die Standardansicht auf Datenblatt gestellt.

mfg
Josef

crystal

Hallo,

eigentlich habe ich alles so gemacht, aber im HF habe ich als Herkunftsobjekt der inzwischen 2 UFs "Tabelle.mytable" stehen gehabt. Erst nachdem ich das auf "subForm1" und "subForm2" geändert habe, werden die beiden UFs wie gewünscht dargestellt.
In beiden UFs selbst habe ich als Datenquelle "mytable" stehen, aber es klappt nicht, dass im UF2 die Details des DS angezeigt werden, den ich in UF1 auswähle.

Was mache ich falsch?

Gruß
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Josef P.

Du musst per Code dafür sorgen, dass die Datensätze synchronisiert werden.
Verwendest du jetzt doch wieder 2 Unterformulare, die Synchron gehalten werden sollen?

Hast du den Code aus meinem letzten Beitrag ausprobiert?
(Den kannst du auch mit einer kleinen Anpassung für das Verbinden von 2 Unterformularen verwenden.)

Vielleicht hilft dir folgender Beitrag: Formulare synchronisieren

crystal

Hallo,

ja, ich verwende 2 UFs, weil du da so eine Andeutung gemacht hast.

Das HF war zunächst ungebunden, inzwischen habe ich es wieder an mytable gebunden und im Load-Event deinen Code auf beide UF-Steuerelemente angewendet. Das wäre sinnlos, wenn das HF ungebunden wäre.

Muss ich in den Subforms selbst, also im Entwurfsmodus die Datenquelle (mytable) löschen?

Danke für deine Geduld an diesem Sonntag!

crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Josef P.

ZitatMuss ich in den Subforms selbst, also im Entwurfsmodus die Datenquelle (mytable) löschen?
Die kannst du ohne Datenquelle laden, da das Recordset später zugewiesen wird.
Ich speichere solche Unterformularen trotzdem gerne mit Datenquelle ab, da ich dann im Entwurf die Feldliste verwenden kann.
Die Datenquelle sieht meist so aus: select * from Tabelle  where 1=0
Damit kann ich die Felder nutzen, es wird aber kein Datensatz geladen.

crystal

Hallo,

Ok, Danke für diesen Tipp.

Aber es funktioniert bei mir noch nicht.

Ich habe ein HF, gebunden an mytable, mit zwei UF-Steuerelementen, denen ich im Load-Event die Recordsource des HF zuweise.
Wenn ich nun im UF1 einen DS auswähle, wird er in UF2 nicht angezeigt, vielmehr bleibt UF2 auf dem ersten DS des RS stehen.

Wie auch? Woher soll UF2 wissen, dass es den DS anzeigen soll, der in UF1 ausgewählt wurde? Insofern verstehe ich deine Aussage nicht.

ZitatTipp bezüglich Synchronisierung der beiden Unterformulare: Wenn du beiden das identische Recordset zuweist, musst du dich um keine Navigation bestehender Datensätze kümmern.

Oder liegts daran, dass ich als Datensatzquelle im HF die Tabelle selbst angegeben habe?

Gruß
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Josef P.

Beim Programmieren ist eines besonders wichtig: auf die Wörter eines Textes achten. ;)
Die RecordSource eines Formulars ist etwas anderes als das Recordset des Formulars.

Vielleicht hilft die Wiederholung des Codes. ;)
private sub Form_Load()
   With me.DeinUnterformularSteuerelement
      set .Form.Recordset = me.Recordset
      'zur Sicherheit noch die Verknüpfungseigenschaften leeren, falls das "Feature" wirkt (musst du ausprobieren)
      .LinkMasterFields = vbnullstring
      .LinkChildFields = vbnullstring
   end with
end sub

Statt "DeinUnterformularSteuerelement" nimmst du zum Testen einmal den Namen deines Unterformularsteuerelements mit dem Endlosformular.

mfg
Josef

crystal

Hallo Josef,

hab ich doch gemacht (Code im HF):

Private Sub Form_Load()

   With Me.Untergeordnet3
      Set .Form.Recordset = Me.Recordset
      'zur Sicherheit noch die Verknüpfungseigenschaften leeren, falls das "Feature" wirkt (musst du ausprobieren)
      .LinkMasterFields = vbNullString
      .LinkChildFields = vbNullString
   End With
   With Me.Untergeordnet5
      Set .Form.Recordset = Me.Recordset
      'zur Sicherheit noch die Verknüpfungseigenschaften leeren, falls das "Feature" wirkt (musst du ausprobieren)
      .LinkMasterFields = vbNullString
      .LinkChildFields = vbNullString
   End With
   
End Sub


Damit wird der Recorset des HF doch auf beide UFs übertragen. Und der Recordset des HF wird doch via Recordsource definiert, oder?

Gruß,

crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...