Frage zu Donkarl 6.3 : "Punkt und Rufzeichen"

23/04/2009 - 13:58 von Klaus-Dieter Gundermann | Report spam
Hallo NG,

in Donkarls FAQ 6.3 steht:
Eine Grundregel ist: Vor Objekten ein "!", vor Auflistungen und Eigenschaften
ein "."

und die MSDN sagt
' Implicitly refer to NewData control in Controls collection.
Me!NewData
' Explicitly refer to the NewData control in the
' Controls collection.
Me.Controls!NewData
Me.Controls("NewData")

d.h. ich verstehe das so da Me! eine Abkürzung for Me.Controls! ist.

Jetzt habe ich mal das kleine folgende Experiment gemacht:
ich habe eine Tabelle mit drei Textfeldern: Feld1, Feld2, Feld3 angelegt
und die folgenden Werte eingetragen : Daten 1, Daten 2, Daten 3

Dann ein an Tabelle1 gebundenes Formular mit ZWEI Controls
Control1 : Textfeld "Feld1" gebunden an "Feld1"
Control2 : Textfeld "Feld2" UNgebunden

und folgenden Code ausgeführt:

Debug.Print "Feld1:", Me.Feld1 ' ergibt "Daten 1" OK
Debug.Print "Feld1:", Me!Feld1 ' ergibt "Daten 1" OK

Debug.Print "Feld2:", Me.Feld2 ' ergibt "Null" OK
Debug.Print "Feld2:", Me!Feld2 ' ergibt "Null" OK

Debug.Print "Feld3:", Me.Feld3 ' ergibt "Daten 3"
Debug.Print "Feld3:", Me!Feld3 ' ergibt "Daten 3"
Debug.Print "Feld3:", Me.Controls!Feld3 ' ergibt "Daten 3" ????
Debug.Print "Feld3:", Me.Controls("Feld3") ' ergibt "Daten 3" ????
Debug.Print "Feld3:", Me.Recordset!Feld3 ' ergibt "Daten 3" OK
Debug.Print "Feld3:", Me.Recordset.Fields("Feld3") ' ergibt "Daten 3" OK

'Debug.Print "Feld4:", Me.Feld4 <- erzeugt Compiletime Fehler
Debug.Print "Feld4:", Me!Feld4 <- erzeugt Runtime Fehler

Was ich nicht verstehe:
- Wieso funktioniert der Zugrff auf Me.Controls!Feld3 ??
Es gibt KEIN Control mit dem Namen "Feld3"

- Wieso sollte man Me!Feld4 verwenden ?
Viel besser gefàllt mir doch, das man bei der Schreibweise
Me.Feld4 schon wàhrend der Compiletime feststellen kann, ob
das Feld in der Recordsource ist.

Donkarl sagt: "Hin und wieder treten mit dieser Schreibweise aber
überraschende und bisher unerklàrliche Fehler auf"

Was sind das für Fehler ??

Sorry ist nen bisschen lànger geworden, aber ich freu mich auf Eure Antworten.

Klaus
 

Lesen sie die antworten

#1 Mark Doerbandt
23/04/2009 - 15:36 | Warnen spam
Hallo, Klaus-Dieter,

Klaus-Dieter Gundermann:

ich habe eine Tabelle mit drei Textfeldern: Feld1, Feld2, Feld3 angelegt
und die folgenden Werte eingetragen : Daten 1, Daten 2, Daten 3

Dann ein an Tabelle1 gebundenes Formular mit ZWEI Controls
Control1 : Textfeld "Feld1" gebunden an "Feld1"
Control2 : Textfeld "Feld2" UNgebunden

Debug.Print "Feld3:", Me.Controls("Feld3") ' ergibt "Daten 3" ????
Debug.Print "Feld3:", Me.Recordset!Feld3 ' ergibt "Daten 3" OK

- Wieso funktioniert der Zugrff auf Me.Controls!Feld3 ??
Es gibt KEIN Control mit dem Namen "Feld3"



interessant, offenbar ist Access intelligenter als wir denken und
sucht, wenn es kein Control gibt, ersatzweise in der Fields-Collection
der Datenquelle.

- Wieso sollte man Me!Feld4 verwenden ?
Viel besser gefàllt mir doch, das man bei der Schreibweise
Me.Feld4 schon wàhrend der Compiletime feststellen kann, ob
das Feld in der Recordsource ist.



! benutzt Du auch fuer den Zugriff auf die Recordsource, denn das ist
ein selbst vergebener Name. Der Kompiler weiss uebrigens genau
/nicht/, ob das Feld darin enthalten ist - das wird erst zur Laufzeit
festgestellt.

Gruss - Mark

Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beitràge senden.

Ähnliche fragen