Access-News & Downloads
Access-Helpline
Spotlight: Das perfekte Verwaltungstool für Multiuser-Datenbanken Hier ist das Tool, auf das alle Datenbank-Administratoren gewartet haben: Total Access Admin macht die Verwaltung von Multiuser-Datenbanken zum Kinderspiel. Unabhängig davon, ob Access 2003, 2002/XP, 2000 oder 97 im Einsatz ist oder alle Versionen parallel genutzt werden - Sie haben die Kontrolle darüber, was mit der Datenbank geschieht:
http://www.add-in-world.com/katalog/ta_admin/ Download-Tipp: Das komfortable Eingabeformular für Ihre Parameterabfragen in Access Für viele Ihrer Berichte verwenden Sie Parameterabfragen, damit die für die Auswertung gewünschten Datensätze abhängig von variablen Kriterien ausgewählt werden können. Beim Öffnen dieser Berichte zeigt Access je nach Anzahl der notwendigen Parameter mehrere Male hintereinander einen Dialog "Parameterwerte eingeben" an. Diese Form der Abfrage der Parameterwerte ist nicht nur umständlich, sondern auch fehlerträchtig, da der geforderte Datentyp für die jeweilige Parametereingabe nicht ersichtlich ist. Mit dem kostenlosen SmartTools Parameter-Formular stellen wir Ihnen eine komfortable Lösung zur Verfügung, um den Umgang mit Parameterabfragen wesentlich zu vereinfachen: nachdem die Parameterabfrage zu einem Bericht automatisch ermittelt und die Parameter-Informationen ausgelesen wurden, zeigen wir ein dynamisch generiertes Formular für die komfortable Eingabe der Parameter an. Mit wenig Aufwand können Sie die Bedienung Ihrer Datenbanken so wesentlich komfortabler gestalten:
News: Neue Updates beheben sechs Sicherheitslücken in Office 2003, XP und 2000 In dem aktuellen Security Bulletin für den März hat Microsoft gleich auf sechs neu entdeckte Sicherheitslücken in verschiedenen Office-Applikationen hingewiesen: Security Bulletin für Office Fünf der Probleme beziehen sich ausschließlich auf Excel, wobei in jedem Fall eine manipulierte Excel-Arbeitsmappe dafür sorgen kann, dass unbemerkt schädlicher Programmcode ausgeführt wird. Auf diese Weise können beispielsweise Daten ausgespäht, Dateien gelöscht oder unerwünschte Programme installiert werden. Die sechste Sicherheitslücke betrifft alle Office-Anwendungen: durch die Manipulation des so genannten "Routing Slips" in Office-Dateien ist ebenfalls kann es ebenfalls zur Ausführung von unerwünschten Programmen kommen. Die Sicherheitslücken werden alle als "Kritisch" oder "Wichtig" eingestuft, so dass Sie die in dem Security Bulletin angegebenen Updates schnellst möglich installieren sollten. News: Endgültiges Design der neuen Access-Version vorgestellt Im September 2005 hat Microsoft erstmals die neue Benutzeroberfläche von Access 2007 vorgestellt. Seitdem konnte eine ausgewählte Gruppe von Anwendern die erste Beta-Version testen und Erfahrungen an das Entwicklungsteam weitergeben. Das Design wurde daraufhin noch einmal überarbeitet und nun in seiner endgültigen Form präsentiert: Benutzeroberfläche von Access 2007 Der direkte Vergleich zwischen dem ersten und dem aktuellen Entwurf zeigt, dass es noch eine Reihe von gravierenden Änderungen gegeben hat: Vergleich der Entwürfe Die Symbole sind nun klarer organisiert und Beschriftungen am unteren Rand des "ribbon" verdeutlichen die Inhalte der einzelnen Gruppen. Das große "Office-Symbol" in der oberen linken Fensterecke ist ein vollkommen neues Element. Es ermöglicht den schnellen Zugriff auf sämtliche Funktionen rund um das Datei-Management und die Ausgabe bzw. Veröffentlichung von Informationen: Der Office-Button in Office 2007 Waren die News & Downloads hilfreich für Sie? Klicken Sie bitte hier!
Universelle Auswahldialoge für Ihre Datenbanken, Teil 1 Versionen: Access 2003, 2002/XP, 2000 und 97 Zum Helpline-Beitrag "PCX-Bilder in Datenbank laden" in Access Weekly vom 17.2.2006 haben uns zahlreiche Zuschriften erreicht, in denen es um die Verwendung eines flexiblen Dateiauswahl-Dialogs anstelle der festen Zuweisung eines Dateinamens ging. Wir möchten Ihnen daher in einem zweiteiligen Tipp der Woche fertige Lösungen für die drei wichtigsten immer wieder benötigten Auswahldialoge vorstellen. Beginnen wir mit einigen Grundlagen: Während Sie in Word oder Excel die dort vorhandenen Dialoge zum Öffnen oder Speichern von Dateien in Ihren VBA-Lösungen einsetzen können, ist das in Access nicht bzw. erst ab Access 2002/XP mit dem Objekt "FileDialogs" möglich. "FileDialogs" erlaubt zwar auch die Anzeige eines Dialogs zur Auswahl eines Ordners, aber dazu wird ein modifizierter Dateiauswahl-Dialog verwendet, der nicht dem unter Windows gewohnten "Ordner öffnen"-Dialog entspricht. Wir beginnen deshalb mit einem dem Windows-Pendant entsprechenden "Ordner öffnen"-Dialog, den Sie in allen Access-Versionen einsetzen können, sowie dem "FileDialogs"-Gegenstück, das nur in Access 2003 und 2002/XP genutzt werden kann. Im zweiten Teil folgen dann die Datei-Dialoge "OpenFile()" und "SaveFile()" in Varianten für Access 2003 und 2002/XP bzw. Access 2000 und 97. Ab Windows 95 stehen dem Entwickler verschiedene API-Funktionen zur Vereinheitlichung der Benutzeroberfläche und der Benutzerführung zur Verfügung. So soll sichergestellt werden, dass beispielsweise Dateien oder Verzeichnisse über immer gleiche Auswahl-Dialoge gesucht oder Farben, Schriften und Drucker über immer gleiche Optionen-Dialoge eingestellt werden können, ohne dass der Anwender sich für jede Anwendung in einen anderen Dialog einarbeiten muss. Für die Auswahl von Verzeichnissen ist hier die Funktion "SHBrowseForFolder()" zuständig. Der Zusatz "SH" macht eine so genannte "Shell-Funktion", also eine Benutzeroberflächen-Funktion, kenntlich. "SHBrowseForFolder" lässt sich leider nicht direkt aufrufen, da die Funktion mit einer speziellen Datenstruktur arbeitet, die vor dem Aufruf initialisiert werden muss. Das erfolgt in der Funktion "OpenFolder()", die Sie zunächst samt den notwendigen Deklarationen in ein Modul "modOpenFolder" kopieren: rivate Type BROWSEINFO hwndOwner As Long pidlRoot As Long lpszDisplayName As String lpszTitle As String ulFlags As Long BFFCALLBACK As Long LPARAM As Long iImage As Integer End Type Private Declare Function SHBrowseForFolder Lib _ "shell32.dll" (FolderStruct As BROWSEINFO) As Long Private Declare Function SHGetPathFromIDList Lib _ "shell32.dll" (ByVal LPCITEMIDLIST As Long, _ ByVal lpStr As String) As Long Function OpenFolder(strMsg) As String Dim BI As BROWSEINFO Dim R As Long Dim lpBuffer As String * 254 With BI .hwndOwner = 0 .lpszDisplayName = lpBuffer .lpszTitle = strMsg .ulFlags = 0 .BFFCALLBACK = 0 .LPARAM = 0 End With R = SHBrowseForFolder(BI) R = SHGetPathFromIDList(R, lpBuffer) OpenFolder = Left$(lpBuffer, InStr(lpBuffer, _ Chr(0)) - 1) End Function Mit der Zuweisung ".lpszDisplayName = lpBuffer" setzen wir zunächst den Puffer für die Rückmeldung des gewählten Verzeichnisnamens. Nach dem Aufruf wird auf diesem Weg nur der Name des gewählten Verzeichnisses, nicht aber dessen kompletter Pfad geliefert! Wenn also beispielsweise "Z:\Test\Daten\Access" ausgewählt wird, enthält dieses Feld anschließend nur "Access". Wir werten diese Rückmeldung nicht weiter aus, sondern geben "lpBuffer" quasi nur als "Dummy-Variable" an. Anschließend setzen wir mit ".lpszTitle = strMsg" den Text, der als Parameter "strMsg" übergeben wurde und der im Dialog als Hinweis für den Anwender angezeigt werden soll. Der Aufruf per "R = SHBrowseForFolder(BI)" sorgt dann für die Anzeige des Dialoges, wobei die eben initialisierte Datenstruktur als Parameter übergeben wird. Beim Funktionsergebnis in "R" handelt sich um eine spezielle Struktur, die über eine Zusatzfunktion "SHGetPathFromIDList()" ausgewertet werden muss. Diese Struktur ist zwar als "String" deklariert, es handelt sich aber um eine kompliziert aufgebaute "ItemList", für die es in VBA keinen entsprechenden Datentyp gibt. Die Funktion "SHGetPathFromIDList()" extrahiert aus der über "R" referenzierten Liste nun den reinen Pfad des ausgewählten Verzeichnisses und legt diesen in "lpBuffer" ab. Beim Ergebnis handelt es sich um einen "C"-String, also eine mit "0" terminierte Zeichenkette, so dass eine letzte Anweisung "OpenFolder = Left$(lpBuffer, InStr(lpBuffer, Chr(0)) - 1)" alle Zeichen links vom "0"-Byte der Zeichenkette extrahiert. Das Ergebnis ist dann wie bereits erwähnt, eine leere Zeichenkette nach einem Klick auf Abbrechen oder der Pfad als VBA-String. In Ihren VBA-Routinen können Sie die Funktion "OpenFolder()" dann zum Beispiel wie folgt nutzen: strVerzeichnis = _ OpenFolder("Bitte Export-Verzeichnis wählen:") If strVerzeichnis = "" Then Exit Sub 'Nichst gewählt... Else 'Hier Ihre Verarbeitung... End If Das Ergebnis der Funktion "OpenFolder()" ist entweder eine leere Zeichenkette "", wenn auf Abbrechen geklickt wurde oder der komplette Pfad des ausgewählten Verzeichnisses wie zum Beispiel "Z:\Test\Datenaustausch\Excel". Das Ergebnis wird immer ohne abschließenden Backslash geliefert! Mit Office 2002 hat Microsoft wie bereits erwähnt das Objekt "FileDialogs" eingeführt, das ohne externe API-Funktionen und komplexe Datenstrukturen auskommt und zudem komfortabler zu handhaben ist. Es sei aber nochmals angemerkt, dass Sie die oben gezeigte Funktion "OpenFolder()" auch problemlos mit Access 2003 und 2002/XP einsetzen können! Die auf "FileDialogs" basierende Funktion "OpenFolder()" ist wie folgt aufgebaut: Function OpenFolder(strMsg As String, _ strPath As String) As String Dim fDlg As FileDialog Set fDlg = _ Application.FileDialog(msoFileDialogFolderPicker) With fDlg .ButtonName = "Export" .Title = strMsg If Right$(strPath, 1) <> "\" Then _ strPath = strPath + "\" End If .InitialFileName = strPath .Show If .SelectedItems.Count > 0 Then OpenFolder = .SelectedItems(1) Else OpenFolder = "" End If End With End Function Zunächst muss eine Objektvariable "fDlg" vom Typ "FileDialog" über "Set fDlg=..." initialisiert werden, um den weiteren Zugriff darüber zu ermöglichen. Über die Eigenschaften "Title" und "ButtonName" können dann individuelle Bezeichnungen für den Dialog und die Ok-Schaltfläche zugeordnet werden. Über "InitialFileName" können Sie ein bestimmtes Verzeichnis vorgeben. Der Aufruf der Methode "Show" zeigt den Dialog dann an. Das Ergebnis ist eine Auflistung "SelectedItems", über deren Eigenschaft "Count" sich zunächst abfragen lässt, ob etwas ausgewählt oder ob auf Abbrechen (Count=0) geklickt wurde. Das Auslesen des ersten Eintrages der Auflistung liefert dann den kompletten Pfad des gewählten Verzeichnisses bzw. wenn "Count = 0" zutrifft, eine leere Zeichenkette als Ergebnis. In Ihren VBA-Routinen können Sie die Funktion dann zum Beispiel wie folgt nutzen: strVerzeichnis = _ OpenFolder("Bitte Export-Verzeichnis wählen:", _ "Z:\Test\Daten") If strVerzeichnis = "" Then Exit Sub 'Nichts zu tun... Else 'Hier Ihre Verarbeitung... End If War dieser Tipp für Sie hilfreich? Klicken Sie bitte hier!
Haben Sie Fragen zu Access 2003, 2002/XP, 2000 und 97? Dann wenden Sie sich mit einer genauen Problembeschreibung (bitte keine Datenbanken schicken!) an: access-helpline@smarttools.de Unser Redaktionsteam wählt in jeder Ausgabe eine oder mehrere Fragen aus und beantwortet Sie an dieser Stelle im Newsletter. Recordet-Initialisierung schlägt fehl Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Aus dem Access-Tipp der Woche "Suchfunktion für alle Felder in einem Formular" habe ich die Funktion "SearchAllFieldsFilter()" übernommen. In einem von mir geschriebenen Programm funktioniert sie ausgezeichnet, in einem anderen Programm jedoch nicht. Ich erhalte immer folgende Fehlermeldung: "Laufzeitfehler '13': Typen unverträglich" Wenn ich dann auf Debuggen klicke ist die folgende Zeile gelb markiert: Set rs = CurrentDb.OpenRecordset(strTable) L. Pawlik ANTWORT: Die Funktion "SearchAllFieldsFilter()" wurde für DAO entwickelt und setzt einen Verweis auf "Microsoft DAO 3.x Object Library" voraus. In einer Access 97-Datenbank gibt es keine Probleme, da dort standardmäßig ein Verweis auf DAO gesetzt ist. In einer Access 2003/2002/2000-Datenbank ist jedoch standardmäßig ein Verweis auf "Microsoft ADO 2.x Object Library" gesetzt. "Dim rs as Recordset" deklariert dann einen ADO-Recordset, während "CurrentDb.OpenRecordset" einen DAO-Recordset liefert - deswegen die Meldung "Typen unverträglich". Um das Problem zu lösen, wählen Sie Extras-Verweise an, deaktivieren Sie die Referenz für ADO und aktivieren Sie die Referenz auf DAO. Wenn Sie beide Datenzugriffsmethoden in der Datenbank benötigen, ändern Sie die Deklaration des Recordsets wie folgt: Dim rs As DAO.Recordset Ähnliche Deklarationen in den Modulen/Prozeduren/Funktionen sind entsprechend anzupassen, indem Sie ein "DAO." Oder "ADO." davorsetzen. Datenbank-Problem 'Datei konnte nicht gesperrt werden' Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Beim Öffnen einer Access-Datenbank erscheint folgende Meldung: Microsoft Access: Datei konnte nicht gesperrt werden. Die Datenbank kann somit nicht geöffnet und genutzt werden. Sämtliche Berechtigungen sind jedoch für den Mitarbeiter vorhanden. Die Datenbank liegt auf einem Windows 2003- Server. Der Mitarbeiter hat Windows XP und Office XP/Pro mit Access 2002 (10.6501.6626-SP3). Andere Mitarbeiter können problemlos mit der Datenbank arbeiten. U. Holder ANTWORT: Bezüglich der Zugriffsrechte ist zu beachten, dass Schreib- und Leserechte alleine nicht ausreichen. Access verwaltet im Verzeichnis der Datenbank eine LDB-Datei, in der unter anderem festgehalten wird, welche Anwender mit der Datenbank arbeiten. Diese Datei wird bei Bedarf angelegt und wieder gelöscht, wenn sie nicht mehr benötigt wird. Der Anwender muss also auch die Rechte zum Anlegen und Löschen von Dateien haben. Eine andere Ursache könnte der Einsatz eines Virenscanners sein, der Dateien im Hintergrund scannt und sie dabei eventuell blockiert. In diesem Fall kann Access den aktuellen Anwender nicht in die LDB-Datei eintragen. Der Virenscanner ist dann so einzustellen, dass er LDB-Dateien ignoriert.
Datensatz per Schaltfläche löschen Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Ich möchte gerne in meinem Formular den aktuellen Datensatz per Schaltfläche nach einer Sicherheitsabfrage löschen. Welche VBA-Anweisungen sind dazu notwendig? P. Arendts ANTWORT: Dazu verwenden Sie eine Ereignisprozedur "Beim Klicken" wie die folgende: Private Sub btnDel_Click() Dim Taste& Taste = MsgBox("Datensatz wirklich löschen?", _ vbYesNo + vbQuestion, "Löschen?") If Taste = vbYes Then DoCmd.RunCommand acCmdDeleteRecord End If End Sub War die Helpline für Sie hilfreich? Klicken Sie bitte hier!
Outlook-Tipps kostenlos per E-Mail SmartTools Outlook Weekly bietet jede Woche Tipps, aktuelle Infos und Download-Links für Outlook 2003, 2002/XP, 2000 und 97/98:
Um SmartTools Access Weekly abzubestellen, senden Sie einfach das Kommando "unsubscribe" an die Adresse access-weekly-html-request@smarttools.de Bitte beachten Sie, daß das Kommando im Nachrichtentext stehen muß (nicht im Betreff) und Sie keine Mail im HTML-Format senden dürfen. Weitere Informationen zur Verwaltung der Liste erhalten Sie mit dem Kommando "help" an dieselbe Adresse.
|