Neuigkeiten:

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

Mobiles Hauptmenü

Direkt zu Datensatz in einem Register springen

Begonnen von xoius, Mai 17, 2018, 16:54:23

⏪ vorheriges - nächstes ⏩

xoius

Hallo liebe Forumsgemeinde und Accessgenies,
ich stelle mich offenbar gerade sehr dumm an und studiere seit 3h Stunden erfolglos das Internet oder suche schlicht nach den falschen Schlüsselwörtern.

Ich habe ein Formular mit dem Namen "Hauptseite". Darauf habe ich ein Register mit Namen "Registerstr10" und drei Register (mit Nummerierung 0,1,2).

Ich möchte nun in Register 0 (auf dem mit dem Bericht "Bericht Aktuelle Arbeitspakete" alle relevanten Arbeitspakete aus der Datenbank zusammengefasst sind) auf einen Button klicken können und dadurch Register 2 aufrufen. Dort ist das Formular "ArbeitspaketeDetail" eingebettet. Dort soll natürlich nicht irgendein Arbeitspaket, sondern genau das Arbeitspaket mit der ID mit der ID von Registerseite 0 angezeigt werden.

Im Prinzip hätte ich gern so etwas
Forms!Hauptseite!RegisterStr10 = 2.Recordset.FindFirst "ID = " & Me.[ID]
was natürlich nicht funktioniert.

Ich hänge also bei der schlichten Öffnung des Registers fest:
Private Sub Öffnen_Click()
   Forms!Hauptseite!RegisterStr10 = 2
End Sub

Ist einer so lieb und kann mir weiterhelfen?

DF6GL

Hallo,

bist Du sicher, da ein vernünftiges Konzept zu verfolgen?


Stimmt es auch , dass Du einen Bericht auf der 1. Reg-Seite anzeigst?

Prinzipiell ist sowas nur möglich, wenn beim Klick auf den Button die ID in eine globale Variable (oder Ähnliches, wie TempVar-Element) abgelegt wird und bei Ändern-Ereignis des Register-St.El.  das Formular "ArbeitspaketeDetail" gefiltert wird.



Lachtaube

Registerseiten haben eindeutige Werte, die im Eigenschaftsblatt als Seitenindex eingesehen werden können, wenn die Seite im Entwurfsmodus aktiviert ist. Zum Wechelsn auf eine bestimmte Seite, genügt es dann Me.RegisterStr10 = 4711 zu schreiben bzw. aus einem Unerformmular heraus Me.Parent.RegisterStr10 = 4711. Beim Zugriff auf ein Recordset eines Unterformulars spielt es keine Rolle, ob das Unteformularsteuerelement auf einer Seite oder sonstwo positioniert ist. Vom Unterformular erfolgt der Zugriff auf das  Recordset eines anderen, parallel liegenden Unterformularsteuerelements mittels Me.Parent.NameDesAnderenUnterformularsteuerelements.Form.Recordset oder vom Hauptformular aus mittels Me.NameDesAnderenUnterformularsteuerelements.Form.Recordset.
Grüße von der (⌒▽⌒)

xoius

Hallo ihr zwei!

@DF6GL:
bist Du sicher, da ein vernünftiges Konzept zu verfolgen? -> Eine schwere Frage und vielleicht etwas zu umfassen für so einen kleinen Unterpunkt. Es ist in der Tat ein Bericht. In der Übersicht sollen keine Einträge editiert werden, es geht mehr um den Überblick, deswegen dachte ich, dass Bericht hier gut wäre. Was wäre denn eine bessere Alternative?

@Lachtaube:
Das sind verdammt gute Hinweise, doch ich stelle mich noch beim Anwendungstransfer zu dämlich an. Soweit habe ich es verstanden und soweit funktioniert es natürlich auch.

Private Sub Öffnen_Click()
    Me.Parent.RegisterStr10 = 2
End Sub

Jetzt fehlt natürlich noch die Zuordnung der richtigen ID und damit das Anzeigen des richtigen Datensatzes. Bitte sei so lieb und greif mir dabei noch mal unter die Arme...

Ich habe verstanden, dass ich die ID aus dem Bericht per Me.Parent.ID.Form.Recordset bekomme...(hoffe verstanden zu haben)
Aber wie wähle ich damit den Datensatz aus?
So geht es ja nicht
Me.Recordset.FindFirst "ID = " & Me.Parent.ID

Lachtaube

Du musst das Unterformular adressieren, in dem die Suche stattfinden soll. Deine Anweisung bezieht sich auf das das Recordset desFormular, in welchem der Code hinterlegt ist und ausgeführt wird. Verwende also die vorletzte Form aus meiner Antwort und hänge dort die .FindFirst-Anweisung an.

PS: der des Unterformularsteuerelements kann wie der Name des darin beheimateten Formulars lauten - muss aber nicht. Am besten schaust Du im Eigenschaftblatt nach dem Namen.
Grüße von der (⌒▽⌒)

xoius

Ich stehe noch immer auf dem Schlauch...das hier liefert mir ne Fehlermeldung

Private Sub Öffnen_Click()
    Me.Parent.RegisterStr10 = 2
    Me.Parent.ID.Form.Recordset.FindFirst "ID = " & Me.Parent.ID
End Sub

Also das Unterformular aus dem es kommt heißt BerichtAktuelleArbeitspakete. Das Unterformularsteuerelement, das ich haben möchte heißt ID. Die gefundene ID muss im nun aktuellen Unterformular ArbeitspaketeDetail mit ID abgeglichen und der entsprechende Datensatz ausgewählt werden.

Lachtaube

Me.Parent.ArbeitspaketeDetail.Form.Recordset.FindFirst "ID=" & Me.ID
Grüße von der (⌒▽⌒)

xoius

Also:
Private Sub Öffnen_Click()
    Me.Parent.RegisterStr10 = 2
      Me.Parent.ArbeitspaketeDetail.Form.Recordset.FindFirst "ID=" & Me.ID
End Sub

Vielen Dank! Das ist in der Tat eine der Varianten, die ich auf Deinen Tipp hin ausprobierte. Access haut allerdings auch hier ne Fehlermeldung raus: Laufzeitfehler 2465 - Anwendungs- oder Objektdefinierter Fehler.
Eine Idee, was das Problem ist?


Lachtaube

Dann heißt das Unterformularsteuerelement vermutlich nicht ArbeitspaketeDetail.
Grüße von der (⌒▽⌒)

xoius

#10
Hier meine bisherige Datenbank... (deaktiviert da Lösung gefunden)

MzKlMu

#11
Hallo,
Du solltest erst mal die Beziehungen in Ordnung bringen bevor Du mit Abfragen und Formularen weiter machst.

- Beziehungen laufen immer über den Primärschlüssel und ggf. einen extra Fremdschlüssel

- es ist in den Beziehungen grundsätzlich referentielle Integrität einzustellen

- Die Mitarbeitertabelle muss 2x aufgenommen werden, sonst ist keine Unterscheidung zwischen Zugewiesen und Verantwortlich möglich

Was ist in der Projekttabelle der Unterschied zwischen der ID und der Projekt_ID ? Eines von beiden ist überflüssig, vermutlich die ID.

Erst wenn die Beziehungen passen, kannst Du Dich ernsthaft mit Abfragen und Formularen befassen.

Siehe Bild.
Gruß Klaus

DF6GL

Hallo,

die Krux beim aktuellen Problem sind die falschen Namen der UFO_Steuerelemente:

Private Sub Öffnen_Click()
    Me.Parent.RegisterStr10 = 2
     Me.Parent.[Arbeitspakete im Detail].Form.Recordset.FindFirst "ID=" & Me.ID
End Sub

Beaker s.a.

Hallo,
ZitatDann heißt das Unterformularsteuerelement vermutlich nicht ArbeitspaketeDetail.
Genau, das heisst "Bericht Aktuelle Arbeitspakete".

@xoius
Lies http://www.donkarl.com?FAQ4.2
Die Codezeile muss also so aussehen
     Me.Parent.[Arbeitspakete im Detail].Form.Recordset.FindFirst "ID=" & Me.ID

gruss ekkehard

edit:
War Franz mal wieder schneller.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
ich würde trotzdem erst mal das Datenmodell bereinigen.
Gruß Klaus