Lesen Sie hier einige der besten Beiträge aus SmartTools Access Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Access.
In vielen Formularen müssen Sie regelmäßig eine kleine Berechnung durchführen. Dazu greifen Sie zum Taschenrechner, tippen die Berechnung ein und übertragen das Ergebnis in das betreffende Feld im Formular. Diesen Aufwand können Sie sich durch Nutzung einfacher Tricks sparen und Access die Berechnungen und das Eintragen des Ergebnisses selbst vornehmen lassen. Basis der Lösung ist die wenig bekannte Funktion "Eval()", der als Parameter ein beliebiger Ausdruck übergeben werden kann.
FRAGE Um Inhalte von Tabellen aus externen Datenbanken flexibel einbinden zu können, verwende ich eine Abfrage mit dem folgenden Inhalt: SELECT Tabelle.* FROM Tabelle IN 'X:\Datenbank.mdb'; Pfad und Dateiname lassen sich schnell im SQL-String ändern. Bisher waren die Datenbanken nicht mit einem Kennwort geschützt und der Zugriff funktionierte ohne Probleme. Nun müssen einzelne Datenbanken mit Kennwort gesichert sein. Das führt dazu, dass bei einer geschützten Datenbank bei jedem Zugriff die Eingabe des Datenbank-Kennwortes per Dialog abgefragt wird. Kann ich auch im SQL-String ein Datenbank-Kennwort angeben und wenn ja, wie genau muss der SQL-String aufgebaut sein?
Wenn in einer VBA-Routine ein Fehler auftritt und Sie dazu eine Meldung der Form MsgBox "Problem: " & Err.Description anzeigen lassen, wird häufig der wenig hilfreiche Text "Anwendungs- oder objektdefinierter Fehler" ausgegeben. Wir zeigen in unserem Tipp, wie Sie dem Problem durch aussagekräftigere Fehlermeldungen schneller auf den Grund gehen können. Wenig bekannt ist eine Erweiterung in Access, die für anwendungs- oder objektspezifische Fehler einspringt und speziell den für Access gültigen Fehlertext liefert.
FRAGE In einem Formular rufe ich über eine Schaltfläche nacheinander mehrere Abfragen per DoCmd.OpenQuery auf. In einem Bezeichnungsfeld gebe ich als Fortschrittsanzeige zwischendurch den Text "Abfrage '1..10' (Name) wird ausgeführt..." aus. Diese Anzeige erfolgt aber nicht korrekt. Im Feld steht der Name der ersten Abfrage und wechselt erst nach Ausführung der letzten Abfrage in "Abfrage 10 (Name) wird ausgeführt...".
Wenn Sie regelmäßig Berichte wie Preislisten, Statistiken, Umsatzberichte oder ähnliche Dokumente an Ihre Kollegen weitergeben oder auf der Festplatte sichern möchten, gibt es mit dem neuen SmartTools Berichte-Verteiler 5.8 jetzt eine komfortable Lösung. Geben Sie Berichte direkt aus Ihrer Datenbank in den Formaten PDF oder RTF an beliebig viele Empfänger über Outlook weiter. Auch die Ablage Ihrer Berichte im Netzwerk in die Ordner von Kollegen ist mit den SmartTools Berichte-Verteiler kein Problem.
Abfrageergebnisse benötigen Sie häufig nicht in der Datenblattansicht, sondern als Zeichenkette oder Array zur Weiterverarbeitung. In der Regel initialisieren Sie dazu ein Recordset, durchlaufen es und fassen die benötigten Feldinhalte in einer Zeichenkette zusammen. Wenig bekannt ist die Tatsache, dass ein ADO-Recordset eine Methode bereitstellt, die Ihnen diese Arbeit abnimmt und das Ergebnis blitzschnell zur Verfügung stellt.
FRAGE Ich möchte meine Outlook-Nachrichten mit Anlagen archivieren und fand hierzu Ihre bisherigen Tipps zur VBA-Steuerung von Outlook in früheren Ausgaben von Access Weekly sehr hilfreich. Jetzt geht es mir aber speziell um die Anhänge. Gibt es eine Möglichkeit, per VBA festzustellen, ob eine Nachricht überhaupt Anhänge enthält? Sollte das der Fall sein, möchte ich die angehängten Dateien separat speichern.
Um schnell einige Datensätze zu löschen oder zu aktualisieren, verwenden Sie regelmäßig die Methode "Execute" des Objektes "Database". "Execute" liefert allerdings keine Rückmeldung, wie viele Datensätze von der Ausführung betroffen sind, so dass Ihnen Anhaltspunkte für eine eventuelle Folgeverarbeitung fehlen. In diesen Fällen hilft die Eigenschaft "RecordsAffected": Sie liefert die Anzahl der Datensätze, die durch die letzte Ausführung von "Execute" betroffen waren.
In Formularen werden oft umfangreiche Texte in Memofeldern gespeichert. Hier ist die Gefahr sehr groß, dass beim Lesen durch unachtsame Eingaben oder einen Tastendruck die Inhalte verändert oder gelöscht werden. Aber auch normale Textfelder können Daten enthalten, die nicht ohne weiteres geändert werden dürfen. Access macht nicht auf Änderungen aufmerksam, sondern speichert die Datensätze einfach ohne weitere Rückfrage. Unser Tipp stellt eine Lösung vor, mit der Sie dieses Manko umgehen und Text- und Memofelder gegen irrtümliche Änderungen schützen können.
FRAGE Um alle Tabellen und Abfragen in einer Datenbank in einer Schleife zu bearbeiten, lassen sich TableDefs- und QueryDefs-Auflistungen in der Form For Each td In TableDefs bzw. For Each qd In QueryDefs einsetzen. Ich möchte nun auch eine vergleichbare Schleife für Formulare, Berichte, Makros und Module programmieren. Es gibt allerdings keine geeigneten "Defs"-Auflistungen. Kennen Sie eine passende Lösung?
Dieses Blog präsentiert Inhalte aus den E-Mail-Newslettern von SmartTools Publishing. Premium-Beiträge, die mit [S+] gekennzeichnet sind, sind Newsletter-Abonnenten vorbehalten.
Jetzt Abonnent werden
Falls Sie SmartTools Access Weekly noch nicht abonniert haben, können Sie sich jetzt anmelden – kostenlos und innerhalb weniger Minuten! Sie erhalten dann umgehend ein Passwort, das alle Premium-Beiträge für Sie freischaltet.
[S+] Inhalte freischalten
Wenn Sie SmartTools Access Weekly bereits beziehen, geben Sie hier Ihr Abonnenten-Passwort ein, um alle Premium-Beiträge freizuschalten:
Tipp: Sie finden das gültige Passwort immer am Ende der neuesten Ausgabe Ihres Newsletters.