collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 50
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13702
  • stats Beiträge insgesamt: 62196
  • stats Themen insgesamt: 8474
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: mit openform die ID übergeben  (Gelesen 134 mal)

Offline Carl

  • Access-User
  • *
  • Beiträge: 68
mit openform die ID übergeben
« am: Oktober 06, 2017, 08:33:25 »
Ich versuche gerade, von Makros auf VBA umzusteigen. Da habe ich ein Problem, mit openform ID's zu übergeben. Normalerweise gibt man im Makro an ="[ID]=" & [ID], wenn das Popup die ID des aktiven DS übernehmen soll.

In VBA finde ich keine Beschreibung, wie man das da macht. Also beispielsweise geht nicht:

Public Function OpenPopUpMYFORM(ctl As Control)
    DoCmd.OpenForm "MYFORM", , ,="[ID]=" & [ID] , , acDialog, ctl.Value
End Function

Was muss man da schreiben?
Carl
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 728
Re: mit openform die ID übergeben
« Antwort #1 am: Oktober 06, 2017, 09:24:34 »
Wenn die Methode im Formular-Modul beherbergt und sichergestellt ist, dass im Feld bzw. Steuerelement ID kein Null-Wert vorliegt:

DoCmd.OpenForm "MYFORM", , ,"ID=" & Me.ID , , acDialog, ctl.Value
Grüße von der (⌒▽⌒)
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1493
Re: mit openform die ID übergeben
« Antwort #2 am: Oktober 06, 2017, 13:13:17 »
Hallo Carl,
Falls ctl = Me.ID ist geht auch
DoCmd.OpenForm "MYFORM", , ,"ID=" & ctl.Value , , acDialogund die Übergabe der ID per OpenArgs ist dann überflüssig.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Carl

  • Access-User
  • *
  • Beiträge: 68
Re: mit openform die ID übergeben
« Antwort #3 am: Oktober 06, 2017, 14:46:28 »
Hallo ihr zwei, Danke für die Antwort.

bei  , , , "ID=" & Me.ID, , acDialog, ctl.Value


gibt er einmal unzulässig Me.ID zurück, ein andermal merkt er an, er würde das Modul nicht finden. Ohne den Übergabeversuch der ID funktioniert das Modul allerdings.

Ebenfalls nicht funktionieren
"ID=" & [Me.ID]
"ID=" & "Me.ID"
"ID=" & 'Me.ID'



----
DoCmd.OpenForm "MYFORM", , ,"ID=" & ctl.Value , , acDialog
hier  kommt Laufzeilenfehler 2501
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1493
Re: mit openform die ID übergeben
« Antwort #4 am: Oktober 06, 2017, 15:19:20 »
Hallo Carl,
Vielleicht helfen benannte Parameter, diese Kommazählerei ist doch ätzend.
DoCmd.OpenForm _
            FormName:="MYFORM", _
            WhereCondition:="ID = " & Me.ID, _  'oder evtl. & ctl.Value
            WindowMode:=acDialog, _
            OpenArgs:=ctl.Value
Ob du OpenArgs benötigst weisst nur du.
Zitat
gibt er einmal unzulässig Me.ID zurück
Verstehe ich nicht.
Zitat
funktioniert das Modul allerdings.
Welches? In dem deine Function steht?
Zitat
kommt Laufzeilenfehler 2501
Und der sagt was?

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Carl

  • Access-User
  • *
  • Beiträge: 68
Re: mit openform die ID übergeben
« Antwort #5 am: Oktober 06, 2017, 16:13:03 »
Er sagt Me.ID ist ein unzulässiges Schlüsselwort in der Kombination

DoCmd.OpenForm "MYFORM", , , "ID = " & Me.ID, , acDialog, ctl.Value

Vielleicht ist irgendwo ein Komma zuviel?
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 6754
Re: mit openform die ID übergeben
« Antwort #6 am: Oktober 06, 2017, 16:52:40 »
Hallo,
wenn Du in einem allgemeinen Modul bist, funktioniert Me nicht. Es muss der komplette Bezug übergeben werden.
Und wenn es allgemein sein soll, dann muss der Formularbezug auch in den Parametern deklariert und übergeben werden.
Dass es nur im Formularmodul funktioniert hat Lauchtaube in #1 schon erwähnt.

Erkläre doch mal das Vorhaben genauer.
Gruß
Klaus
 

Offline Carl

  • Access-User
  • *
  • Beiträge: 68
Re: mit openform die ID übergeben
« Antwort #7 am: Oktober 06, 2017, 19:17:02 »
Hallo MzKlMu,

ja das kann sein, dass es mit dem Modul zusammen hängt.

Also ich versuche, Eurem Rat zu folgen und die Makros in meiner Datenbank durch VBA zu ersetzen. Die Übergabe von [ID] funktioniert im Makro völlig problemlos. Was muss ich jetzt in einem Modul1 mit welchem Komma schreiben, um die ID zu übergeben. Ich verstehe auch nicht, wieso das so kompliziert ist, wo diese Funktion doch ziemlich oft gebraucht wird.

Weißt Du, ich glaube mein Problem (auch mit der Normalisierung) ist, dass ich anders DENKE. Meine DENKWEISE weicht ab. Als 50jähriger Psychiater habe ich seit 30 Jahren nie jemanden kennen gelernt, der logisch stringent gedacht hätte. Vielleicht weil bei seelischen Erkrankungen die Logik keine so große Rolle spielt. Wie auch immer, ich sehe, dass man am besten lernt, wenn man es gezeigt bekommt. Auch Kinder lernen am Besten, wenn sie etwas gezeigt bekommen. Hingegen ist eine Erklärung nicht so erfolgreich. Ganz zu schweigen von der Aufforderungen, etwas so oder so zu machen, was eigentlich garnicht umsetzbar ist.
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 6754
Re: mit openform die ID übergeben
« Antwort #8 am: Oktober 06, 2017, 19:39:49 »
Hallo,
warum hast Du den Code überhaupt in einem allgemeinen Modul und nicht direkt im Formularmodul ?

Zitat
Ich verstehe auch nicht, wieso das so kompliziert ist
Das ist nicht kompliziert, das scheint nur so, weil man es nicht kennt.
Gruß
Klaus
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 728
Re: mit openform die ID übergeben
« Antwort #9 am: Oktober 07, 2017, 07:47:23 »
Wenn der Code in einem allgemeinen Modul hinterlegt ist, und das Steuerelement im dem selben Formular, das auch die ID enthält, ist, geht auch soetwas
   DoCmd.OpenForm "MYFORM", , ,"ID=" & ctl.Parent.ID , , acDialog, ctl.Valuebei Steuerelementen, die direkt auf dem Formular plaziert sind. Ausnahme wäre z. Bsp. ein Steuerelement auf einer Registerseite, welches dann die Registerseite als Parent besitzt; diese wiederum hat das Registersteuerelement als Parent Objekt).
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: Carl

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1493
Re: mit openform die ID übergeben
« Antwort #10 am: Oktober 07, 2017, 12:56:43 »
Hallo,
Zitat
wenn Du in einem allgemeinen Modul bist, funktioniert Me nicht.
Weshalb ich ja gleich den Parameter verwendet habe. Allerdings
unter der Voraussetzung, dass ctl = Me.ID ist beim Aufruf.
Dieses ist für mich bis jetzt ungeklärt (s.u. *)

@Carl
Zitat
Vielleicht ist irgendwo ein Komma zuviel?
Deshalb mein Vorschlag es mit benannten Patametern zu versuchen.
Dabei ist sogar die Reihenfolge egal.

@Lachtaube
Dies verstehe ich nicht
Zitat
... ,"ID=" & ctl.Parent.ID, ...bei Steuerelementen, die direkt auf dem Formular plaziert sind
Was wird denn da zurückgegeben? Direkt plaziert wird die Parent-
Eigenschaft doch vom Form besetzt. So ist das eine Referenz auf
sich selber.

EDIT: Sorry, nun doch verstanden. So kommst du an die ID über ein
anderes Control, - alles klar.

Zitat
Ausnahme wäre z. Bsp. ein Steuerelement auf einer Registerseite, welches dann die Registerseite als Parent besitzt; diese wiederum hat das Registersteuerelement als Parent Objekt).
Deine Aussage bezügl. Parent-Eigenschaft ist zwar richtig, aber alle
Controls auf Registern lassen sich immer direkt über das Formular
ansprechen
Forms("FormName").Controls("ElementAufRegister")Nach meiner Erfahrung ist das auch eine ausreichende Referenz, das
Control hat sein Parent ja immer dabei, falls es benötigt werden würde  ;)

* Ich vermute den Fehler bereits beim Aufruf aus dem Formular.
Call OpenPopUpMYFORM(Me.ID)Obwohl man dabei ja eigentlich nichts falsch machen kann.

Im Übrigen frage ich mich immer noch wozu die ID beim Öffnen zusätzlich
per OpenArgs übergeben wird. Wenn hier zwei Werte im Spiel sind
(ID und ?) sollte man besser , wie von Klaus erwähnt, eine Formular-
Referenz als Parameter verwenden.

gruss ekkehard
« Letzte Änderung: Oktober 07, 2017, 13:01:33 von Beaker s.a. »
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 
Folgende Mitglieder bedankten sich: Carl

Offline Carl

  • Access-User
  • *
  • Beiträge: 68
Re: mit openform die ID übergeben
« Antwort #11 am: Oktober 08, 2017, 11:38:13 »
Hallo,
warum hast Du den Code überhaupt in einem allgemeinen Modul und nicht direkt im Formularmodul ?

Weil ich im selben Popup openargs übergeben wollte, wie oben gelernt mit einem Modul. Und weil die Existenz der Kommas ja schon darauf hindeuten, dass für die Übergabe von Werten Lehrstellen vorgesehen sind.

Wenn der Code in einem allgemeinen Modul hinterlegt ist, und das Steuerelement im dem selben Formular, das auch die ID enthält, ist, geht auch soetwas
   DoCmd.OpenForm "MYFORM", , ,"ID=" & ctl.Parent.ID , , acDialog, ctl.Valuebei Steuerelementen, die direkt auf dem Formular plaziert sind. Ausnahme wäre z. Bsp. ein Steuerelement auf einer Registerseite, welches dann die Registerseite als Parent besitzt; diese wiederum hat das Registersteuerelement als Parent Objekt).

Das funktioniert!! Super. Danke @Lachtaube :-)))) Genau das hatte ich gesucht.