VB: Variable initialisieren

Diskutiere VB: Variable initialisieren im Developer Network Forum im Bereich Hardware & Software Forum; ... fast schon philosophisch ... also, eine Sache, die mich schon seit längerem verwundert - wäre nett wenn das jemand aufklären könnte...
  • VB: Variable initialisieren Beitrag #1
Chrisu

Chrisu

Bekanntes Mitglied
Dabei seit
30.11.1999
Beiträge
1.364
Reaktionspunkte
0
Ort
EnterpriZe Elite
... fast schon philosophisch ...

also, eine Sache, die mich schon seit längerem verwundert - wäre nett wenn das jemand aufklären könnte:

Eine Objektvariable, zB rs für Recordset oder db für database läßt sich mit dem SET-Befehl befüllen und auch initialisieren - die Initialisierung erfolgt über
Code:
SET ObjektVariable = Nothing

nun will ich das Ganze auch für einfache Variablen verwenden:

Vorausgesetzt ich habe eine Variable, die entweder innerhalb eines Klassenmoduls (Dim ...) oder projektweit (Public/Global) deklariert wurde, wie kann ich diese Variable wieder initialisieren?

Variable = "" ist zwar syntaktisch richtig aber bringt nicht das gewünschte Ergebnis
Variable = empty ebenso
Variable = nothing ist syntaktisch falsch

es geht mir darum, zu ermitteln, ob eine Variable einen Wert hat oder nicht, ich will nicht wissen welchen Wert die Variable hat sondern nur ob sie einen hat - oft muss man am Ende einer Prozedur eine Variable wieder initialisieren, damit andere Prozeduren nicht fehlgeleitet werden - wie mache ich das nun?

wenn ich die Anweisung
Code:
Variable = Empty
verwende, und direkt anschließend
Code:
If IsEmpty(Variable)
abrufe, dann kommt False heraus ... ebenso bei
Code:
If IsNull(Variable)
-> bei If IsNull ist die Sache klar, denn wenn die Variable als Wert Null hat ist das auch ein Wert, daher wird bei einer Variablenabfrage nicht True ausgegeben, da Null selbst ein Wert ist ...

aber wie ist das mit If IsEmpty? Wie initialisiere ich eine bereits deklarierte Variable, die auch einen Wert zugewiesen bekommen hat, sodass ich abfragen kann, ob die Variable jemals befüllt worden ist oder nicht und wie stelle ich die Variable wieder in den Ur-Zustand?

MSDN sagt das funzt mit IsEmpty - aber das funktioniert nicht ... ein kleines Beispiel:
Code:
Dim abcd As String
abcd = "Testvariable"
abcd = Empty
If IsEmpty(abcd) Then
    MsgBox "is wirklich leer"
End If

da kommt keine msgbox daher ... ich suche im Endeffekt nach einer Anweisung die die Deklaration einer Variablen wieder rückgängig macht ...

thx

Edit:
wenn die Variable als Variant deklariert wurde, funktioniert die Abfrage mit IsEmpty, aber nicht bei anderen Datentypen ...
 
  • VB: Variable initialisieren Beitrag #2
yks

yks

Bekanntes Mitglied
Dabei seit
21.01.1999
Beiträge
551
Reaktionspunkte
0
Ort
Hamburg
Hi,

würde mich auch mal interessieren. Habe auch schon öfter dieses Problem gehabt.

...yks ;)
 
  • VB: Variable initialisieren Beitrag #3
addy

addy

Bekanntes Mitglied
Dabei seit
07.07.2000
Beiträge
452
Reaktionspunkte
0
Ort
about:blank
Muss mich ja outen, noch nie mit 'IsEmpty' gearbeitet zu haben. :no:
Ich prüfe vorher halt einfach ob der Inhalt = "" ist, oder einem bestimmten Initalisierungswert enspricht (z.B. CHR(27)), der sonst nicht verwendet wird. (Was zugegebenermaßen nicht ganz korrekt ist, aber funktioniert)

Wenn ich dich richtig verstanden habe, müsste aber im folgendem Script die erste MsgBox erscheinen. (Was aber nicht passiert)

Dim abcd As String
If IsEmpty(abcd) Then
MsgBox "is noch leer"
End If
abcd = "Testvariable"
abcd = Empty
If IsEmpty(abcd) Then
MsgBox "is wirklich leer"
End If

Demzufolge läßt sich IsEmpty überhaupt nicht für 'normale' Variablen verwenden ... ? :confused:

MfG
addy
 
  • VB: Variable initialisieren Beitrag #4
Chrisu

Chrisu

Bekanntes Mitglied
Dabei seit
30.11.1999
Beiträge
1.364
Reaktionspunkte
0
Ort
EnterpriZe Elite
tja, wie gesagt IsEmpty funktioniert nur bei Variablen des Typs Variant ... um ehrlich zu sein ich verwende auch dieselbe Vorgehensweise wie du, nämlich die leere Zeichenfolgen :rolleyes: aber das Grundproblem aus dem 1. Topic ist noch nicht gelöst, nämlich wie ich Variablen wieder neu initialisieren kann ...
 
  • VB: Variable initialisieren Beitrag #5
J

JoySurfer

Bekanntes Mitglied
Dabei seit
20.04.2000
Beiträge
128
Reaktionspunkte
0
Wenn du eine Variable sagen wir mal als Long deklarierst, als mit
dim a as Long
dann wird im Speicher ein Speicherplatz für Long-Wert fest reserviert. Das heißt, in diesem Augenblick hat die Variable den Wert 0.
Es gibt demnach auch keine Möglichkeit festzustellen, ob du einen anderen Wert zugeordnet hast.
Die einzigste Möglichkeit ist ein zweite Variable als Boolean zu deklarieren, also
dim aHasValue as Boolean
Wenn du dann a einen Wert zuteilst, setzt du aHasValue=True. Möchtest du den Wert für a ungültig erklären, dann aHasValue=False.
Du brauchst dann nur aHasValue zu überprüfen und weisst, ob a einen gültigen Wert hat.

Anders sieht es bei Objekten aus.
Hier wird bei der Deklaration z.B. dim a as RecordSet im Speicher ein Speicherplatz für einen Zeiger auf das eigentliche Objekt reserviert.
Das eigentliche Objekt wird ja erst mit Set a = new RecordSet im Speicher erstellt. Und nur der dazugehörige Zeiger, wo sich also dieses Objekt im Speicher befindet, wird in der Variablen abgelegt.

Mit der Anweisung set a = nothing wird auch nichts anderes gemacht als den Zeiger zu löschen. Das Objekt ist damit noch lange nicht zerstört. Du kannst ja mehreren Variablen den Zeiger für diesess Objekt zuordnen. Z.B.

dim a as RecordSet
dim b as RecordSet

set a = new Recordset
set b = a
set a = nothing

Es wird ein neues RecordSet-Objekt erstellt und ein Zeiger darauf in der Variablen a gespeichert. Danach wird der Zeiger von a ebenfalls in b abgelegt. Jetzt wird der Zeiger a gelöscht. Jedoch das Objekt ist immer noch vorhanden, weil die Variable b immer noch daruf verweist.
Erst wenn set b = nothing ausgeführt wird, wird das Objekt zerstört, weil keine weitere Refernz vorhanden ist.

Vielleicht hat dir das ein wenig geholfen.
 
  • VB: Variable initialisieren Beitrag #6
Chrisu

Chrisu

Bekanntes Mitglied
Dabei seit
30.11.1999
Beiträge
1.364
Reaktionspunkte
0
Ort
EnterpriZe Elite
tja, komisch dass bei der Long-Deklaration gleich der Wert 0 zugewiesen wird ... weil dann kann nicht mehr unterschieden werden ob zur Laufzeit irgendwann 0 zugewiesen worden ist (durch ein bestimmtes Ereignis) oder ob die Deklarations-0 noch immer vorhanden ist ...

naja meistens funktioniert die Abfrage, ob Werte zugewiesen wurden oder nicht mit einer Kombination aus IsNull, IsEmpty und "" :p

thx
 
Thema:

VB: Variable initialisieren

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben