Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Wert aus Ufo in Wertetabelle speichern

Begonnen von MaxP, November 29, 2024, 10:09:18

⏪ vorheriges - nächstes ⏩

MaxP

Hallo Ulrich,

ich habe gerade gegooglt und was über globale Varaiblen gelesen. Ist wohl nicht das Gleiche wie Properties aber ähnlich. Ist das evtl. universeller und einfacher zu händeln?

Gruß
Max
Win 10 pro 64 bit, Access 2003

Knobbi38

Hallo Max,

natürlich kannst du auch globale Variablen verwenden, obwohl das "Bad Practice" ist und zu vermeiden ist.
Properties haben grundsätzlich den Vorteil, daß du die Kontrolle über Lese- und Schreibvorgänge behältst und spätere Änderungen einfacher machen.

Einfaches rudimentäres Beispiel:
Du möchtest die Änderungen einer globalen Property verfolgen, dann reicht es, eine Debug-Anwesung einzustreuen. Mit einer globalen Variablen ist das nicht möglich.

Warum sträubst du dich so vehement gegen Properties? In jedem Programm werden die doch ganz normal und häufig verwendet, z.B. wenn du bei einem Label die Caption Property neu zuweist oder bei einer Textbox per .Value Property den Wert ausliest. 

Beaker s.a.

Hallo Ulrich,

Die eingebauten Properties sieht er aber nicht bzw. ist ihm
wahrscheinlich nicht bewusst, dass es sich überhaupt um solche
handelt.

@max
In einem deutschen Access nennt sich das "Eigenschaften" von
Objekten.
In diesem Fall stimmt das allerdings gar nicht. Eine benutzer-
definierte Property ist im Prinzip eine Funktion (Methode), die
keinem Objekt zugewiesen ist, sondern nur die Membervariable setzt
(Let/Set) oder ausliest (Get).

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MaxP

Sorry, ich bin nun mal kein gelernter Access-Profi mit ausgefeiltem Background, sondern nur ein Autodidakt, der nach dem Prinzip Trial and Error handelt/handeln muss. Und jede nicht geschriebene Programmzeile ist eine gute Zeile, solange das Programm läuft. Wenn es denn läuft.

Ich habe ein Modul mit folgendem Inhalt:
Public MeinFilter As LongIch habe eine Fuktionen zum Setzen der Variable:
MeinFilter = Me!Eingabe
Und so sollte der Wert in einer Abfrage genutzt werden:
SELECT * FROM MeineTabelle WHERE MeinFeld = [MeinFilter];Nur das funktioniert nicht!

Gruß
Max

Win 10 pro 64 bit, Access 2003

Knobbi38

Hallo Max,
Zitat von: MaxP am Dezember 02, 2024, 17:52:48Und jede nicht geschriebene Programmzeile ist eine gute Zeile, solange das Programm läuft.
Das ist im Prinzip richtig, aber nicht immer ist Einfach auch gleich besser. So kann man z.B. alle Fehlerabfragen weglassen und solange nichts unvorhergesehenes passiert, läuft das Programm. Das große Erwachen kommt  möglicherweise etwas später und wird im Fehlerfall dann mit einer aufwendiger Fehlersuche belohnt.

Zitat von: MaxP am Dezember 02, 2024, 17:52:48... sondern nur ein Autodidakt
Ich denke, du möchtest dein Wissen schon noch erweitern und etwas dazu lernen, oder?

Ob die SQL-Anweisung so läuft, hängt davon ab, wie sie aufgerufen wird. Innerhalb von VBA mußt du die Variable evaluieren, sprich den Inhalt als String zu einem gesamt SQL-String zusammenfassen, weil SQL VBA nicht kennt (siehe #3).

Für Abfragen übernimmt das der Expression Service von Access, der aber in diesem Fall nur VBA Funktionen evaluieren kann. Deshalb muß eine globale Variable oder Property immer in eine Funktion gepackt werden:
Public Kriteria As Long

Public Function GetKriteria() As Variant
 GetKriteria = Kriteria
End Function
Für einen Property in einem Modul würde das ähnlich aussehen.

Der Aufruf wäre dann:
SELECT * FROM Table WHERE ID = GetKriteria()
Eine Tempvar hingegen kann direkt aufgelöst werden und braucht keine Funktion:
SELECT * FROM Table WHERE ID = Tempvars!KriteriaLeider wird das von ACC2K3 noch nicht unterstützt.

Gruß
Ulrich



Beaker s.a.

Zitatder aber in diesem Fall nur VBA Funktionen evaluieren kann
Oder eben öffentliche Properties, die ja nichts anderes machen, ausser
die Möglichkeit zu bieten auch einen Wert zu schreiben.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Knobbi38

#21
@Beaker s.a.

Zitat von: Beaker s.a. am Dezember 03, 2024, 17:50:06
Zitatder aber in diesem Fall nur VBA Funktionen evaluieren kann
Oder eben öffentliche Properties, die ja nichts anderes machen, ausser
die Möglichkeit zu bieten auch einen Wert zu schreiben.
Genau das geht eben in einer Abfrage nicht. Weder wird eine globale Variable noch eine globale Property in einer Query unterstützt.

Grüße
Ulrich

MaxP

Hallo zusammen,

die Zusätze zur Funktion fehlten bei mir. Nun funktioniert es aber.
Nun muss ich Variablen einbinden.

Sofern ich damit Probleme bekomme, komme ich vielleicht noch mal auf die Properties zurück.

Danke an Euch beiden!

Gruß
Max
Win 10 pro 64 bit, Access 2003