Category: Visual Basic

Rückruffunktionen (Callback Functions) in Access anwenden

By , 6. April 2012

Hallo liebe Leser,
beim Schmökern in diversen Foren bin ich auf Rückruffunktionen gestoßen, die ich bislang selbst nicht einsetzte. Eine Rückruffunktion ist eine Funktion, die als Parameter einer anderen Prozedur übergeben wird. Die Rückruffunktion selbst kann auch eigene Parameter haben die auch übergeben werden. Dadurch kann man eine allgemeine Prozedur erstellen, deren Verhalten erst durch die übergebene Rückruffunktion bestimmt wird. Das Verhalten dieser allgemeinen Prozedur kann sich mit jedem Aufruf ändern.

Dadurch kann man eine Access-Anwendung erstellen, mit einer Art Programm-Schnittstelle – bei PHP Entwicklern auch als Hook bekannt – die später hinzugefügte Module nutzen können, um eigene Funktionen auszuführen. Dies bedeutet aber auch, dass eine vom Entwickler ungewollte Prozedur ausgeführt werden könnte die auch Schadcode enthalten kann. Man sollte den Einsatz nachfolgend vorgestellter Methode also genau planen.

Da beim Übergeben von Parametern Access nicht den Datentyp „Funktion“ kennt, muss man da ein wenig tricksen. Statt dessen übergibt man den Funktionsname als String und den/die erforderlichen Parameter. Wie genau das geht zeigt nachfolgender Code.

Erstellen Sie zu erst ein Standardmodul. Beginnen wir anschließend mit der „neutralen“ Prozedur.

Function apply_to(ByVal funktion As String, ByVal werte As Variant) AS Variant
    Dim ergebnis() As Variant
    Dim i As Long
    Dim e As Variant
    For i = LBound(werte) To UBound(werte)          'Schleife über alle Werte
        e = Eval(funktion & "(" & werte(i) & ")")   'rufe die Rückruffunktion mit Parameter auf
        ReDim Preserve ergebnis(i)                  'Wertebereich des Rückgabearrays erweitern
        ergebnis(i) = e                             'und hänge den Rückgabewert an das Array an.
    Next i
    apply_to = ergebnis
End Function

Read more »

Dateipfade im Griff

By , 2. März 2012

Jeder hat sicherlich mal das Problem gehabt in seiner Access-Anwendung mit Dateipfaden klar zu kommen. Sei es der Pfad zu Bildquellen, oder zu externen Datenbanken.

Auf eine Idee dazu hat mich heute eine Frage im Access-o-Mania Forum gebracht, wobei ich spontan an CurrentdbC denken musste. Bei CurrentdbC wird ein Objekt über eine Property zugänglich gemacht, das gleiche geht ja auch mit einer String. darauf hab ich ein bisschen gebastelt und eine sehr brauchbare Lösung erarbeitet die ich euch nicht vorenthalten möchte.

Wie gewohnt erstellt man zuerst eine Tabelle wo die Pfade gespeichert werden:


Das Feld Pfad habe ich als Memo-Feld ausgeführt.
Read more »

Reguläre Ausdrücke verwenden

By , 20. April 2009

Mal angenommen Sie wollen Eingaben in einem ungebundenem Formular auf ihre Richtigkeit prüfen. Eine geläufige Vorgehensweise wäre z.B. den Feldinhalt gegen Null zu prüfen, oder die Länge auf eine bestimmte Mindestanzahl an Zeichen. Das ist alles aber ziemlich ungenau und lässt meist großen Spielraum bei der Falscheingabe.

Eine alternative Möglichkeit ist es sogenannte Reguläre Ausdrücke (Regexp, regular expressions) zu verwenden, welche in vielen Entwicklungssprachen und vorallem in Scriptsprachen wie PHP bekannt sind.

Reguläre Ausdrücke bestehen aus einem Muster, das in Begrenzer eingeschlossen wird, sowie aus verschiedenen Schaltern, den Modifizierern. In VB/VBA wurde allerdings auf die Begrenzer verzichtet, und die Modifizierer sind aus der Zeichenkette – welche dem regulären Ausdruck entspricht – ausgegliedert als Eigenschaft des entsprechenden Objektes.

Wagen wir mal einen Blick über den Tellerand hinüber zur Scriptsprache PHP und definieren wir mal einen regulären Ausdruck:

$pattern = „/^([A-Z]{1,2})?(-| )?([0-9]{5})$/“;

In diesem Muster sind so gut wie alle Techniken von regulären Ausdrücken enthalten, dass nicht kundige schon ins grübeln kommen. Mir ging das nicht anderst. Im obigen Beispiel wollen eine Eingabe einer Postleitzahl auf Ihre Richtigkeit überprüfen. Die Postleitzahl könnte z.B. so aussehen: D-80807 oder D80807 oder nur 80807.
Read more »

OfficeFolders theme by Themocracy