MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 11.01.2019, 13:03   #1
ThomasA320
Neuer Benutzer
Neuer Benutzer
Standard Acc2010 - Collection

Hallo,

in einem Modul habe ich eine Collection als public dimensioniert, wie sehr viele Variablen auch.

Danach wird die Collection gefüllt mit c.add "Wert","Schlüssel".... Funktion ok. Innerhalb des gleichen Moduls kann ich mit c.item("Schlüssel") den Wert auslesen.

Befinde ich mich aber in irgendeinem anderen Modul, Kann ich nichts auslesen. Fehlermeldung : Objektvariable nicht festgelegt.

Offensichtlich habe das noch nicht so richtig kapiert.

Gruß Thomas
ThomasA320 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.01.2019, 13:17   #2
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

in einem Modul

Ist das auch ein Standardmodul?

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}:{12} <= geklammerte Zahlen sind Einzelthemen
Dein Dankeschön: DBWiki => Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.01.2019, 13:22   #3
markusxy
MOF Meister
MOF Meister
Standard

Zwei mögliche Fehler:
Durch einen unbehandelten Fehler, wird die Collection zurückgesetzt.
Du verwendest mehrere Public Collections mit dem selben Namen.
markusxy ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.01.2019, 16:24   #4
ThomasA320
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Es gibt im ganzen Projekt nur eine Collection.

Ein Fehler tritt nicht auf.

Es ist ein Standardmodul und soll in einem Reportmodul benutzt werden.
ThomasA320 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.01.2019, 11:15   #5
Kyron9000
MOF Koryphäe
MOF Koryphäe
Standard

Hallo,

eine andere Möglichkeit wäre...
Code:

Public Function NewTempVar(sVarName As String, vTempValue As Variant)
    TempVars.Add sVarName, vTempValue
End Function

Public Function GetTempVar(sVarName As String) As Variant
    GetTempVar = TempVars(sVarName)
End Function

' NewTempVar "Schlüssel",  Wert
' GetTempVarValue("Schlüssel")
Kannst auch in einer Abfrage verwenden.
Der Wert hält auch nach einem Fehler.

__________________

Gruß Alfred
Kyron9000 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.01.2019, 12:36   #6
markusxy
MOF Meister
MOF Meister
Standard

@Kyron9000,
der Versuch auf saubere Programmierung zu verzichten rächt sich spätestens dann, wenn man das Stadium einfachen Probierens verlässt und versucht ein Projekt umzusetzen.

@ThomasA320,
eine Variable verliert nicht einfach so zufällig seinen Inhalt.
Entweder wurde sie nie initialisiert, oder sie wird per Code freigegeben oder eben es gibt unbehandelte Fehler.
Eine simple Sache.

Setzte die Variable einfach Private und verwende Properties für den Zugriff oder erstelle eine Klasse für die Kapselung, dann lässt sich das ganz einfach nachweisen!
markusxy ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.01.2019, 12:44   #7
Kyron9000
MOF Koryphäe
MOF Koryphäe
Standard

@markusxy
verstehe diese Antwort nicht, was ist an TempVars schlecht oder gefährlich
Da würde ich mich dann fragen, warum gibt es TempVars überhaupt!
Verwende es um den eingeloggten User überall einfügen/anzeigen zu können!
Mein Projekt funktioniert sehr gut und schon sehr lange.

__________________

Gruß Alfred

Geändert von Kyron9000 (12.01.2019 um 13:03 Uhr).
Kyron9000 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.01.2019, 12:48   #8
Josef P.
MOF Guru
MOF Guru
Standard

Hallo!

@Markus: Was ist bei der Verwendung von TempVars nicht sauber?
Diese eingebaute Collection macht genau das, was im 1. Beitrag beschrieben wird.

Natürlich sollte die Verwendung von TempVars nicht verhindern, das ursprüngliche Problem zu erkennen, um für später zu lernen.

Der Vorteil von der von dir erwähnten Klasse ist die Möglichkeit Properties mit passenden Datentypen zu verwenden und die Vermeidung von Tippfehlern.

TempVars("Anwendungsversion") vs. MyProperties.Anwendungsversion
Schreibt man Anwendungsverison statt Anwendungsversion bei TempVars meckert der Compiler nicht bei der Klassen-Variante mit der Property-Prozedur wird man den Fehler bereits beim Kompilieren bemerken bzw. das Wort gar nicht falsch schreiben, da IntelliSense genutzt werden kann.

mfg
Josef

Geändert von Josef P. (12.01.2019 um 12:50 Uhr).
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.01.2019, 13:03   #9
markusxy
MOF Meister
MOF Meister
Standard

@Josef,
aus meiner Sicht war die Aussage eigentlich klar.
Durch Tempvars umgeht man es sich mit dem eigentlichen Problem zu beschäftigen.
Die fehlende Auseinandersetzung mit dem Error Handling ist aber eines der Hauptprobleme von Anfängern, aber sehr relevant für Projekte.

Außerdem funktioniert das ja nur sehr begrenzt, da TempVars logischerweie keine Objekte aufnehmen können.
markusxy ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.01.2019, 13:12   #10
Kyron9000
MOF Koryphäe
MOF Koryphäe
Standard

Zitat:

Ein Fehler tritt nicht auf.

nicht meine Aussage...

Zitat:

aus meiner Sicht war die Aussage eigentlich klar.
Durch Tempvars umgeht man es sich mit dem eigentlichen Problem zu beschäftigen.
Die fehlende Auseinandersetzung mit dem Error Handling ist aber eines der Hauptprobleme von Anfängern, aber sehr relevant für Projekte.

Außerdem funktioniert das ja nur sehr begrenzt, da TempVars logischerweie keine Objekte aufnehmen können.

...es gibt keinen Fehler, also wo soll er einen Fehler suchen.
Eventuell hat er das mit der Collection falsch erstellt... mit TempVars sollte das Problem gelöst sein.
Deine jetzige Antwort verstehe ich genauso wenig.
Wer möchte ein Objekt aufnehmen, eine Variable sollte es sein.

__________________

Gruß Alfred
Kyron9000 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.01.2019, 13:29   #11
Josef P.
MOF Guru
MOF Guru
Standard

Es gibt einen Fehler.

Zitat:

Fehlermeldung : Objektvariable nicht festgelegt.

Die Ursache diese Fehlers zu erkennen hilft bestimmt, um später diese und ähnliche Fehlerquellen auszuschließen.
Wir können die Ursache für den Fehler hier aber nicht erkennen, weil kein Code zu sehen ist. Es könnte eine fehlende Initialisierung sein. Vielleicht ist es auch nur ein Schreibfehler mit fehlendem "Option Explicit" in den Codemodulen.

Mit TempVars wird es nicht zu diesem Fehler kommen. Es könnte aber sein, dass von der Collection etwas abgefragt wird, dass noch gar nicht initialisiert wurde.

=> Sauber arbeiten ist auch mit TempVars notwendig. Die Verwendung von TempVars ist meiner Meinung nach aber nicht unsauberer als die Verwendung einer selbst erstellten Collection o. ä.
Tippfehler kann man ausschließen, wenn der Compiler bei der Prüfung hilft => Property-Prozeduren.

mfg
Josef

Geändert von Josef P. (12.01.2019 um 13:46 Uhr).
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.01.2019, 13:51   #12
Kyron9000
MOF Koryphäe
MOF Koryphäe
Standard

... ja, darum habe ich auch geschrieben...

Zitat:

1.) ...es gibt keinen Fehler, also wo soll er einen Fehler suchen.
2.) Eventuell hat er das mit der Collection falsch erstellt...

1.) Im Programm gibt es keinen Fehler.
2.) In der Collection hat er einen, den er mit TempVars ev. egalisieren kann.
Da er Collection nicht verwenden muss, wo ja der Fehler drin steckt.

Das man immer sauber programmieren muss ist mir schon auch klar.

__________________

Gruß Alfred
Kyron9000 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.01.2019, 13:10   #13
ThomasA320
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo,
erstmal herzlichen Dank.

Ich habe das mit tempvar probiert:
970 TempVars.Add "WT20", 1
980 TempVars.Add "WL15", 2
läuft ohne Fehler.

Das ist allerdings nicht das, was ich brauche, sondern:
Dim WExxyy As TempVars
990 WExxyy.Add "WT20", 1
1000 WExxyy.Add "WL15", 2
hier kommt immer ab 990 'Objektvariable nicht festgelegt'.

Wenn ich bei 990 einen Break mache und dann im Direktfenster WExxyy. eingebe, zeigt mir Intellisense alle Eigenschaften und Methoden, auch ADD. Nur ausführen kann ich ADD nicht?

Gruß Thomas
ThomasA320 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.01.2019, 13:34   #14
Kyron9000
MOF Koryphäe
MOF Koryphäe
Standard

...
Code:

Dim WExxyy As TempVars
habe das noch nie so getestet... schau ma mal.

Code:

Public Sub TestTempVars()
Dim WExxyy As Object
    Set WExxyy = TempVars
        WExxyy.Add "AAA", 1
    Debug.Print WExxyy("AAA")
End Sub

__________________

Gruß Alfred

Geändert von Kyron9000 (14.01.2019 um 13:50 Uhr).
Kyron9000 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.01.2019, 13:45   #15
markusxy
MOF Meister
MOF Meister
Standard

Zitat: von Kyron9000 Beitrag anzeigen

...

Code:

Dim WExxyy As TempVars
habe das noch nie so getestet... schau ma mal.


Jedenfalls macht es keinen Sinn.

Da TempVars aber eine Klasse ist geht das natürlich.
Die Fehlermeldung sagt ja alles.

Aber keine Sorge, ich überlasse dir das Feld gerne.
markusxy ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.