collapse

* Benutzer Info

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

* Wer ist Online

  • Punkt Gäste: 53
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 2
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13754
  • stats Beiträge insgesamt: 62828
  • stats Themen insgesamt: 8540
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Prozedure mit Variable im Namen aufrufen  (Gelesen 1190 mal)

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1550
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #15 am: Juni 15, 2017, 23:23:00 »
Ja, hast recht. Habe ich überlesen.
--
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 markus888

  • Access-Profi
  • **
  • Beiträge: 166
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #16 am: Juni 19, 2017, 08:08:38 »
Hallo Markus,
Getestet, - nein.
Aber du hast natürlich recht, so würde es wohl nur "[Ereignisprozedur]"
zurück geben.
Dann wird das Vorhaben wohl in der Form scheitern,

Bereits in der ersten Antwort steht schon, dass es dafür die CallByName Methode gibt.
Lesen könnte helfen

LG Markus
10 Jahre Access
 

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 379
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #17 am: Juni 19, 2017, 11:49:51 »
Hab etwas über die CallbyName Methode gelesen , aber noch nicht richtig verstanden.

Allgemein Methoden verstehe ich noch nicht, was genau die machen.

Wie würde ich damit denn das After_Update-Ereignis aufrufen?

Oder wie ist das gedacht?

Grüße
 

Offline markus888

  • Access-Profi
  • **
  • Beiträge: 166
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #18 am: Juni 19, 2017, 12:40:45 »
Was ist dir unklar?
Lies mal in der VBA Hilfe nach.
Mach einen Versuch und poste ihn.
Dann schauen wir weiter.

Falls ein Mitwirkendender es nicht aushalten sollten, dass ein User es zuerst selbst versucht, kann er natürlich einen fertigen Code posten.
LG Markus
10 Jahre Access
 
Folgende Mitglieder bedankten sich: Xoar

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 379
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #19 am: Juni 19, 2017, 13:01:09 »
Mach ich morgen, dann bin ich wieder an meinem Arbeitsrechner....

also eine Möglichkeit die ich mir vorstelle könnte ca. so lauten:
Dim VariableObjekt as objekt
Dim VariableProzedure as string
  VariableObjekt = "txtvon" & SteuerelementNr 'ergibt z.B. den Namen des Textfeldes txtvon1
  VariableProzedure = "von" & SteuerelementNr & "_afterUpdate" 'ergibt z.B. von1_afterUpdate

  CallByName VariableObjekt, VariableProzedure
wird dann so aufgerufen und sollte die AfterUpdate Prozedure aufrufen?



« Letzte Änderung: Juni 19, 2017, 14:12:04 von Xoar »
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23047
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #20 am: Juni 19, 2017, 14:25:48 »
Hallo,


dieses Getöns mit "CallByName"  würde ich nicht weiter verfolgen, derweil Du damit ja gar nicht  die eigentliche Prozedur anpasst.


Zeig mal ein Beispiel der Afterupdate-Prozedur, die von anderen Stellen aus aufgerufen werden soll.

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 379
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #21 am: Juni 19, 2017, 14:47:54 »
außer einer Fehlerbehandlung steht nur dies in dem AfterUpdate-Ereignis
public sub bis1_afterUpdate
Me!bis1Datum = ZeitwertZuDatumTragenBis(Me!von1, Me!bis1, Me!DatumID_F, Me!von1Datum)
end sub

me! bezieht sich auf Forms!frmDienstplan!ufrmDienstplan.form!

hatte ja schon angedacht dies jetzt direkt aufzurufen über den Recordset.
Die vonVariable wird mit übergeben sobald ich die Function aufrufe, deshalb müsste ich immer auf das richtige Feld zugreifen.

rs("Datum" & vonVariable) = ZeitwertZuDatumTragenBis(rs("von" & vonVariable) ,rs("bis" & vonVariable), rs!DatumID_F, rs("von" & vonVariable & "datum"))

Grüße
 

Offline daolix

  • Access-Profi
  • **
  • Beiträge: 344
  • Von nix nen Plan
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #22 am: Juni 19, 2017, 14:59:41 »
Mach ich morgen, dann bin ich wieder an meinem Arbeitsrechner....

also eine Möglichkeit die ich mir vorstelle könnte ca. so lauten:
Dim VariableObjekt as objekt
Dim VariableProzedure as string
  VariableObjekt = "txtvon" & SteuerelementNr 'ergibt z.B. den Namen des Textfeldes txtvon1
  VariableProzedure = "von" & SteuerelementNr & "_afterUpdate" 'ergibt z.B. von1_afterUpdate

  CallByName VariableObjekt, VariableProzedure
wird dann so aufgerufen und sollte die AfterUpdate Prozedure aufrufen?

nöö
VariableObjekt = Ist die Form/UForm welche die Public xyz_Afteupdate beinhaltet (Typ Object), also eher wie in deinem EP  Forms("frmdienstplan").Controls("ufrmDienstplan").Form
 
Folgende Mitglieder bedankten sich: Xoar

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 771
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #23 am: Juni 19, 2017, 15:08:18 »
Nöö, so auch nicht. In der OL-Hilfe steht die richtige Syntax.
Grüße von der (⌒▽⌒)
 

Offline daolix

  • Access-Profi
  • **
  • Beiträge: 344
  • Von nix nen Plan
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #24 am: Juni 19, 2017, 15:14:24 »
weil?
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23047
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #25 am: Juni 19, 2017, 15:21:06 »
Hallo,



ich versteh jetzt nicht mehr die anfängliche Aufgabenstellung...

Die Afterupdate-Prozedur eines "Bis"-Feldes ruft doch schon eine (globale?) Funktion (spezifische Berechnung für das "bis1Datum"-Feld) auf.  Was soll hierbei noch zusammengefasst werden? Und welches Ereignis  soll den (vermuteten) Berechnungsvorgang für alle Felder anstoßen?
Allenfalls könnten in der Form_BeforeUpdate-Ereignisprozedur die 5(?)   "bisXdatum"-Felder in einer For/Next-Schleife gesetzt werden  (nötiger Errorhandler nicht enthalten)

Sub Form_BeforeUpdate(Cancel as Integer)
Dim i as long
For i=1 to 5
  Me("bis" & i & "Datum") = ZeitwertZuDatumTragenBis(Me("von" & i), Me("bis" & i), Me!DatumID_F, Me("von" & i & "Datum")
Next
End Sub

Die eigentliche Krux an der Geschichte, so wie es sich für mich darstellt, ist die fehlende Normalisierung (Aufzählungsfelder gehören in eine separate Tabelle).

(Soweit ich mich erinnere, ist darauf schon einige Male hingewiesen worden.)



Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1550
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #26 am: Juni 19, 2017, 16:29:01 »
Hallo Xoar,
Zitat
steht nur dies in dem AfterUpdate-Ereignis
Vielleicht zeigst du uns auch mal, was in der Function
"ZeitwertZuDatumTragenBis" passiert, und von wo
überhaupt die Function "PositionenZeitenEintragen"
aufgerufen wird.
Auch ist, mir zumindest, nicht klar von wo aus das
AfterUpdate-Ereignis ausgelöst werden soll.
Falls das in "PositionenZeitenEintragen" passiert, würde
ich deren Parameter anders gestalten.
Zitat
Public Function PositionenZeitenEintragen(ByVal Datum As Date, _
ByVal MitarbeiterID As Integer, ByVal PositionID As Integer, ByRef welchesForm As Form)
Über "welchesForm" hast du dann auch Zugriff auf alle
Controls des Forms.

Zitat
Die eigentliche Krux an der Geschichte, so wie es sich für mich darstellt, ist die fehlende Normalisierung (Aufzählungsfelder gehören in eine separate Tabelle).
Daran habe ich noch gar nicht gedacht, bzw. ist mir gar
nicht aufgefallen, sonst hätte ich auch schon in diese Kerbe
geschlagen ;)

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.
 
Folgende Mitglieder bedankten sich: Xoar

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 771
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #27 am: Juni 19, 2017, 16:55:19 »
@Daolix,

weil das Argument für den CallType (in diesem Fall vbMethod) fehlt.

Ansonsten bin ich auch sehr verwirrt und vermute nebenbei noch ein suboptimales Tabellendesign. :(
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: Xoar

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 379
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #28 am: Juni 19, 2017, 17:33:24 »
Hallo,

das es diese von1 - von5 Felder gibt, muss man so hin nehmen, ist ein Kompromiss zwischen Darstellung und Aufwand und wird sich NIE, NIEMALS, NEVER EVER erhöhen.

In ZeitwertZuDatumTragenBis wird nur der korrekte Datumsteil dem Uhrzeitteil dazugeschrieben.
Da man als Eingabe im Textfeld nur die Uhrzeit 00:00 sieht und zur korrekten Berechnung auch den Datumsanteil braucht (Tagübergreifend), aber das soll nicht das Thema sein :D

@ ekkehard
ja genau so ist es, es passiert in der PositionszeitenEintragen Funktion.

Ich versuch mal zu erklären warum das so eigenartig erscheint, oder ist??

Ich habe ein Hauptformular wo ich von1(00:00), bis1(00:00) und Position1(Zahl) sichtbar habe. Im Hintergrund gibt es noch von1Datum, bis1Datum.
Gebe ich nun in von1 "09:00" ein, wird dem Feld "von1Datum" einfach das heutige Datum mit dem in von1 eingegebenen Zeitanteil zugewiesen und zwar durch das AfterUpdateEreignis von "von1".
Das ganze gibt es auch noch leicht erweitert für bis1 -> bis1Datum.

Jetzt gibt es halt noch die Option bis zu 5 Zeiteingaben diesem einen Datensatz hinzuzufügen, falls sich die Position mal nach x Stunden ändert. z.B. 09:00 - 10:00 = Position1, 10:00 - 15:00 = Position2....
Das dies nicht optimal ist weiß ich selbst, war aber der bestmöglich Kompromiss für mich.

Ich habe im Hauptformular ein Button, der mir ein kleines Zusatzformular anzeigt, wo ich für den ausgewählten DS diese 5 möglichen Eintragungen machen kann.

Da mir für die Positionsauswahl eine Combobox zu unübersichtlich war, habe ich mir ein Formular gebaut, wo alle Positionen nach Kategorien etc. sortiert in Endlosunterformularen angezeigt werden. Klicke ich jetzt auf eine Position (Textfeld) wird die Funktion "PositionsZeitenEintragen" aufgerufen.
Diese füllt die von1 - bis1 Felder mit einer vordefinierten Uhrzeit vor, trägt die passende PositionsID ein und sollte eigentlich diese von1_AfterUpdate Prozedure aufrufen, damit die von1Datum - bis1Datum Felder korrekt beschrieben werden. Aber genau das ging nicht mit Variablen in den Aufrufen. Deshalb werd ich es wohl mal wie in #8 gezeigt probieren, nur mit rs(.. anstatt rs!(...

Viel Text, schwierig zu verstehen. Wollte eigentlich nur etwas Zeit sparen, indem ich einfach dieses AfterUpdateEreignis aufrufe, aber das war wohl nichts ;)

Falls das doch irgendwie klappt, durch die Übergabe des Forms ist das toll.

So jetzt ist die Verwirrung komplett :D
« Letzte Änderung: Juni 19, 2017, 17:49:02 von Xoar »
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 771
Re: Prozedure mit Variable im Namen aufrufen
« Antwort #29 am: Juni 19, 2017, 19:18:08 »
Gibt es denn Regeln und/oder Zyklen, nach denen die Uhrzeiten (für einen Schicht- bzw. Arbeitsplan?) geschrieben werden?

PS: wenn Du ein Formular quasi zur Dateneingabe fernsteuerst, das datengebundene Steuerelemente enthält, so wirkt sich das negativ auf die Ausführungsgeschwindigkeit aus, weil ja jedesmal die Steuerelementinhalte aktualisiert werden müssen. Trägst Du hingegen die Daten direkt über ein Recordset oder eine Anfügeabfrage ein, so wird der Ablauf nicht durch Bildschirmaktualisierungen behindert.
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: Xoar