Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: xoius am Mai 17, 2018, 16:54:23

Titel: Direkt zu Datensatz in einem Register springen
Beitrag von: xoius am Mai 17, 2018, 16:54:23
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?
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: DF6GL am Mai 17, 2018, 17:03:39
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.


Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: Lachtaube am Mai 17, 2018, 17:14:38
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.
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: xoius am Mai 22, 2018, 08:48:52
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
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: Lachtaube am Mai 22, 2018, 09:16:31
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.
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: xoius am Mai 22, 2018, 09:39:16
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.
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: Lachtaube am Mai 22, 2018, 09:55:03
Me.Parent.ArbeitspaketeDetail.Form.Recordset.FindFirst "ID=" & Me.ID
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: xoius am Mai 22, 2018, 15:10:26
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?
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: DF6GL am Mai 22, 2018, 15:18:39
Hallo,

lad mal die DB hier hoch, datenreduziert und gezippt.

Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: Lachtaube am Mai 22, 2018, 15:21:22
Dann heißt das Unterformularsteuerelement vermutlich nicht ArbeitspaketeDetail.
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: xoius am Mai 22, 2018, 15:44:56
Hier meine bisherige Datenbank... (deaktiviert da Lösung gefunden)
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: MzKlMu am Mai 22, 2018, 16:01:50
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.
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: DF6GL am Mai 22, 2018, 16:14:41
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
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: Beaker s.a. am Mai 22, 2018, 16:40:15
Hallo,
ZitatDann heißt das Unterformularsteuerelement vermutlich nicht ArbeitspaketeDetail.
Genau, das heisst "Bericht Aktuelle Arbeitspakete".

@xoius
Lies http://www.donkarl.com?FAQ4.2 (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.
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: MzKlMu am Mai 22, 2018, 16:54:14
Hallo,
ich würde trotzdem erst mal das Datenmodell bereinigen.
Titel: Re: Direkt zu Datensatz in einem Register springen
Beitrag von: xoius am Mai 22, 2018, 16:55:04
Ich danke euch allen. Ich dachte, ich hätte die Bezeichnung von "Arbeitspakete im Detail" in "ArbeitspaketeimDetail"geändert. Das hat scheinbar nicht so geklappt wie gedacht. Nun funktioniert es ausgezeichnet. Vielen vielen Dank für eure Geduld und eure Hilfe!

@MzKlMu: Deine vollkommen richtigen Anmerkungen habe ich natürlich auch übernommen.