Access-News & Downloads
Access-Helpline
Spotlight: Access-Datenbanken optimieren, analysieren und dokumentieren Stellen Sie sicher, dass jede Datenbank fehlerfrei und mit optimaler Geschwindigkeit läuft! Der Total Access Analyzer prüft jedes einzelne Objekt in Ihrer Datenbank und liefert Ihnen in übersichtlicher und komfortabler Form:
Mehr als 300 Berichte, Analysen und grafische Darstellungen helfen Ihnen, nicht nur die vorhandenen Objekte zu dokumentieren, sondern auch alle Zusammenhänge und Beziehungen sofort zu erfassen. Fast nebenbei kommen Sie Fehlern sowie ungenutzten Objekten auf die Spur und erhalten gezielte Tipps zur Optimierung Ihrer Anwendung. Weitere Informationen finden Sie unter: Total Access Analyzer für Access 2003 Total Access Analyzer für Access 2002/XP Total Access Analyzer für Access 2000 Download-Tipp: Mausrad in Access-Formularen unterdrücken Versionen: Access 2003, 2002/XP, 2000 und 97 Wird bei der Arbeit in Formularen aus Versehen das Mausrad betätigt, führt Access unkontrollierbare Datensatzwechsel aus. Neue oder geänderte Datensätze können dadurch unvollständig gespeichert werden oder Ihre Eingaben und Änderungen erfolgen in falschen Datensätzen. Leider lässt sich die Abfrage des Mausrades in Access weder ausschalten noch mit den vorhandenen Funktionen oder über Ereignisprozeduren unterdrücken, so dass viele Entwickler und Datenbank-Administratoren die Mausrad-Funktion in letzter Konsequenz über die Systemsteuerung ausschalten und es somit in Windows und allen Windows-Anwendungen deaktivieren. Unsere kostenlose DLL löst das Problem: die für ein Access-Formular ausgelösten Ereignisse werden auf Systemebene gefiltert und das Ereignis "Mausrad" nur für das betreffende Formular eliminiert. In Windows, anderen Anwendungen oder auch anderen Access-Fenstern kann das Mausrad dann trotzdem wie gewohnt genutzt werden. Die DLL samt ausführlicher Techinfo zur Einbindung in Ihre Datenbanken finden Sie unter:
News: Neuer Hotfix für Access 2002/XP Microsoft hat einen Bugfix für Access 2002/XP bereitgestellt. Unter der folgenden Adresse finden Sie weitere Informationen. Bitte beachten Sie dabei, dass ein direkter Download nicht angeboten wird; Sie müssen den einen Hotfix explizit beim Support anfordern, wenn Sie von einem der beschriebenen Probleme betroffen sind: Access 2002 hotfix package vom 2. November 2005 Behobene Probleme: Unter bestimmten Voraussetzungen werden Änderungen in einem Unterformular unbemerkt gespeichert. Waren die News & Downloads hilfreich für Sie?
Verzeichnisse und Dateien per VBA auslesen und verarbeiten, Teil 2 Versionen: Access 2003, 2002/XP, 2000 und 97 Im ersten Teil dieses Tipps der Woche hatten wir erläutert, wie alle Dateien (*.*) oder bestimmte Dateigruppen (*.mdb) aus einem Verzeichnis ausgelesen (Funktion "Dir()") und in einer Tabelle gespeichert werden. Dabei wurden neben Pfad/Dateinamen auch Informationen zur Dateigröße (Funktion "FileLen()") und zum letzten Änderungsdatum (Funktion "FileDateTime()") erfasst. Die so gewonnenen Daten lassen sich nun beispielsweise für die Anzeige in einer Dateiauswahl heranziehen. Dazu legen Sie ein einem Formular ein Listenfeld (Name= "lstDatAusw") an und stellen dessen Eigenschaft "Datensatzherkunft" auf die folgende SQL-Anweisung ein: select Dateiname from DateiInfos order by Dateiname; Diese Dateiauswahl kann nun zum Beispiel dazu genutzt werden, den Anwender eine Excel-Arbeitsmappe für den Import auswählen zu lassen. Dazu legen Sie unter der Liste eine Schaltfläche Importieren (Name= btnImport) an und geben für deren Ereignisprozedur "Beim Klicken" die folgenden Anweisungen ein: Private Sub btnImport_Click() Dim strFName As String strFName = Me.lstDatAusw & "" If strFName = "" Then Beep Me.lstDatAusw.SetFocus Exit Sub End If DoCmd.TransferSpreadsheet _ acImport, _ acSpreadsheetTypeExcel97, _ "ExcelImport", _ strFName End Sub Diese Anweisungen prüfen zunächst, ob in der Liste ein Eintrag ausgewählt ist. Wenn nicht, wird ein akustischer Hinweis ausgegeben, die Liste aktiviert und die Routine verlassen. Andernfalls erfolgt der Import (acImport) der ausgewählten Arbeitsmappe (strFName, acSpreadsheetTypeExcel97) per "DoCmd.TransferSpreadsheet" in die Tabelle "ExcelImport". Möchten Sie in der Dateiauswahl außer Pfad/Dateinamen noch Infos zur Größe und dem Änderungsdatum anzeigen, stellen Sie die Liste einfach auf mehrspaltig ein ("Spaltenanzahl" = 3), setzen die gewünschten Breiten der Spalten (zum Beispiel "Spaltenbreiten" = "5cm;2cm;2cm") und ändern "Datensatzherkunft" auf die folgende SQL-Anweisung: select * from DateiInfos order by Dateiname; Um eine solche Dateiauswahl zu realisieren, müssen die Dateiinfos zunächst in eine Tabelle eingelesen werden. Um diesen Zwischenschritt zu vermeiden, können Sie eine so genannte "CallBack-Funktion" einsetzen und darüber die Dateiauswahl, sprich die Liste "lstDatAusw", füllen lassen. Die Callback-Funktion besteht aus zwei Teilen, einer Funktion "DatAuswAufbauen", die Pfad/Dateinamen zunächst in ein Array einliest und der eigentlichen CallBack-Funktion "DatAuswSetzen", die der Liste über deren Eigenschaft "Herkunftstyp" zugeordnet wird und die die Inhalte in die Liste überträgt. Geben Sie zunächst im allgemeinen Teil des Formulars die folgenden Deklarationen und Funktionen ein: Dim arrDatAusw() As String Dim intDatAusw As Integer Function DatAuswAufbauen() Dim strPath As String, strFName As String Dim R As Variant DatAuswAufbauen = False Erase arrDatAusw() intDatAusw = 0 strPath = "Z:\Test\" strFName = Dir(strPath & "*.xls") While strFName <> "" intDatAusw = intDatAusw + 1 ReDim Preserve arrDatAusw(intDatAusw) arrDatAusw(intDatAusw) = strPath & strFName strFName = Dir() Wend DatAuswAufbauen = True End Function Function DatAuswSetzen(Feld As Control, _ ID As Variant, _ Zeile As Variant, _ Spalte As Variant, _ Code As Variant) As Variant On Error Resume Next Select Case Code Case acLBInitialize ' Initialisieren. DatAuswSetzen = DatAuswAufbauen() Case acLBOpen ' Öffne mit eindeutiger ID DatAuswSetzen = Timer Case acLBGetRowCount 'Wieviel Zeilen hat die Liste? DatAuswSetzen = intDatAusw Case acLBGetColumnCount 'Wieviel Spalten? DatAuswSetzen = 1 Case acLBGetColumnWidth ' Spaltenbreite, hier Standard DatAuswSetzen = -1 Case acLBGetValue 'Daten für die Liste liefern DatAuswSetzen = arrDatAusw(Zeile + 1) End Select End Function Stellen Sie dann die Eigenschaft "Herkunftstyp" der Liste auf "DatAuswSetzen" ein und löschen Sie eventuell vorhandene Inhalte in "Datensatzherkunft". Wenn Sie das Formular nun einmal anzeigen lassen, sehen Sie eine Dateiauswahl, die ohne Umwege über eine Tabelle die Dateien eines Verzeichnisses anzeigt. Und so funktioniert das Ganze: Wenn das Formular angezeigt wird, ruft Access für das Füllen der Liste zunächst "DatAuswSetzen" mit dem Parameter "acLBInitialize" auf, so dass "DatAuswAufbauen" aufgerufen wird und die Dateien einliest. Der zweite und dritte Aufruf mit den Parametern "acLBGetRowCount" und "acLBGetColumnCount" ermittelt dann die Anzahl Einträge für die Liste, die der zuvor in "intDatAusw" festgehaltenen Anzahl Dateien entspricht und die Anzahl Spalten, die hier "1" ist. Weitere Aufrufe mit "acLBGetValue" liefern dann die Inhalte für die einzelnen Einträge der Liste aus dem Array "arrDatAusw".
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. Netzwerk-Domain-Namen ermitteln Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Wir setzen Datenbanken ein, die im Netzwerk über verschiedene Server und Domains verteilt sind. Für die Vereinfachung von Supportanfragen möchten wir gerne im Formular anzeigen, in welcher Domain die aktuelle Datenbank betrieben wird. Können Sie uns einen Tipp geben, wie sich diese Information ermitteln lässt? T. Carstensen ANTWORT: Dazu nutzen Sie die API-Funktion "GetNetworkParams()", die unter anderem den Namen der Domain liefert, in der der aktuelle Anwender angemeldet ist. Geben Sie zunächst in einem neuen oder vorhandenen Modul die folgenden Deklarationen und Funktionen ein: Private Const ERROR_SUCCESS = 0 Private Const MAX_DOMAIN_NAME_LEN = 128 Private Const MAX_HOSTNAME_LEN = 128 Private Const MAX_SCOPE_ID_LEN = 256 Private Type IP_ADDRESS_STRING IpAddr(0 To 15) As Byte End Type Private Type IP_MASK_STRING IpMask(0 To 15) As Byte End Type Private Type IP_ADDR_STRING dwNext As Long IpAddress As IP_ADDRESS_STRING IpMask As IP_MASK_STRING dwContext As Long End Type Private Type FIXED_INFO HostName(0 To (MAX_HOSTNAME_LEN + 3)) As Byte DomainName(0 To (MAX_DOMAIN_NAME_LEN + 3)) As Byte CurrentDnsServer As IP_ADDR_STRING DnsServerList As IP_ADDR_STRING NodeType As Long ScopeId(0 To (MAX_SCOPE_ID_LEN + 3)) As Byte EnableRouting As Long EnableProxy As Long EnableDns As Long End Type Private Declare Function GetNetworkParams _ Lib "iphlpapi.dll" _ (pFixedInfo As Any, _ pOutBufLen As Long) As Long Private Declare Sub CopyMemory _ Lib "kernel32" Alias "RtlMoveMemory" _ (hpvDest As Any, hpvSource As Any, _ ByVal cbCopy As Long) Function NetworkDomainName() As String Dim Buffer() As Byte Dim cbRequired As Long Dim FI As FIXED_INFO Dim strResult strResult = "???" GetNetworkParams 0&, cbRequired If cbRequired > 0 Then ReDim Buffer(0 To cbRequired - 1) As Byte If GetNetworkParams(Buffer(0), cbRequired) = _ ERROR_SUCCESS Then CopyMemory FI, ByVal VarPtr(Buffer(0)), LenB(FI) strResult = TrimNull(StrConv(FI.DomainName, _ vbUnicode)) If strResult = "" Then strResult = "Keine Domainanmeldung" End If NetworkDomainName = strResult End If 'If GetNetworkParams End If 'If cbRequired > 0 End Function Legen Sie dann im Formular ein ungebundenes Textfeld an und geben Sie in der Eigenschaft "Steuerelementeinhalt" den folgenden Ausdruck ein: =NetworkDomainName() Access-Logo beim Start unterdrücken Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Ich habe eine Datenbankanwendung entwickelt, die bei Kunden zum Einsatz kommt. Beim Start soll nicht unbedingt ersichtlich sein, dass die Lösung auf Access basiert. Kann man das standardmäßig beim Starten von Access angezeigte Logo irgendwie unterdrücken? K. Frahm ANTWORT: Dazu können Sie ein Feature nutzen, dass normalerweise dazu dient, ein eigenes Logo anzuzeigen: Befindet sich im Verzeichnis der Datenbank eine Bitmapdatei <NamDerDatenbank>.BMP, so wird anstelle des Access-Logos diese Bitmap angezeigt. Legt man nun diese Bitmap in der Größe 1*1 oder 2*2 Pixel an, unterdrückt Access die Anzeige des Logos, zeigt aber die Bitmap aufgrund der zu geringen Größe nicht an:
Öffnen von Datenbanken verhindern Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Ich öffne verschiedene Datenbanken über Verknüpfungen auf meinem Desktop. Wenn ich nun einmal kurz den Arbeitsplatz verlasse, können Kollegen die Datenbanken öffnen. Das möchte ich irgendwie verhindern, ich habe aber auch keine Lust, selbst jedes Mal beim Öffnen einer der Datenbanken ein Kennwort eingeben zu müssen. Fällt Ihnen dazu etwas ein? E. Pohl ANTWORT: Nutzen Sie folgenden Trick:
(ByVal nVirtKey As Long) As Integer Function CtrlKey() As Boolean CtrlKey = Abs(GetKeyState(17) < 0) End Function
Optionen: Alles speichern
"D:\Daten\Adressen.mdb" /x ExitNow
War die Helpline für Sie hilfreich? Klicken Sie bitte hier!
Office-Tipps kostenlos per E-Mail Der SmartTools Office Insider ist Ihr monatlicher News-Service für Microsoft Office. Hier finden Sie aktuelle Informationen zu Access, Excel, Word & Co, eine Fülle von Download-Links sowie detaillierte Tipps zu neuen Patches und Updates. So verpassen Sie nichts, was Sie unbedingt zu Microsoft Office wissen müssen.
Klicken Sie hier für Ihr kostenloses Abo!
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.
|