Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: xoius am Mai 07, 2020, 13:14:09

Titel: Wechseln des Registers inkl Variablenübergabe
Beitrag von: xoius am Mai 07, 2020, 13:14:09
Moin ihr Lieben,
ich brauche nochmal euere Hilfe.

Ausgangslage
Ich habe im Hauptformular formProdukte ein Register mit je einem Registertab für die Formulare ufoAlleKosten (Endlosformular, Register 1) und formKosten(Einzelformular, Register 2)

Im Endlosformular wird für jeden Datensatz ein Button "Details" angezeigt, der beim Drücken auf den entsprechenden Datensatz im anderen Registertab springen soll.

Problemstellung
Mit Forms!formProdukte!RegisterStr105.Pages(2).SetFocus kann ich das richtige Register öffnen, kann aber offenbar keine Variable übergeben.

Mit DoCmd.OpenForm "formKosten", , , "KostenID=" & Me!KostenID
öffnet sich zwar das Formular mit der richtigen ID, aber eben nicht im Register

Wie schaffe ich es beide Tugenden zu verbinden :) Tipps?
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: PhilS am Mai 07, 2020, 15:05:44
Zitat von: xoius am Mai 07, 2020, 13:14:09
Problemstellung
Mit Forms!formProdukte!RegisterStr105.Pages(2).SetFocus kann ich das richtige Register öffnen, kann aber offenbar keine Variable übergeben.
Welche Variable möchtest du wohin übergeben?
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: xoius am Mai 07, 2020, 16:21:18
Ich möchte die Variable "KostenID" des Datensatzes aus dem Endlosformular "ufoAlleKosten" bei dem der Button geklickt wurde, an das Formular "formKosten" übergeben. Beide Formulare arbeiten mit der gleichen Tabelle tblKosten, die die Variable KostenID enthält.
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: Beaker s.a. am Mai 07, 2020, 17:17:51
@xoius
(Luftcode)
Private Sub DeinButton_Click()
    Me.Parent.UFo2Control.Form.Recordset.FindFirst = _
          "KostenID = " & Me.FeldMitKostenID
    Me.Parent.RegisterStr105.Value = 2
End Sub

(Namen anpassen)
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: xoius am Mai 08, 2020, 09:09:36
Vielen Dank Beaker,

leider funktioniert es noch nicht. Ich habe es so umgesetzt und bekomme eine Fehlermeldung "Methode oder Datenbankobjekt nicht gefunden"


Private Sub Befehl176_Click()
Me.formProdukte.formKosten.Form.Recordset.FindFirst = _
    "KostenID = " & Me.KostenID
Me.formProdukte.RegisterStr105.Value = 2
End Sub


Nochmal zum Aufbau:

Ich habe das formProdukte.
Darin enthalten ist das Register RegisterStr105.
Auf Registerkarte 1 ist das Formular ufoAlleKosten eingebettet, indem die Variable KostenID aus der Tabelle tblKosten unsichtbar im Feld KostenID enthalten ist.
Auf Registerseite 2 ist das Formular formKosten eingebettet, was ebenfalls über eine Abfrage mit der tblKosten verbunden ist.

Zusatzfrage:
Wenn ich von einem ganz anderen Formular formODOverview mit dem Unterformular ufoAufgaben über einen Button ebenfalls direkt zu formProdukte/Register105/formKosten möchte, funktioniert das "Me" vermutlich nicht? Wie gehe ich da vor?
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: DF6GL am Mai 08, 2020, 09:29:56
Hallo,


Me.PARENT.formKosten.Form.Recordset.FindFirst = _
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: PhilS am Mai 08, 2020, 09:32:16
Zitat von: xoius am Mai 08, 2020, 09:09:36
leider funktioniert es noch nicht. Ich habe es so umgesetzt und bekomme eine Fehlermeldung "Methode oder Datenbankobjekt nicht gefunden"
[...]
Zusatzfrage:
Wenn ich von einem ganz anderen Formular formODOverview mit dem Unterformular ufoAufgaben über einen Button ebenfalls direkt zu formProdukte/Register105/formKosten möchte, funktioniert das "Me" vermutlich nicht? Wie gehe ich da vor?
Parent ist eine Eigenschaft des Formulars, die ein evtl. vorhandenes Hauptformular zurückliefert. - Diese sollte in Beaker's Beispiel unverändert bleiben.

Ich würde im Hauptformular eine öffentliche Prozedur erstellen, die KostenId und Registerseite als Argumente erhält und dann die Positionierung auf den Datensazt erledigt (analog zum Beispiel). Die kannst du dann sowohl aus den Unterformularen als auch von sonstwo aufrufen.


Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: Beaker s.a. am Mai 08, 2020, 14:50:47
Hallo,
ZitatIch würde im Hauptformular eine öffentliche Prozedur erstellen, die KostenId und Registerseite als Argumente erhält und dann die Positionierung auf den Datensazt erledigt (analog zum Beispiel). Die kannst du dann sowohl aus den Unterformularen als auch von sonstwo aufrufen.
War auch meine erste, eigentlich auch richtigere, Idee  :-[
gruss ekkehard
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: xoius am Mai 12, 2020, 12:30:16
Wirft leider immernoch den Fehler aus...Er sagt Anwendungs- oder Objektfehler...

Könnt ihr euren Alternativvorschlag bitte nochmal klarer machen? Ich lege eine öffentliche Prozedur an?
Also zum Beispiel:

Public Function fktKosten()
Me.Parent.formKosten.Form.Recordset.FindFirst = _
    "KostenID = " & Me.KostenID
Me.Parent.RegisterStr105.Value = 2
End Function


Oder wie übergebe ich da die Parameter?
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: DF6GL am Mai 12, 2020, 13:44:34
Hallo,

heißt der Name des UFO-Steuerelementes, das das Formular "formKosten" anzeigt, auch wirklich "formKosten"?

Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: Beaker s.a. am Mai 12, 2020, 16:21:27
@xoius
ZitatIch lege eine öffentliche Prozedur an?
Wo? Im Formular (HFo oder UFo) oder in einem allgem. Modul?
Wenn im Formular, lese: http://www.donkarl.com?FAQ4.2 (http://www.donkarl.com?FAQ4.2)
In einem allgem. Modul musst du der Function eine Referenz auf das HFo
übergeben. Am besten auch gleich die ID.

'Aufruf im HFo
fktKosten(Me, Me.UFo1ControlName.Form.KostenID)
'Aufruf im UFo1
fktKosten(Me.Parent, Me.KostenID)

Public Function fktKosten(frm As Access.Form, lKostenID As Long)
    With frm
        .UFo2ControlName.Form.Recordset.FindFirst "KostenID = " & lKostenID
        .RegisterStr105.Value = 2
    End With
End Function

gruss ekkehard
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: xoius am Mai 13, 2020, 12:31:41
Vielen Dank für eure lieben Tipps, aber ich stochere eher im Dunkeln und stelle mich dabei offennbar zu blöd an.

Folgendes habe ich umgesetzt:

HF beim Klicken
=fktKosten([Me];[Me].[formAufgaben].[Form].[KostenID])

Ufo beim Klicken
=fktKosten([Me].[Parent];[Me].[KostenID])

Public Function fktKosten(frm As Access.Form, lKostenID As Long)
    With frm
        .formKosten.Form.Recordset.FindFirst "KostenID = " & lKostenID
        .RegisterStr105.Value = 2
    End With
End Function


Die Procedure liegt im allgm. Modul.

Es kommt folgender Fehler: "...Objekt enthält das Automatisierungsobjekt Me nicht."

Vielleicht nochmal grafischer/klarer was ich vorhabe:
a.
Startpunkt
HF "formODOverview" mit "RegisterStr5" auf Seite 0 ist das UF "formAufgaben" (Endlosformular) (war mal eigenständig, deswegen heißt es nicht ufoAufgaben). Über den Button "Befehl176" soll es zum Ziel gehen.

Ziel
HF "formProdukte" mit "RegisterStr105" auf Seite 2 ist UF "formKosten" (war mal eigenständig, deswegen heißt es nicht ufoKosten)

b.
Startpunkt
HF "formProdukte" mit "RegisterStr105" auf Seite 1. Da ist das UF "ufoAlleKosten" (Endlosformular) mit Button "Befehl176" (heißt zufällig genauso)
Ziel
HF "formProdukte" mit "RegisterStr105" auf Seite 2 ist UF "formKosten" (war mal eigenständig, deswegen heißt es nicht ufo)

Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: DF6GL am Mai 13, 2020, 13:53:03
Hallo,

lad mal die DB hier hoch, datenreduziert, komprimiert/repariert und gezippt.

Dann können wir die Sache mal konkreter ansehen.
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: Beaker s.a. am Mai 13, 2020, 16:38:18
ZitatEs kommt folgender Fehler: "...Objekt enthält das Automatisierungsobjekt Me nicht."
Das liegt an den eckigen Klammern, - schmeiss die raus!
Die braucht man nur wenn in Objektnamen Sonderzeichen enthalten sind,
was man eh vermeiden sollte.
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: DF6GL am Mai 13, 2020, 17:51:37
Hallo,

liegt eher daran:

ZitatDie Procedure liegt im allgm. Modul.


und dort ist die Referenz auf das aktuelle Formular (es gibt an dieser Stelle ja keines) unbekannt.
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: Beaker s.a. am Mai 13, 2020, 18:16:39
Hallo Franz,
Zitatund dort ist die Referenz auf das aktuelle Formular (es gibt an dieser Stelle ja keines) unbekannt.
Sehe in der Function keine Referenz auf das Form mit Me. Das Form wird
doch als Parameter (frm) übergeben und damit referenziert.
gruss ekkehard
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: DF6GL am Mai 14, 2020, 07:59:06
Hallo,

ja sorry, habe überlesen, dass das in einem Ausdruck in der Klick-Eigenschaft des UFOs ("Ufo beim Klicken" ??) steht...

Trotzdem ist auch dort "ME" nicht verwendbar oder definiert..

Der Ausdruck sollte so lauten:

=fktKosten(.[Parent];[KostenID])

Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: Beaker s.a. am Mai 14, 2020, 17:31:11
Hallo Franz,
Bist du sicher, dass das als Ausdruck im Steuerelementinhalt funzt?
Bei mir funzt es nur mit der kompletten Referenz
=FunctionsName([Formulare]![NameDesHFo]; ...
"..." weil das bei mir nur mit einem festen Wert funktioniert
weder deine Schreibweise noch diese beiden
=FunctionsName([Formulare]![NameHFo]; FeldnameImUFo)
=FunctionsName(([Formulare]![NameHFo];[Formulare]![NameHFo]![NameUFoControl]![Formular]![FeldNameImUFo])
bekomme ich zur Anzeige. Beim 1. Ausdruck erscheint #Typ!, beim 2. #Name?
Durch das Testen bin ich aber auch zu der Überzeugung gekommen,
dass es sehr nervig ist diese Function im Steuerelementinhalt aufzurufen.
Die sollte schon durch ein definiertes Ereignis ausgelöst werden, wie vom
TS gewünscht (Button).
gruss ekkehard
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: DF6GL am Mai 15, 2020, 17:53:31
Hallo,

jain..    8)

habe was vergessen:


=fktKosten([].[Parent];[KostenID])
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: xoius am Mai 20, 2020, 15:11:11
Oh wow, ja das funktioniert. Viele Dank, dass ihr nicht lockergelassen habt!

Also innerhalb des Formulars formProdukte kann ich nun mit

=fktKosten([].[Parent];[KostenID])

wechseln,...

aber...
aus dem HFForum formODOverview komme ich leider noch nicht auf das Registerelement im anderen Formular formProdukte...


=fktKosten([];[].[formProdukte].[Form].[KostenID])


Ich habe verschiedenste Konstellationen ausprobiert. Meist kommt der Fehler, dass er das Formular formProdukte nicht kennt. Was mach ich denn nun noch verkehrt?
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: DF6GL am Mai 20, 2020, 16:05:46
Hallo,

wie wäre es, wenn Du die DB mal hier hochlädst?  komprimiert/repariert und gezippt.  Sonst kommen wir nur beschwerlich weiter.
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: xoius am Mai 26, 2020, 15:05:47
Hallo ihr Lieben,

es hat etwas gedauert die DB zu bereinigen.
Zur Erinnerung: Ich möchte aus dem Reiter PV Aufgaben in formODOverview nach formProdukte in den zweiten Reiter Kosten und dort die richtigen Kosten anzeigen lassen.
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: Beaker s.a. am Mai 26, 2020, 16:07:26
Hallo Christian,
Zitataus dem HFForum formODOverview komme ich leider noch nicht auf das Registerelement im anderen Formular formProdukte...
Wozu auch? Die beiden Forms haben doch inhaltlich gar nichts miteinander
zu tun. Bei welchem Control hast du die Function denn eingetragen?
ZitatMeist kommt der Fehler, dass er das Formular formProdukte nicht kennt
Na ja, das muss natürlich geöffnet sein, wenn du darauf zugreifen willst.
Die KostenID befindet sich aber zusätzl. in einem UFo des HFo "formProdukte", -
also sollte dann

=fktKosten([];[].[formProdukte].[Form].uctlAlleKosten.[KostenID])

funzen. Vermutlich werden dabei aber immer oder zumindest meistens die
Kostendetails des 1. DS aus "ufoAlleKosten" angezeigt.

OT:
1. Gewöhne dir an den UFo-Controls ein anderes Prefix zu geben als dem
eingebetteten Form; uctl... o.ä. (s.o.)
2. Wie kann man mit so einem wirren Beziehungsfenster vernünftig arbeiten?

gruss ekkehard
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: xoius am Juni 05, 2020, 13:29:29
Das funktioniert leider auch nicht. Aber ich möchte euch nicht länger mit einem offensichtlichen Designfehler von mir behelligen. Deswegen: Topic Closed und Danke für eure Tipps!
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: Oberzicke am September 24, 2024, 23:24:58
Puuh wie schnell man alles vergisst. 20 Jahre Pause mit Access, das ist wie ein Neustart.

Und ich stand heute vor dem gleichen Problem und hab eine simple Lösung (wenn auch wohl nicht fein programmiert) gefunden.

Ein  Unterschied besteht zu meiner DB. Ich habe in allen Registerkarten ein ungebundenes Unterformular mit Namen  sfmDetails. Erst wenn ich eine Registerkarte auswähle bzw. aktiviere weiße ich die Datenherkunft, den Namen des Unterformulares zu (= Zeile 4 des Codes). Diese Zeile wird für obiges Beispiel nicht benötigt. Evtl. kann man das dann noch weiter verkürzen.

zunächst speicher ich den aktuellen Datensatz
und lege mir den zu suchenden Wert in eine Variable
Dann gehe ich mit GoToControl zur 2. Registerkarte, weiße die Datenherkunft zu und setze den Focus auf das Unterformular. So weit hat das oben ja auch geklappt.

Dann gehe ich mit Docmd.GoToControl zu dem Feld (ID) in dem sich die zu suchenden Daten befinden.
Mit FindRecord und Angabe der Variablen (bei mir vid) springt er sofort zum richtigen Datensatz.

In der Beschreibung zur GoToControl Methode bei Access bin ich fündig geworden. So einfach :)

Der Unterschied ist hier, dass es genügt nur den Feldnamen anzugeben und nicht den vollständigen Pfad, was genau mit den og. Fehlermeldungen immer fehlschlägt.


DoCmd.Save
vid = Forms!Hauptformular!sfmDetails!ID.Value
DoCmd.GoToControl ("NAME der 2. Registerkarte")
Forms!Hauptformular!sfmDetails.SourceObject = "Ufrm_Name"
Forms!Hauptformular!sfmDetails.SetFocus

DoCmd.GoToControl ("ID")
DoCmd.FindRecord (vid)

Gruß Zicke
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: Knobbi38 am September 25, 2024, 00:03:30
Hallo Zicke,

einen bereits geschlossenen uralten Thread zu kapern ist nicht die feine Art und bringt die Suchfunktion hier im Forum komplett durcheinander.

Mache bitte einen eigenen neuen Thread auf und wenn du dich auf diesen Thread beziehen möchtest, kannst du ja einen Link darauf hinzufügen.

Es wäre allerdings auch hilfreich, wenn du dann dort dein Problem genauer beschreiben würdest.
 
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: Mibra1984 am Oktober 16, 2024, 09:29:20
Hallo Zicke,

ich habe ein ähnliches Problem. Ist es möglich, dass du deine bessere Lösung einmal hochlädst? Gerne auch in einem neuen Thread oder wir schreiben über PN.

Gruß

Michael
Titel: Re: Wechseln des Registers inkl Variablenübergabe
Beitrag von: Knobbi38 am Oktober 16, 2024, 11:32:18
Hallo Michael,

wenn du ein Problem hast, öffne einen eigenen Thread und beschreibe dort dein Anliegen. Wenn du dann noch eine Beispiel hochladen kannst, erhöht das deine Chancen für eine Hilfestellung enorm.

Gruß
Ulrich