Freitag, 21. November 2014
TM-SmartString: InStr
Das Klassenmodul TM-SmartString ermöglicht mit seinen Eigenschaften schon ein komfortables Programmieren. Bei der Erstellung der Klasse TM-SmartSqlString ist mir aufgefallen, dass eine wichtige Methode noch fehlt: Instr. Natürlich ist es jetzt ein Leichtes, diese Methode zu implementieren. Ich möchte jedoch noch etwas mehr Komfort
Samstag, 15. November 2014
TM-DatenKlassenGenerator: Verbesserung bei Gültigkeitsmeldungen
Gestern erreichte mich eine E-Mail. Darin wurde der DatenKlassenGenerator gelobt. Dieses Lob kam zusammen mit einer kleinen Anregung, die ich natürlich gerne umgesetzt habe. Es geht um die Fehlermeldung bei der Verletzung einer Gültigkeitsregel.
Mittwoch, 29. Oktober 2014
TM-SmartSqlString: So wird die Klasse eingesetzt
Mit der Klasse TM-SmartSqlString besteht die Möglichkeit, einen SQL-String in einer eigenen Klasse zu verwalten. Die Klasse bietet dabei Möglichkeiten, die speziell auf ein SQL-Statement zugeschnitten sind. So wird bei Zuweisung eines SQL-Statements dieses in seine Bestandteile zerlegt.
Samstag, 25. Oktober 2014
TM-SmartSqlString: Grundlegende Implementierung
Mit der Klasse TM-SmartString hat sich gezeigt, wie einfach es ist, einen eigenen Datentyp zu erstellen und mit Leben zu füllen. Auf der Konferenz Access Day im Herbst 2013 stellte Armin Stein ein Modul mit dem Namen JStreetSQLTools vor. Dieses Modul enthält Methoden, um die Where-Klausel, die Having-Klausel oder die OrderBy-Klausel eines SQL-String zu ersetzen oder anzupassen.
Mittwoch, 8. Oktober 2014
TM-SmartTypes: Geänderte Versionsnummern
Die Klasse TM-SmartString entwickelt sich ständig weiter. Mit jeder Weiterentwicklung wurde eine neue Versions-Nummer vergeben. Bisher war es so, dass die Klasse TM-SmartString die einzige Klasse im Projekt TM-SmartTypes ist. Daher musste ich bisher auch nicht über die Versions-Nummern nachdenken. Die Versions-Nummer der Klasse
Sonntag, 5. Oktober 2014
TM-SmartString: IsLike
In diesem Beitrag wird das Klassenmodul TM-SmartString um eine Eigenschaft erweitert, die es erlaubt, einen String einem (einfachen) Mustervergleich zu unterziehen, ohne das dazu eine externe Bibliothek für Regular Expressions eingebunden werden muss: IsLike.
Sonntag, 29. Juni 2014
Like: Der vergessene Befehl?
Bei der Recherche rund um das Thema Regular Expressions bin ich auf den Befehl Like in VBA gestoßen. Dieser Befehl ermöglicht einfache Vergleiche mit Suchmustern, ohne das es notwendig ist, eine Bibliothek für Regular Expressions einzubinden.
Wenn man an LIKE denkt, fällt einem sicherlich (als erstes) der Operator in Abfragen ein. Dieser Operator ermöglicht einfache Suchabfragen unter Verwendung von Wildcards. So steht das Zeichen "*" für ein oder mehrere beliebige Zeichen.
Was in SQL-Abfragen geht, ist aber auch direkt in VBA möglich. Eine Dokumentation findet man in der Online-Hilfe oder in der MSDN.
Jetzt stellt sich natürlich die Frage, was man mit diesem Befehl anstellen kann, was nicht mit anderen Befehlen auch gelöst werden kann.
Wenn man z.B. wissen möchte, ob ein Text in einem anderen Text enthalten ist, kann man das mit Like lösen:
Ähnlich verhält es sich, wenn man prüfen möchte, ob ein Text mit einer Zeichenfolge beginnt oder endet. Mit dem Befehl Like sieht der Code wie folgt aus:
Ich habe die konkrete Aufgabe, eine eingegebene Kunden-Nr. auf Gültigkeit hin zu überprüfen. Ein Kriterium ist, dass die Kunden-Nr. nur aus Ziffern besteht. Die Kunden-Nr. kann dabei beliebig viele Stellen haben. Eine Prüfung mit einer Schleife, Zeichen für Zeichen, wollte ich ausschließen, da die Funktion später auch in Abfragen zur Prüfung des kompletten Datenbestands eingesetzt werden soll.
Schnell kam ich auf die Idee, die Eingabe mit der Funktion IsNumeric zu prüfen:
Hier schlägt jetzt die Stunde des Like-Befehls. Sicher könnte man die von der Funktion IsNumeric akzeptierten Zeichen, die keine Ziffer sind, mit Hilfe des InStr-Befehls herausfinden. Der Code wird dann aber schnell lang und unübersichtlich. Einfacher geht es mit dem richtige Suchmuster beim Like-Befehl.
Mit dem Like-Befehl kann man prüfen, ob ein Zeichen in einer Werteliste vorkommt. Für Ziffern ist die Werteliste 0 bis 9:
Es scheint, als ob der Befehl Like unter VBA nicht die notwendige Aufmerksamkeit erhält, die er verdient. Mit diesem Befehl kann man Prüfungen, die man sonst mit Left$, Right$ und InStr vornimmt, auf einfache Art durchführen. Außerdem sind Vergleiche mit komplexeren Suchmustern möglich. Ein Beispiel habe ich in diesem Beitrag aufgezeigt.
Der Befehl Like kann mehr, als man im ersten Moment denkt. Es lohnt sich auf jeden Fall, sich mit den Möglichkeiten zu beschäftigen.
Wenn man an LIKE denkt, fällt einem sicherlich (als erstes) der Operator in Abfragen ein. Dieser Operator ermöglicht einfache Suchabfragen unter Verwendung von Wildcards. So steht das Zeichen "*" für ein oder mehrere beliebige Zeichen.
Was in SQL-Abfragen geht, ist aber auch direkt in VBA möglich. Eine Dokumentation findet man in der Online-Hilfe oder in der MSDN.
Jetzt stellt sich natürlich die Frage, was man mit diesem Befehl anstellen kann, was nicht mit anderen Befehlen auch gelöst werden kann.
Wenn man z.B. wissen möchte, ob ein Text in einem anderen Text enthalten ist, kann man das mit Like lösen:
1: str = "Brave new world"
2: If (str Like "*new*") Then
Man kann für diese Aufgabe alternativ den Befehl InStr verwenden:1: str = "Brave new world"
2: If (InStr(str, "new") > 0) Then
Ähnlich verhält es sich, wenn man prüfen möchte, ob ein Text mit einer Zeichenfolge beginnt oder endet. Mit dem Befehl Like sieht der Code wie folgt aus:
1: str = "Hello world"
2: If (str Like "Hello*") Then
3: ...
4: If (str Like "*World") Then
Die meisten Programmierer werden diese Aufgabe wahrscheinlich mit Hilfe der Befehle Left$ und Right$ lösen:1: str = "Hello world"
2: If (Left$(str, 5) = "Hello") Then
3: ...
4: If (Right$(str, 5) = "World") Then
Ich habe die konkrete Aufgabe, eine eingegebene Kunden-Nr. auf Gültigkeit hin zu überprüfen. Ein Kriterium ist, dass die Kunden-Nr. nur aus Ziffern besteht. Die Kunden-Nr. kann dabei beliebig viele Stellen haben. Eine Prüfung mit einer Schleife, Zeichen für Zeichen, wollte ich ausschließen, da die Funktion später auch in Abfragen zur Prüfung des kompletten Datenbestands eingesetzt werden soll.
Schnell kam ich auf die Idee, die Eingabe mit der Funktion IsNumeric zu prüfen:
1: strInput = "1234"
2: If (IsNumeric(strInput) = False) Then
Auf den ersten Blick sieht diese Lösung gut aus. Die Nachteile offenbaren sich erst später. So akzeptiert die Funktion nicht nur Ziffern für die Eingabe. Es werden auch der Punkt und das Komma als Tausender- bzw. als Dezimaltrennzeichen akzeptiert: ? IsNumeric("-1.234,2")
Wahr
Hier schlägt jetzt die Stunde des Like-Befehls. Sicher könnte man die von der Funktion IsNumeric akzeptierten Zeichen, die keine Ziffer sind, mit Hilfe des InStr-Befehls herausfinden. Der Code wird dann aber schnell lang und unübersichtlich. Einfacher geht es mit dem richtige Suchmuster beim Like-Befehl.
Mit dem Like-Befehl kann man prüfen, ob ein Zeichen in einer Werteliste vorkommt. Für Ziffern ist die Werteliste 0 bis 9:
? "1" Like "[0-9]"
Wahr
Man kann die Prüfung auch umkehren und prüfen, ob ein Zeichen gefunden wird, dass nicht in der Werteliste vorkommt: ? "1" Like "[!0-9]"
Falsch
Wenn man diese Prüfung jetzt noch auf jedes Zeichen der Eingabe anwendet, ist das Ziel erreicht:1: Dim strInput As String
2: strInput = "-1.234,5"
3: If strInput Like "*[!0-9]*" Then
4: MsgBox "Unzulässiges Zeichen!"
5: End If
Mit dem Like-Befehl wird jetzt geprüft, ob es irgendwo in der Eingabe ein Zeichen gibt, das nicht in der Werteliste [0-9] enthalten ist. Mit diesem einfachen Befehl habe ich mein Ziel erreicht.Es scheint, als ob der Befehl Like unter VBA nicht die notwendige Aufmerksamkeit erhält, die er verdient. Mit diesem Befehl kann man Prüfungen, die man sonst mit Left$, Right$ und InStr vornimmt, auf einfache Art durchführen. Außerdem sind Vergleiche mit komplexeren Suchmustern möglich. Ein Beispiel habe ich in diesem Beitrag aufgezeigt.
Der Befehl Like kann mehr, als man im ersten Moment denkt. Es lohnt sich auf jeden Fall, sich mit den Möglichkeiten zu beschäftigen.
Donnerstag, 19. Juni 2014
TM-SmartString: SubStr, SubString
In diesem Beitrag wird das Klassenmodul TM-SmartString um zwei Eigenschaften erweitert, die jeweils einen Teil der Zeichenkette zurückgeben: SubStr und SubString.
Montag, 9. Juni 2014
TM-SmartString: IsNull
Eine der lästigen Dinge, auf die man beim Programmieren achten muss, ist die Verwendung von Null. Schnell kommt es zu einem Laufzeitfehler, wenn man nicht explizit Vorkehrungen für die Behandlung von Null in seinem Code getroffen hat. Mit diesem Beitrag wird die Klasse TM-SmartString für den Umgang mit Null optimiert. Außerdem kommt eine weitere Property hinzu: IsNull.
Freitag, 30. Mai 2014
TM-SmartString: Split
In diesem Beitrag wird das Klassenmodul TM-SmartString um eine Eigenschaft erweitert, die es erlaubt, einen String an einem bestimmten Zeichen zu trennen und die einzelnen Werte als Array zurückzugeben: Split.
Donnerstag, 29. Mai 2014
TM-SmartString: PadLeft, PadRight
In diesem Beitrag wird das Klassenmodul TM-SmartString um zwei Eigenschaften erweitert, die es erlauben, den String mit einem Zeichen oder einer Zeichenfolge aufzufüllen: PadLeft und PadRight.
Samstag, 24. Mai 2014
Zeichenfolge vervielfachen
Es gibt verschiedene Wege, um eine Zeichen oder eine Zeichenfolge zu vervielfachen. Benötigt wird dies zum Beispiel dann, wenn es darum geht, eine bestehende Zeichenfolge mit einem Zeichen oder einer Zeichenfolge aufzufüllen. Dieser Beitrag zeigt verschiedene Wege auf, um dieses Ziel zu erreichen.
Dienstag, 22. April 2014
Samstag, 19. April 2014
Fehlermeldung beim Start von Access 2013
Seit einigen Tagen habe ich Office 2013 auf meinem Rechner installiert. Beim Start von MS Access erscheint jetzt eine Fehlermeldung mit dem Text "Fehler
beim Laden der benutzer-definierten Benutzeroberfläche von XML". Die Lösung dieses Problems ist in den COM- Add-Ins zu suchen.
Mittwoch, 16. April 2014
TM-SmartString: ToProperCase verbessert
Vor kurzem las ich in einem Newsletter über die Unzulänglichkeiten der Funktion ToProperCase. Die Funktion liefert grundsätzlich richtige Ergebnisse. Problematisch wird es allerdings, wenn ein zusammengesetztes Wort wie z.B. "Baden-Württemberg" richtig umgewandelt werden soll.
Sonntag, 16. Februar 2014
TM-RebuildDatabase: Umgang mit Verweisen optimiert
Das schöne an Community ist, dass es immer und überall Feedback gibt. So bekam ich neulich eine Nachricht von "Charlie", der mich auf ein Phänomen in TM-RebuildData-base hinwies. Es ging um die Verweise.
Samstag, 15. Februar 2014
TM-DatenKlassenGenerator: Abfragen als Datenbasis
Der TM-DatenKlassenGenerator erstellt auf Basis einer ausgewählten Tabelle die zugehörigen Klassenmodule, um klassenbasiert auf die Daten in der Tabelle zugreifen zu können. Auf meiner Release-Liste steht schon lange der Wunsch, endlich auch Abfragen als Datenquelle verfügbar zu machen. Dies ist mit dem letzten Release endlich geschehen.
Sonntag, 12. Januar 2014
TM-SmartString: ToUpperCase, ToLowerCase, ToProperCase
Ein Vorteil bei der Verwendung einer eigenen Klasse ist, dass man die Namen der Eigenschaften und Methoden an die eigenen Wünsche anpassen kann. So braucht sich künftig keiner mehr mit den eher kryptischen Befehlen UCase oder LCase abmühen. Statt dessen stellt die Klassen TM-SmartString künftig die Eigenschaften ToUpperCase und ToLowerCase bereit. Im Rahmen dieser Erweiterung wurde dann auch gleich die
Montag, 6. Januar 2014
TM-SmartString: Append, Concat
Einen Text mit einem anderen zusammenzufügen, ist keine große Aufgabe. Spannend wird es erst, wenn der zu ergänzende Text aus einer Datenbankvariable kommt und den Wert Null annehmen könnte. In diesem Fall ist extra Arbeit erforderlich.
Wir spendieren unserer Klasse zwei weitere Eigenschaften, die diese Arbeit übernehmen. Eigentlich ist es nur eine Eigenschaft. Diese wurde unter zwei Namen
Wir spendieren unserer Klasse zwei weitere Eigenschaften, die diese Arbeit übernehmen. Eigentlich ist es nur eine Eigenschaft. Diese wurde unter zwei Namen
Abonnieren
Posts (Atom)