PDA

Vollständige Version anzeigen : richtige wirkliche Endlosschleife? geht das?


Storch
26.01.2008, 09:16
Hallo Ihrs,

lässt sich unter Access und VBA eine Endlosschleife realisieren, die während der Laufzeit eines Formulars ständig läuft und eine Eingabe oder Datensatzänderung überwacht? Entscheidend dabei ist, dass man während der Schleifenlaufzeit mit der DB wie gewohnt weiterarbeiten kann.

gpswanderer
26.01.2008, 09:36
Hallo,
das sollte mit dem Timer des Formulars möglich sein.

>Formular >Eigenschaften >Ereignisse >"Bei Zeitgeber"
Das Zeitgeberintervall (in millisekunden) bestimmt dabei die Häufigkeit. Wobei das glaube ich eine ziemliche Bremse ist.

Josef P.
26.01.2008, 09:45
Entscheidend dabei ist, dass man während der Schleifenlaufzeit mit der DB wie gewohnt weiterarbeiten kann.
Was soll innerhalb dieser Endlosschliefe passieren?
Wenn du bei Eingabe oder Datensatzänderung vor hast, das Forumlar per Requery zu aktualisieren, ist es vorbei mit dem "wie gewohnt weiterarbeiten".
(Ich gehe davon aus, dass du Fremd-Eingaben und -Änderungen überwachen willst und nicht die des aktuellen Users im Formular.)

ebs17
26.01.2008, 10:37
Was soll innerhalb dieser Endlosschliefe passieren?
Sehr sicher steht das mit diesem Thema in Zusammenhang:
UFo's und Registerkarten (http://www.ms-office-forum.net/forum/showthread.php?t=225167)

@Uwe: Langsam wird es Zeit für eine Bsp.-DB. Zumal halte ich es für möglich, dass eine derartige Verschachtelung von Formularen (4 Endlosformulare) vermeidbar wäre.

Josef P.
26.01.2008, 10:50
Eigentlich wollte ich in #3 nur zum Nachdenken anregen, dass ein Form.Requery nicht unbemerkt ablaufen kann.

@Eberard: Danke für den Hinweis auf den anderen Thread, der ist mir aber etwas zu stark auf einen speziellen Fall bezogen und dadurch für mein Gespühr etwas zu komplex, um eine Gesamtlösung zu finden. Lieber wären mir klar strukturierte Teilebreiche. Dann lässt sich meist mittels der Zusammenführung von Teillösungen eine Gesamtlösung finden. Daher:
@Uwe: vielleicht kannst du es das Vorhaben etwas abstrakter und dafür kürzer schildern. (z.B.: "Die angezeigten Daten in den Unterformularen sollen laufend akualisiert werden, wenn von anderere Stelle Daten geändert wurden.")

Der "Kunst" der Programmierung besteht in der Abstraktion. ;)

Storch
26.01.2008, 11:31
Hallo zusammen,
Sehr sicher steht das mit diesem Thema in Zusammenhang:
UFo's und Registerkarten (http://www.ms-office-forum.net/forum/showthread.php?t=225167)

@Uwe: Langsam wird es Zeit für eine Bsp.-DB. Zumal halte ich es für möglich, dass eine derartige Verschachtelung von Formularen (4 Endlosformulare) vermeidbar wäre.

Ja Eberhard, Du hast recht mir dem Verweis auf den anderen Threed. Bsp.DB folgt dort noch, im Moment steht da aber eh nur Kuddelmuddel drinne(in meiner DB). Das wollt ich nicht anbieten. Ich stell dort nachher mal die Aufgabenstellung rein um eine Vorstellung zu vermitteln. Ansonsten würd ich hier erst gerne diese Code-Geschichte lösen,dann wär mein Problem vllt. gelöst.


Mit der Endlosschleife möchte ich überwachen, wenn der aktive DS im 1.UFo wechselt. Wenn das der Fall ist, soll ein Filter auf das 2.UFo angewendet werden.
Aufgerufen wird die Aktion aus 1. UFo. Synchronisiert werden soll 2.UFo.
Achtung: 1. + 2. UFo befinden sich auf der ersten von 2 Registerkarten in einem HFo. DAs HFo enthält sonst keine Elemente. Insgesamt sollen 4 UFo's kaskadiert werden, möglichst als Endlosforms.

Ich habe die Idee aufgegriffen, das Ereignis BEI ZEITGEBER zu verwenden. Zum Testen rufe ich den untenstehenden Code aber im MOment mit einer Schaltfläche auf.

Private Sub Befehl29_Click()

Dim DB As DAO.Database
Dim rs As DAO.Recordset

Set DB = CurrentDb()
'Set rst = DB.OpenRecordset("tbl_Produktion1_Produkte")
'Set rs = Forms!frm_Produktion!frm_Produktion1.Form.RecordsetClone
'Set rst = DB.OpenRecordset("tbl_Produktion1_Produkte")



MsgBox (" varTest und PI ===" & varTest & " / " & rst!PI)

If varTest <> rst!PI Then
MsgBox "ungleich"
varTest = rst!PI

'Filter auf 2. UFo anwenden und Default-Wert setzen
Forms!frm_Produktion!frm_Produktion2.Form.Filter = "PI =" & _
Forms!frm_Produktion!frm_Produktion1.Form!PI
Forms!frm_Produktion!frm_Produktion2.Form.FilterOn = True
Forms!frm_Produktion!frm_Produktion2.Form!PI.DefaultValue = Me!PI

End If
End Sub

Die Variable varTest wird Global deklariert Und bei Form_Load wird ihr ein Wert zugewiesen.

Option Compare Database
Public varTest As Variant

In varTest soll ab dem 1. Durchlauf der jeweils letzte Wert von PI = Primärschlüssel (ne Lösung mit der DS-Nummer wäre mir lieber) gespeichert werden und bei jedem neuen Aufruf mit PI verglichen werden. Wenn ungleich, dann hat der aktuelle DS gewechselt und der Filter wird ausgeführt, somit synchronisiert sich das 2.UFo. Soweit meine Vorstellungen.

Offensichtlich hapert es an meinen noch unzulänglichen Kennnissen im Umgang mit Objekten.

Josef P.
26.01.2008, 12:20
Mit der Endlosschleife möchte ich überwachen, wenn der aktive DS im 1.UFo wechselt. Wenn das der Fall ist, soll ein Filter auf das 2.UFo angewendet werden.
Dazu ist keine Endlosschleife / Timer notwendig. Du kannst stattdessen auf das Current-Ereignis des 1. UFo reagieren.
Es sollte sogar ohne Ereignis funktionieren, wenn du die Verknüpfung des 2. UFo entsprechend einstellst.

Storch
26.01.2008, 12:44
Dazu ist keine Endlosschleife / Timer notwendig. Du kannst stattdessen auf das Current-Ereignis des 1. UFo reagieren.
Es sollte sogar ohne Ereignis funktionieren, wenn du die Verknüpfung des 2. UFo entsprechend einstellst.

Hallo Joseph, wenn Du dann auf das folgende Problem eine Lösung weisst, dann würde ich sie auch verwenden, denn so habe ich es als erstes versucht zu lösen, aber es entstand unten stehendes Problem.

Private Sub Form_Current()

If IsNull(Me!PI) Then
MsgBox ("Sie müssen ein Produkt definieren!")
Me!Produktname.SetFocus
Exit Sub
Else
Forms!frm_Produktion!Titel = "Null"

Forms!frm_Produktion!Titel = _
Forms!frm_Produktion!frm_Produktion1!Produktname _
& " / " & Forms!frm_Produktion!frm_Produktion1!Namenszusatz

Forms!frm_Produktion!frm_Produktion2.Form.Filter = "PI =" & Me!PI
'& Forms!frm_Produktion!frm_Produktion1_Produkte!PI ==== geht auch nicht
Forms!frm_Produktion!frm_Produktion2.Form.FilterOn = True
Forms!frm_Produktion!frm_Produktion2!PI.DefaultValue = Me!PI
'Forms!frm_Produktion!frm_Produktion1_Produkte!PI ==== geht auch nicht
End If

End SubDer Degugger markiert die rote Zeile und gibt mir aus:

Laufzeitfehler 2455....Sie haben einen Ausdruck eingegeben, der einen ungültigen Verweis auf die Form/Report Eigenschaft enthält.

Dieser Fehler entsteht aber nur, wenn ich das Form erstmals öffne. Wenn ich den Debugger zurücksetze und das Ereigniss Anzeigen durch DS-wechsel einmal auslöse, dann funktioniert alles. Sowohl der Filter als auch das Festlegen des Defaultwertes.

Noch zum Verständnis: Es handelt sich um 2 UFos auf einer Registerkarte, die gegenüber dem HFo eigentlich gleichrangig sind aber unter sich durch den Code ab der roten Zeile hierarchisch verknüpft werden.

ZUm einen werden die Daten im 2. UFo nach dem Feld PI (Primär) im 1. UFo gefilter. zum anderen wird der default-wert vom PI (Fremdschlüssel) im 2. UFo auf den Wert vom aktuellen PI im 1. UFo gesetzt, so das auch Daten korrekt eingegeben werden können.

Wo könnte das Problem liegen, das beim öffen des Forms entsteht???

Josef P.
26.01.2008, 12:55
wenn Du dann auf das folgende Problem eine Lösung weisst, dann würde ich sie auch verwenden
ähm ... eine Lösung zeigte ich in meinem Beispiel. Hier kann nämlich das Problem gar nicht auftreten.

denn so habe ich es als erstes versucht zu lösen, aber es entstand unten stehendes Problem.
Mein Beispiel hast du dir angesehen?

Laufzeitfehler 2455....Sie haben einen Ausdruck eingegeben, der einen ungültigen Verweis auf die Form/Report Eigenschaft enthält.
Ich würde daraus vermuten, dass das Ansprechen eines UF-Steuerelements nicht klappte.
Eine mögliche Fehlerquelle wäre:
Das UF-Steuerelement heißt nicht "frm_Produktion2".

aber:
Wo könnte das Problem liegen, das beim öffen des Forms entsteht???
=> ein anderer Grund wäre: frm_Produktion2 ist zu diesem Zeitpunkt noch nicht geladen.
Verfolge einmal den Ladevorgang der Formulare. Reagiere z.B. in jedem Form (HF + UFs) auf die Ereignisse Open, Load und Current und blende eine Msgbox mit dem Namen des Forms ein.

BTW: ich halte nicht viel davon, im Event des einen UF das andere UF zu filtern. Ganz besonders wie bei dir über den Umweg des HF. ... Was machst du, wenn du das HF wieder in ein eines HF als UF einbinden willst oder das eine UF in einem anderen HF ohne dem 2. UF verwenden willst? Dann ist nämlich der Code um UF-Event-Handler unbrauchbar.

Storch
26.01.2008, 13:22
Mein Beispiel hast du dir angesehen?
Sorry, eben erst, hatte es vorhin glatt übersehen. NUn hab ich es angesehen aber verstanden erhlich gesagt noch nicht. Aber mit wenig Schreibaufwand gelöst.

Eine mögliche Fehlerquelle wäre:
Das UF-Steuerelement heißt nicht "frm_Produktion2".
denke ich eher nicht. Ich glaube ich habe erst auf diesem Fehler hin die Formular-Steuerelemente unbenannt, nachdem ich gelesen habe, das es nciht günstig ist wenn Steuerelement und Formular den gleichen Namen tragen.

=> ein anderer Grund wäre: frm_Produktion2 ist zu diesem Zeitpunkt noch nicht geladen.
das vermute ich auch. ich werde es mal testen und auch die Umbenennung nochmal rückgängig machen.

BTW: ich halte nicht viel davon, im Event des einen UF das andere UF zu filtern. Ganz besonders wie bei dir über den Umweg des HF. ...
Ich wusste es nicht besser. Während Du vermutlich schon dein Access-Abitur hinter Dir hast , wiederhole ich grad die 1. KLasse.

Storch
26.01.2008, 13:35
Private Sub Form_Current()
' ... notwendig damit Ereignisauslösung aktiviert wird.
End Sub

Private Sub SubFormA_Current()
Me!sfrB.Form.SetData SubFormA!idA
End Sub

Wie hängen diese Codes miteinander zusammen?

Josef P.
26.01.2008, 13:37
NUn hab ich es angesehen aber verstanden erhlich gesagt noch nicht.
Was ist noch unklar?

ich werde es mal testen und auch die Umbenennung nochmal rückgängig machen.
Du musst nichts rückgängig machen, wenn es stimmt. ;)
Es stimmt dann, wenn du den Namen des UF-Steuerelementes verwendest.




Ich wusste es nicht besser.
Bitte Kommentare von mir zu Code nie als persönlichen Vorwurf betrachten.
Ich versuche zumindest, einigermaßen sachliche Stellungnahmen zu formulieren. Wie oft mir das gelingt, kann ich aber nicht beurteilen. ;)

borisrisker
26.01.2008, 13:47
Hallo zusammen,

wenn man "wie gewohnt" weiterarbeiten will, dann muß man auf jeden Fall in der Schleife oder dem Code des TimerIntervall-Ereignisses den Befehl 'DoEvents' einbauen ... sonst steht die Kiste ...

DoEvents sorgt dafür, daß die Events wie Masuklicks und Tastatureingaben verarbeitet werden ...

Zumindest war es bis Acc2003 so ...

Storch
26.01.2008, 13:50
Was ist noch unklar?

Guckst Du nochmal #11 ?????

Es stimmt dann, wenn du den Namen des UF-Steuerelementes verwendest.

Genau den verwende ich

Bitte Kommentare von mir zu Code nie als persönlichen Vorwurf betrachten.

Habe ich auch nicht so aufgefasst.

Storch
26.01.2008, 13:52
Hallo zusammen,

wenn man "wie gewohnt" weiterarbeiten will, dann muß man auf jeden Fall in der Schleife oder dem Code des TimerIntervall-Ereignisses den Befehl 'DoEvents' einbauen ... sonst steht die Kiste ...

DoEvents sorgt dafür, daß die Events wie Masuklicks und Tastatureingaben verarbeitet werden ...

Zumindest war es bis Acc2003 so ...

Dann wirds auch bei Ac07 so sein. Aber bei Verwenden von Zeitgeber kann man denke ich gut auf die Schleife an sich verzichten.

Josef P.
26.01.2008, 14:13
zu #11)

Private Sub Form_Current()
' ... notwendig damit Ereignisauslösung aktiviert wird.
End Sub
aktiviert "im Hintergrund", dass vom Form das Ereignis ausgelöst wird.
Aber bitte nicht verwechseln: Sub Form_Current() ist nicht das Ereignis, sondern ein Sub die auf das Ereignis "Current" der Objektreferenz "Form" reagiert.

Private Sub SubFormA_Current()
Me!sfrB.Form.SetData SubFormA!idA
End Sub
SubFormA_Current() macht nichts anderes als "Form_Current()" nur, dass diesmal die Objektreferenz "SubFormA" heißt.
Es wird damit auf das Ereignis Current des Formularobjektes, das hinter SubFormA steckt reagiert.
Im Prozedur-Code wird dann die Datenherkunft von frmB eingestellt. (SetData ist eine Methode aus frmB, die ich dafür erstellte.)

Storch
27.01.2008, 11:39
Hallo Joseph,
so wie ich das verstehe kann man also ein Ereignis auch ohne die Eigenschaften des Steuerelementes ansprechen.

SubFormA_Current löst also das Currentereignis von SubFormA aus???

Unabhängig davon funzt das bei mir nicht. Beim Öffnen des HFo aktualisiert sich UFo 2 aber nciht wenn ich einen DS wechsel. Dann werden keine Daten mehr angezeigt, und der Defaultwert bleibt bei 1. Obwohl die Variable die richtigen Werte enthält. Hab mir MSgBoxen eingebaut.

Ich lad die DB mal hoch. Vllt. Kannst Du da mal reinschauen???? Ich hoffe ich hab das richtig gemacht mit dem *.zippen. Is mein erstes Mal.

Josef P.
27.01.2008, 12:38
Ich vermute einmal, dass es bei dir dann nicht funktioniert, wenn du nur die Anzeige des 1. UF änderst. (Nur per Mausrad oder Bildlaufleiste)
Das Ereignis Current (Beim Anzeigen) tritt erst ein, wenn der Datensatz zum aktiven Datensatz wird. (Datensatz hat Fokus)

@Mitleser ohne Ac2007: das Formular ist ein Endlosformular. Man sieht aber aufgrund der Größe des UF-Steuerelements immer nur einen Datensatz.

SubFormA_Current löst also das Currentereignis von SubFormA aus???
Nein, SubFormA_Current reagiert auf das Ereignis. Ausgelöst wird es vom Formular selbst. (Das Auslösen von Ereignissen ist nur bei selbst erstellen Ereignissen möglich.)

Storch
27.01.2008, 13:18
Ich vermute einmal, dass es bei dir dann nicht funktioniert, wenn du nur die Anzeige des 1. UF änderst. (Nur per Mausrad oder Bildlaufleiste)
Das Ereignis Current (Beim Anzeigen) tritt erst ein, wenn der Datensatz zum aktiven Datensatz wird. (Datensatz hat Fokus)

Das lässt mich vermuten das Du die DB nicht eingesehen hast? Wenn es mal so simpel wäre. Ich weiss sehr wohl das der DS zum aktuellen DS werden muss u das das nicht mit scrollen erledigt ist. Ausserdem hab ich zur Kontrolle überall MsgBoxen gesetzt. Siehe Code:

Public Sub SetData(ByVal lAid As Long)

MsgBox ("SetData im Ufo 2")
' sub ist für Variante 2
'nur als Beispiel!
MsgBox ("PI vor Recordsource === " & lAid)
Me.RecordSource = "SELECT * from tbl_Produktion2_Rohstoffe where PI = " & lAid

MsgBox ("PI vor Default === " & lAid)
'wichtig, damit anfügen neuer DS funktioniert:
Me!PI.DefaultValue = lAid

End Sub

Die Sub wird korrekt aufgerufen, mit der korrekten jeweils aktiven PI. Aus meiner Sicht liegt es an den Codezeilen Me.Recordsouce und Me!PI.DefaultValue. NUr kann ich es nicht verstehen, denn in Deinem Beispiel funzt das ja. Und beim Öffnen des HFo geht es ja auch.

Josef P.
27.01.2008, 13:26
Das lässt mich vermuten das Du die DB nicht eingesehen hast? Wenn es mal so simpel wäre. Ich weiss sehr wohl das der DS zum aktuellen DS werden muss u das das nicht mit scrollen erledigt ist.
hm, dann verstehe ich das Problem nicht. Denn wenn ich in deiner DB genau das mache (also den angezeigten DS zum aktuellen DS mache, indem ich mit der Maus in ein Textfeld klicke), dann wird das 2. UFo aktualisiert.

Storch
27.01.2008, 13:40
Is es im Bereich des möglichen, dass ich nen Verweis auf DAO setzen muss??? Wenn dem so ist, dann hab ich schon wieder ein Problem. Jedes mal wenn ich DAO-Verweis setzen will bekomme ich ne Meldung das der NAME IM KONFLIKT MIT MODUL;PROJEKT ODER OBJEKTBIBLIOTHEK steht.

Storch
27.01.2008, 13:55
nu hab ich DAO drinn und geht trotzdem nicht

Josef P.
27.01.2008, 14:34
Ich kann dir nicht mehr weiterhelfen, da deine Beispiel-accdb bei mir läuft und ich mir nicht vorstellen kann, warum es bei dir nicht funktioniert.
(Da der Code beim Öffnen des HFo läuft, kann es auch nicht an einer Code-Unterdrückung durch irgendwelche Sicherheitseinstellungen liegen)

zum DAO-Verweis:
Es war ein DAO-Verweis gesetzt - der ACEDAO-Verweis. Dieser löst den Konflikt aus, wenn du zusätzlich auf DAO 3.6 verweisen willst.
In deinem Fall ist aber der ACEDAO-Verweis passend.

Storch
27.01.2008, 15:14
Hallo Joseph,

ich hab die DB nach Acces2000 konvertiert, dort funzt das auch nicht. Ich stell die Ac00-Datei nochmal rein. Vllt. magst ja nochmal gucken.

Steht denn dieser ACEDAO-Verweis genauso in der Auflistung? Ich hab da nämlich nix gesehen.

Josef P.
27.01.2008, 15:35
Vielleicht reden wir aneinander vorbei. Bei mir funktioniert "es" (möglicherweise teste ich etwas ganz anderes ;)) auch mit der Ac2000er-Version.
Blättere einmal ein 1. UF mit der Navigationsleiste. Funktioniert dann die Aktualisierung des 2. UF?

Der ACEDAO-Verweis nennt sich "Microsoft Office 12.0 Access database engine Object Library"


/edit: jetzt glaube ich zu verstehen, "was nicht funktioniert"
Die Ereignisse laufen, aber es werden nicht alle Daten angezeigt, oder?

Storch
27.01.2008, 15:51
Vllt. zur Sicherheit, das HFo in meiner DB ist frm_Produktion, aber das wirst Du sicher so gefunden haben. Wenn ich das öffne, erscheint auf Registerkarte links die Bratwurst mit Pommes, rechts mit PI=1 die rohstoffe. Wenn ich mit der DS-Navigation weiterklicke erscheinen rechts keine Daten mehr, sondern nur die 1 in PI (was der STandardwert) aber keine Daten.Ich mach ma Fotos von.

Josef P.
27.01.2008, 16:05
die Ursache: beim 2. UF sind Verknüpfungseigenschaften eingetragen. ("Verknüpfen von" und "Verknüpfen nach")

Und jetzt kommt die große Gemeinheit: Sobald du die Datenherkunft des Forms vom UF2 änderst, stellt Access diese 2 Eigenschaften wieder ein.

In deinem Fall wird das aber vermutlich kein Problem sein, da das HF ungebunden sein darf, oder?
Denn sobald das HFo ungebunden ist, gibt es auch diesen doofen Automatismus von Access nicht.

Ansonsten müsste diese Verknüpfungseigenschaften gelöscht werden:
Me!frm_Produktion2.LinkChildFields = ""
Me!frm_Produktion2.LinkMasterFields = ""

Storch
27.01.2008, 17:09
An den Verknüpfungen hat es nicht oder zumindest nicht alleine gelegen. Ich hab meinen Code nochmal mit Deinem verglichen und festgestellt, dass bei Dir der Primärschlüssel in tabA ne andere Bezeichnung hat als der Fremdschlüssel in tabB. Ich habe danach den Fremdschlüssel auf F_PI geändert und den Code angepasst und siehe da, nun geht es prima. Mir ist nur noch nicht so klar warum das so ist.

Achja wollte Codebeispiel zeigen:

Alt:
Me.RecordSource = "SELECT * from tbl_Produktion2_Rohstoffe where PI = " & lAid
Neu:
Me.RecordSource = "SELECT * from tbl_Produktion2_Rohstoffe where F_PI = " & lAid

dabei enthält lAid ja den Primärschlüsselwert aus Tabelle A

Josef P.
27.01.2008, 17:20
Die Datenherkunft des Hauptformulars wurde mittlerweile auch entfernt?

Durch die Umbenennung hast vermutlich den Automatismus abgeschalten.
Beachte: das Löschen der Einstellungen in der Entwurfsansicht alleine hilft nicht. Access stellt diese Eigenschaften - wie ich bereits in #27 andeutete - im Hintergrund wieder her, wenn im UF die Datenherkunft geändert wird.
Dazu müssen diese Bedingungen erfüllt sein:
- HF ist gebunden
- HF und UF besitzen ein Feld mit gleichem Namen.

Storch
27.01.2008, 17:32
Ja ich habe in der Tat mal an der Datenherkunft gefummelt, aber schon bevor ich diesen Code probiert habe. Nun bin ich schlauer. Ob ich den Code zum löschen der Verknüpfungen trotzdem einbaue?

AUch noch ne Frage zu diesem Code:

Public Sub SetData(ByVal lAid As Long)
' sub ist für Variante 2
'nur als Beispiel!
Me.RecordSource = "SELECT * from tbl_Produktion2_Rohstoffe where F_PI = " & lAid

'wichtig, damit anfügen neuer DS funktioniert:
Me!PI.DefaultValue = lAid
End Sub

Mir ist nicht klar auf welches Form sich Me hier bezieht. Ich würde ja meinen es bezieht sich auf 2.UFo, in dem die selektierten Daten angezeigt werden. Aber wenn dem so ist, wieso kann ich dann nicht .... Me!F_PI.DefaultValue = lAid ...... schreiben. Dann mault er nämlich und erzählt mir was von METHODE. Ich hatte doch in tbl_Produktion2 den Fremdschlüssel von PI auf F_PI geändert. Beim Defaultwert setzen hab ich den Eindruck, Me bezieht sich auf das 1.UFo.

Wann werd ich das alles mal begriffen haben. Is mir schon fast peinlich ständig zu nerven.

Josef P.
27.01.2008, 17:52
Mir ist nicht klar auf welches Form sich Me hier bezieht. I
"Me" bezieht sich immer auf das Formular, Bericht oder Klasse, des Codes mit "Me".

wieso kann ich dann nicht .... Me!F_PI.DefaultValue = lAid ...... schreiben. Dann mault er nämlich und erzählt mir was von METHODE.
"F_PI" muss der Steuerelementname sein. Ich vermute, den hast du nicht geändert, sondern nur den Namen des Datenfeldes in der Eigenschaft "Steuerelementinhalt"
Die Bezeichnung des Steuerelements und des Datenfeldes müssen nicht gleich sein. Ich benenne sie bewusst anders, da ich damit beide ansprechen kann.
z.B.: me!FI_PI für das Datenfeld und Me!txtFI_PI für das Textfeldsteuerelement.

Storch
27.01.2008, 18:13
"Me" bezieht sich immer auf das Formular, Bericht oder Klasse, des Codes mit "Me".

Also in dem Fall steht der Code im Form_frmB (deine DB) also steht Me quasi stellvertretend für dieses Formular. Dann wusste ich es ja doch richtig...
zumal.....

mir noch aufgefallen ist, das Du, wie Du nun schon selbst beschrieben hast, in dem Code ja den Steuerelementnamen und nicht den Inhalt ansprichst. Das erklärt dann alles.

Ich bedanke mich erstmal für Deine Mühen, schön das man hier solch intensive Hilfe findet. Hoffe das ich mal einen Tag ohne Fragen auskomme. Ich werd jetzt sehen das ich die übrigen 2 UFo auch noch auf diese Weise synchronisiert bekomme. Die DB stell ich dann noch mal in meinen anderen Threed ein UFo's und Registerkarten.

Eine Frage habich doch noch, wie kann ich hier in einem Threed auf einen anderen Threed linken?

Anne Berg
27.01.2008, 21:10
... indem du den Link auf das Thema oder einen einzelnen Beitrag kopierst und einfügst. :rolleyes:

Mit rechter Maustaste auf einen Link kannst du diesen mittels Kontextmenü kopieren, einfügen wie gewohnt mit Strg+V.

Weitere Hinweise und Beispiele findest du in der Hilfe des Forums.
Ist meiner Ansicht nach nicht ganz leicht zu finden:
Hilfe - Codes für die Textgestaltung - ...mehr Informationen über den vB Code - Verweis auf einen Beitrag

Storch
03.02.2008, 14:30
Hallo,

ich hab die DB jetzt in meinen anderen Threed reingestellt. Ein Problem hab ich da noch.

http://www.ms-office-forum.de/forum/showthread.php?t=225167