|
PC-Tipps Access
Abfragen ausdrucken und speichern Wenn man Abfragen mit Access in verschiedenen Schriften und Seitenformaten ausdruckt, werden Formatierungen wie Schriftgrößen und Seitenränder nicht dauerhaft gespeichert. Access speichert keine Formatangaben wie Schrift- oder Seitengrößen für Abfragen. Deshalb sollte man für die Ausgabe der Abfrage auf dem Drucker Berichte anlegen, die jedes beliebige Schrift- und Seitenformat nutzen können. Aktivieren Sie dazu das Datenbank-Fenster mit der Taste [F11], markieren Sie die entsprechende Abfrage und rufen anschließend den Befehl Einfügen Bericht auf. Access startet daraufhin den Assistenten, der Ihnen bereits zahlreiche Layout-Möglichkeiten anbietet. Um das Seitenlayout zu verändern, öffnen Sie den Bericht im Entwurfsmodus und rufen den Befehl Datei Seite einrichten auf. Im gleichnamigen Dialog können Sie die Seitenränder und die Seitenausrichtung (Hoch- oder Querformat) für den Bericht festlegen. Schriftart und -größe definieren Sie beim Berichts-Design für jedes einzelne Feld der Abfrage. ActiveX-Fehler Access stürzt ab, sobald man Datenbanken mit Formularen startet. Gestaltet man ein Formular im Entwurfsmodus, meldet Access ActiveX-Komponente kann kein Objekt anlegen und crasht. Der Fehler tritt immer dann auf, wenn man eine MDB-Datei öffnet, die automatisch ein Formular startet. Wenn man anschließend mit VBA arbeitet und einen Assistenten öffnet, stürzt Access ab. Die Ursache für dieses Verhalten ist eine fehlerhafte Installation der Data Access Objects 3.5. Das Problem tritt nur auf, wenn die DAO350.DLL vor der Installation von Access bereits existierte, so dass die neue DLL nicht mehr registriert ist. Abhilfe: 'Start - Ausführen' aufrufen und das Kommando eintippen: Regsvr32.exe C:\progra~1\common~1\ micros~1\dao\dao350.dll Aussperrung rückgängig machen Ich habe einer Datenbank ein Hauptmenü hinzugefügt, das beim Öffnen der MDB-Datei automatisch erscheinen soll. Nachdem ich mit dem Befehl Extras Start das entsprechende Formular aktiviert und alle anderen Menüs und Symbolleisten ausgeschaltet habe, komme ich nun selbst nicht mehr an die Objekte heran. Sobald ich die Datenbank öffne, verschwinden alle Menüs und Symbolleisten. Mit dem Befehl Extras Start kann man Menüs und Symbolleisten ausschalten, damit der Anwender keinen Schaden anrichtet. Access macht aber keinen Unterschied zwischen Anwender und Entwickler, so dass es wie in Ihrem Fall durchaus vorkommt, dass sich die Programmierer selbst aussperren. Für diesen Fall hat Microsoft eine Hintertür eingebaut: Wenn Sie beim Aufrufen der MDB-Datei die Umschalt-Taste gedrückt halten, öffnet Access die Datenbank ganz normal. Nun haben Sie wieder kompletten Zugriff auf alle Funktionen und können entsprechende Veränderungen vornehmen. Automatisches Erfassungs- und Änderungsdatum in Formularen Problem: Sie möchten in einem Datenbank-Formular festhalten, wann ein Datensatz angelegt und wann er zuletzt geändert wurde. Das ist prinzipiell kein Problem, denn Sie müssen nur ein Datumsfeld einfügen, das bei jeder Änderung des Datensatzes aktualisiert wird. Die Lösung sind zwei getrennte Felder für Erfassungs- und Änderungsdatum und eine kleine Ereignisprozedur. Legen Sie in einem Formular, in dem Sie diese beiden Daten erfassen wollen, zunächst die Felder Erfdat für das Erfassungsdatum und AendDat für das Änderungsdatum an. Mit einem Klick auf Entwurf öffnen Sie dieses Formular in der Entwurfsansicht und wählen nach einem rechten Mausklick auf die quadratische Fläche in der linken oberen Ecke des Formulars Eigenschaften. Wechseln Sie zum Register Ereignis und wählen Sie im Feld Vor Aktualisierung den Eintrag Ereignisprozedur. Über einen Mausklick auf die kleine Schaltfläche mit den drei Punkten gelangen Sie in den Editor, in dem Sie das unten abgedruckte Listing eintippen. Das Makro überprüft, ob es sich um einen neuen Datensatz handelt. Ist das der Fall ist, wird das aktuelle Datum in das Feld ErfDat eingetragen. Andernfalls erscheint es in AendDat. Speichern Sie anschließend das Formular und wechseln Sie in die Formularansicht. Wenn Sie jetzt einen neuen Datensatz anlegen, erscheint das aktuelle Datum im Feld mit dem Erfassungsdatum, ändern Sie einen bestehenden Datensatz, wird das Feld mit dem Datum der letzten Änderung aktualisiert. Makrolisting:Private Sub Form_BeforeUpdate(Cancel As Integer) If Me.NewRecord = True Then Me!ErfDat = Date Else Me!AendDat = Date End If End Sub Autowert importieren Ich habe in Access eine Tabelle mit dem Feld Kundennummer vom Feld-Datentyp Zahl importiert. Da dieses Feld der Primärschlüssel ist, möchte ich den Datentyp auf Autowert ändern. Wenn ich das auf normalem Wege in der Entwurfsansicht der Tabelle versuche, erhalte ich die Fehlermeldung: Sobald Sie irgendwelche Daten in eine Tabelle eingegeben haben, ist es Ihnen für keines der Felder mehr möglich, den Datentyp in Autowert zu ändern. Dies gilt selbst dann, wenn Sie bis dahin noch keine Daten in das Feld eingegeben haben. Wie kann ich dieses Manko umgehen? Markieren Sie zuerst die entsprechende Tabelle im Datenbankfenster. Wählen Sie die Befehle Bearbeiten - Kopieren und dann Bearbeiten - Einfügen aus. Geben Sie im folgenden Dialogfeld Tabellenname einen neuen Namen (beispielsweise Kopie) für die Kopie der Tabelle ein. Achten Sie darauf, dass das Kontrollkästchen Nur Struktur in diesem Dialog aktiviert ist, und bestätigen Sie den Dialog. Öffnen Sie die neue Tabelle Kopie in der Entwurfsansicht. Ändern Sie den Datentyp des Feldes Kundennummer auf den Typ Autowert. Da die Tabelle keine Daten enthält, ist das nun möglich. Um die Daten der Ausgangstabelle in der neuen Tabelle anzuhängen, führen Sie erneut den Menübefehl Bearbeiten - Einfügen aus. Als Namen für die Tabelle geben Sie wieder Kopie ein. Als zusätzliche Option in diesem Dialog aktivieren Sie diesmal Daten an vorhandene Tabelle anfügen und bestätigen den Dialog. Wenn alles bisher einwandfrei funktioniert hat, können Sie die Ursprungstabelle löschen, indem Sie im Datenbankfenster die Tabelle markieren und den Menüpunkt Bearbeiten - Löschen ausführen. Benennen Sie zum Schluss die neue Tabelle auf den Namen der Ursprungstabelle um, indem Sie sie im Datenbankfenster markieren und den Befehl Datei - Objekt umbenennen aufrufen. Im folgenden Dialog geben Sie dann den Namen der Ursprungstabelle ein und klicken auf den Schalter OK. Behandelt Abfragen ß und ss gleich Befinden sich in einer Datenbank z.B. die Namen "Aßmann" und "Assmann", kann Access in Abfragen keinen Unterschied zwischen den beiden Namen feststellen und gaukelt deshalb vor, es handle sich um dieselben Namen. Auf die Suche nach einem der beiden Namen präsentiert Access in einem Formular oder einem Bericht unweigerlich beide Namen. Das ist z.B. dann besonders lästig, wenn man anhand eines Berichtes die Umsätze des Kunden Aßmann feststellen will. Access addiert in diesem Fall die Umsätze von Assmann automatisch dazu. Eine Längenprüfung behebt jedoch dieses Problem. Wenn Access schon die Buchstaben ß und ss nicht unterscheiden kann, die unterschiedliche Länge der Wörter erkennt es dennoch. Ergänzen Sie deshalb in der Abfrage, die als Grundlage für das Formular oder den Bericht dient, einen Bereich Länge(Name). Sollte der Feldname für den Kundennamen etwa "Nachname" oder "Firma" lauten, muss der Eintrag entsprechend geändert werden. Setzen Sie dann in die Zeile Kriterien folgende Zeichenfolge: Länge([Forms]![Formularname].[gesuchter_Name]). "Formularname" und "gesuchter_Name" stehen dabei stellvertretend für Ihren Formularnamen und den Namen des Suchfeldes. Damit Access nach dem Namen suchen kann, müssen auch in der Spalte mit dem Namen des Kunden folgende Kriterien in der entsprechenden Zeile ergänzt werden: [Forms]![Formularname].[gesuchter_Name]. Durch die Längenprüfung gibt Access in Berichten und Formularen, die auf dieser Abfrage aufbauen, nur noch die wirklich gesuchten Namen aus. Beliebige Anzahl von Etiketten pro Empfänger drucken Beim Ausdruck von Adressenetiketten kommt es häufig vor, dass für einige Empfänger gleich mehrere Etiketten benötigt werden. Damit Sie diese Etiketten nicht mühsam kopieren oder mehrmals ausdrucken müssen, lohnt es sich, Ihre Datenbank für den Ausdruck beliebig vieler Etiketten pro Empfänger einzurichten. Dies gelingt mit einem zusätzlichen Feld in der Tabelle mit den Adressen und einer Ereignisprozedur. Ergänzen Sie zunächst die Tabelle, die Sie für den Etikettendruck verwenden wollen, um ein numerisches Feld Etiketten. Hier geben Sie ein, wie viele zusätzliche Etiketten jeder Empfänger erhält. Bleibt das Feld leer, druckt Access nur ein Etikett aus. Wechseln Sie dann in das Register Berichte des Datenbankfensters und klicken Sie auf Neu. In der daraufhin erscheinenden Dialogbox markieren Sie den Etikettenassistent und wählen die Tabelle aus, die Sie um das Feld Etiketten ergänzt haben. Nach einem Klick auf OK suchen Sie das von Ihnen verwendete Etikettenfabrikat aus und geben in der übernächsten Dialogbox an, wie die Felder auf dem Etikett erscheinen sollen. Fügen Sie unter die Zeilen mit der Adresse eine leere Zeile ein und platzieren Sie dort das Feld Etiketten. In der nächsten Dialogbox entscheiden Sie, nach welchem Feld die Datensätze sortiert werden müssen. Klicken Sie nochmals auf Weiter und aktivieren Sie die Option Den Etikettenentwurf verändern, bevor Sie ihn Fertigstellen. Damit die Zahlen im Feld Etiketten nicht auf den Etiketten erscheinen, klicken Sie das entsprechende Feld mit der rechten Maustaste an und wählen Eigenschaften. Im Register Format setzen Sie Sichtbar auf Nein und klicken dann auf den grauen Balken Detailbereich, um dessen Eigenschaften zu verändern. Wechseln Sie in das Register Ereignis und wählen Sie unter Beim Drucken den Eintrag [Ereignisprozedur] aus. Ein Klick auf die Schaltfläche mit den drei Punkten bringt Sie in den Editor, in dem Sie das abgedruckte Makro eingeben können. Um das Ergebnis vor dem Ausdruck zu überprüfen, wechseln Sie anschließend in die Seitenansicht, und der Etikettendruck kann losgehen. Ereignisprozedur beim Drucken: Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer) Static Anzahl As Integer If Anzahl < Me!Etiketten Then Me.NextRecord = False Anzahl = Anzahl + 1 Else Anzahl = 0 End If End Sub Benutzerdefinierte Zähler In vielen Fällen leistet die AutoWert-Funktion von Access nützliche Dienste. Man kann z.B. Kundennummern automatisch vergeben, wobei der Zählerwert mit jedem neuen Datensatz jeweils um 1 hochgezählt wird. Es gibt allerdings auch Situationen, in denen man einen Zähler in anderen Schrittweiten vergeben möchte. Das wird von Access standardmäßig nicht unterstützt. Lösung: Bei der Auslösung des Ereignisses "BeforeInsert" (Bei der ersten Eingabe in einen neuen Datensatz) wird eine VBA-Funktion aufgerufen, die aus einer vorher eingerichteten Tabelle den nächsten verfügbaren Zähler ausliest, in das gewünschte Feld einträgt und anschließend den neuen Zählerwert wieder zurückschreibt. Um diese Technik an einem kleinen Beispiel auszuprobieren, gehen Sie folgendermaßen vor: Eine neue Datenbank erstellen und eine neue Tabelle mit dem Namen "Artikel" anlegen. Es bietet sich an, zu diesem Zweck die gleichnamige Tabelle aus der Beispieldatenbank NORDWIND.MDB zu importieren. Wenn man diese Möglichkeit nicht nutzen will, muss man darauf achten, dass die Tabelle ein Feld mit dem Namen "Artikel-Nr" enthält. Dann eine neue Tabelle "tblZaehler" anlegen, die nur ein einziges Feld mit dem Namen "NaechsterZaehler" enthält. Dieses Feld als Primärschlüssel definieren und "10000" als Wert für den nächsten zu vergebenden Zähler festlegen. Ein Formular "frmArtikel" auf Basis der Tabelle "Artikel" erstellen. Für den Test genügt es, wenn man das Feld "Artikel-Nr" und "Artikelname" übernimmt. Für das Feld "Artikel-Nr" die Eigenschaften "Aktiviert" auf "Nein" und "Gesperrt" auf "Ja" setzen. Auf diese Weise verhindert man, dass die Nummer manuell geändert wird, denn die Vergabe soll ja automatisch erfolgen. Dann folgende Prozedur in das Klassenmodul des Formulars eingeben (bitte auf die unterschiedlichen Listings für Access 97 sowie Access 2000 / 2002 achten): für Access 97: Private Sub Form_BeforeInsert(Cancel As Integer) Dim lngZaehler As Long, db As Database, rst As Recordset On Error GoTo Ende Set db = CurrentDb() Set rst = db.OpenRecordset("tblZaehler") rst.Edit lngZaehler = rst("NaechsterZaehler") rst("NaechsterZaehler") = lngZaehler + 100 rst.Update Me.[Artikel-Nr] = lngZaehler Exit Sub Ende: MsgBox "Der folgende Fehler ist aufgetreten: " & Err.Number & " - " & _ Err.Description, vbCritical + vbOKOnly, "Benutzerdefinierter Zähler" End Sub für Access 2000 und 2002: Private Sub Form_BeforeInsert(Cancel As Integer) Dim lngZaehler As Long, rst As ADODB.Recordset On Error GoTo Ende Set rst = New ADODB.Recordset Set rst.ActiveConnection = CurrentProject.Connection rst.CursorType = adOpenKeyset rst.LockType = adLockOptimistic rst.Source = "tblZaehler" rst.Open lngZaehler = rst.Fields("NaechsterZaehler").Value rst("NaechsterZaehler") = lngZaehler + 100 rst.Update rst.Close Me.[Artikel-Nr] = lngZaehler Exit Sub Ende: MsgBox "Der folgende Fehler ist aufgetreten: " & Err.Number & " - " & _ Err.Description, vbCritical + vbOKOnly, "Benutzerdefinierter Zähler" End Sub Wenn man nun in die Formularansicht wechselt und einen neuen Datensatz anlegt, wird automatisch 10000 als Artikel-Nummer festgelegt, sobald man etwas in das Feld "Artikelname" eingibt. Im nächsten Datensatz ergibt sich dann entsprechend der Wert 10100, anschließend 10200, 10300 usw. Um benutzerdefinierte Zähler in eigenen Anwendungen zu nutzen, geht man folgendermaßen vor: Wie oben beschrieben eine Tabelle "tblZaehler" mit dem Feld "NaechsterZaehler" anlegen und den gewünschten Startwert eingeben. Klassenmodul des Formulars öffnen, in dem der Zähler vergeben werden soll und das zu Ihrer Access-Version passende Listing erfassen. In der Prozedur "Artikel-Nr" durch den Namen des Feldes auf Ihrem Formular, in das die Prozedur den nächsten Zählerwert eintragen soll, ersetzen. Bei Bedarf die vorgegebene Schrittweite von "100" durch den gewünschten Wert anpassen. Berichte nach Kalenderwoche gruppieren Wir haben verschiedene Berichte, die Rechnungen, Bestellungen oder Umsatzzahlen auswerten und in denen dabei eine Gruppierung nach Kalenderwoche erfolgen muss. Zur Zeit lassen wir dazu in den Abfragen immer ein Feld "KW" basierend auf dem Rechnungs-, Bestell- oder Buchungsdatum über die Funktion "DatePart("ww";[BestellDatum])" generieren, das im Bericht für die Gruppierung eingestellt wird. Bei Tabellen mit sehr vielen Datensätzen dauert die Ausführung dieser Abfrage allerdings sehr lange. Lässt sich das optimieren? Einfacher und schneller können Sie eine solche Gruppierung über eine Standardfunktion von Access erreichen, die allerdings wenig bekannt ist: Öffnen Sie den Bericht, den Sie nach der Kalenderwoche gruppieren möchten, im Entwurfsmodus. Wählen Sie das Menü Ansicht-Sortieren und Gruppieren an. Stellen Sie in der Spalte "Feld/Ausdruck" das Datumsfeld ein, nach dem gruppiert werden soll, also beispielsweise "RGDatum" oder "Bestelldatum". Im Bereich darunter im Dropdown-Menü der Eigenschaft "Gruppieren nach" können Sie nun das gewünschte Kriterium, also beispielsweise "Quartal" oder "Woche" einstellen. Beträge auf 5 Cent runden Ich möchte Währungsbeträge auf fünf Cent runden; z.B. soll der Wert 345,53 auf den Wert 345,55 aufgerundet werden. Access bietet keine Möglichkeit für diese spezielle Rundungsarbeit. Deshalb bedienen Sie sich einer Formel, die die Werte entsprechend berechnet. Sie lautet: INT(Zahl * 20 + 0.5) / 20 . Cursor mit definierter Reaktion Bei den Office-Anwendungen erwarten Sie zu Recht, dass sich der Cursor immer gleich verhält. Access besitzt jedoch einige Grundeinstellungen, bei denen sich ganz andere Reaktionen ergeben können. Öffnen Sie unter Extras und Optionen das Register Tastatur und schauen Sie sich die dortigen Einstellungen an. Probieren Sie die Alternativen aus und nutzen Sie Einstellungen wie Cursor stoppt beim ersten/letzten Feld, mit der Sie das versehentliche Verlassen von Masken vermeiden können. Datenblattansicht nach mehreren Spalten sortieren In der Datenblatt-Ansicht von Access kann man sehr einfach nach einer bestimmten Spalte sortieren, indem man sie anklickt und danach auf eine der Schaltflächen Aufsteigend sortieren oder Absteigend sortieren klickt. Eine Alternative: Ein rechter Mausklick auf die gewünschte Spalte und anschließend aus dem Popup-Menü die gewünschte Sortierungsart auswählen. Mit diesen Techniken können Sie die Datensätze nicht nur nach einer Spalte sortieren. Mit einem Trick können Sie eine zweite Spalte als weiteres Sortierkriterium hinzuziehen. Klicken Sie dafür in die erste Spalte, nach der Sie sortieren wollen und drücken Sie die Umschalt-Taste. Wenn Sie diese Taste gedrückt halten, während Sie auf einen Eintrag der benachbarten Spalte klicken und sich anschließend für eine Sortierungsart entscheiden, hat die linke der beiden Spalten die höhere und die rechte die niedrigere Priorität bei der Sortierung. Falls Sie nach Spalten sortieren wollen, die nicht nebeneinander liegen, ist das auch kein Problem. Markieren Sie in diesem Fall einfach den Spaltenkopf der Spalte die Sie verschieben müssen und ziehen Sie sie per Drag and Drop vorübergehend an einen anderen Platz. Nachdem Sie so dafür gesorgt haben, dass sich die Spalten, nach denen Sie sortieren wollen, nebeneinander befinden, also die höhere Priorität links und die niedrigere rechts, können sie diese sortieren und anschließend die alte Ordnung wieder herstellen. Datenimport Eine intensiv genutzte Access-Datenbank wächst mit der Zeit unter Umständen auf eine Größe von mehreren MB an. Es gibt jedoch eine sehr effektive Abmagerungskur, um Datenbanken auf einen Bruchteil ihres Platzbedarfs zu reduzieren: Den kompletten Import in eine neue, leere Datenbank. Öffnen Sie dafür Access und klicken auf die Schaltfläche Neue Datenbank. Im Register Allgemein doppelklicken Sie zuerst auf den Eintrag Leere Datenbank. Nachdem Sie einen Namen und einen Zielordner festgelegt haben, klicken Sie auf Anlegen. In der neuen Datenbank wählen Sie im Menü Datei | Externe Daten | Importieren die Datei aus, die Sie einschrumpfen wollen. Aktivieren Sie nun nacheinander alle Registerblätter und klicken auf die Schaltfläche Alle auswählen, um so alle Elemente der Datenbank zu markieren. Ein Klick auf die Schaltfläche OK startet den Import, der je nach Größe der Datenbank einige Zeit in Anspruch nehmen kann. Wenn der Import abgeschlossen ist, können Sie die Datei speichern und - wenn Sie sich davon überzeugt haben, dass alles richtig funktioniert - die alte Datenbank löschen. Datensätze im Formular erzwingen Soll ein Anwender eine Eingabemaske nicht ohne den Eintrag von Daten verlassen können, dann sperren Sie die Tasten [Tab] und Enter. Diese Voreinstellung erreichen Sie, indem Sie die jeweilige Anwendung öffnen, das gewünschte Formular öffnen und bei Ansicht den Formularentwurf einstellen. Klicken Sie dann mit der rechten Maustaste auf die Titelleiste des Formulars und klicken Sie auf Eigenschaften. Sie klicken nun auf das Feld Beim Öffnen, dann gehen Sie auf Erstellen und auf Code-Editor. Nach einem Klick auf OK geben Sie diesen Code ein: Application.SetOption "Cursor stoppt bei erstem/letztem Feld", 1. Datenverteilung - Daten zusammenführen Unter der Bezeichnung "Replikator" gibt es einen Mechanismus, mit dem Sie komplexe Datenbanken verteilen können. Der Replikator führt die einzelnen Versionen der Datenbank später auch wieder zusammen, ohne dass Datenverluste entstehen. Der Export der Daten erfolgt bei geschlossener Datenbank über das Kommando Extras und Replikation. Dort klicken Sie den Befehl Datenbank in Replikat konvertieren an. Denken Sie auch an eine Sicherheitskopie, um spätere Probleme beim Zusammenführen zu vermeiden. Von diesem Moment an besitzen Sie einen Design-Master als Quelle und Kopien an beliebigen Orten (Replikate). Wollen Sie die Daten wieder zusammensetzen, so erledigen Sie dies wiederum über Extras und Replikationen, verwenden jedoch das Kommando Jetzt synchronisieren. Mit der richtigen Voreinstellung verhindern Sie, dass nach dem Zusammenführen scheinbar wirre Daten in der Formularansicht erscheinen. Diese sind kein Problem, da es sich lediglich um interne Anmerkungen handelt, die Access bei der Replikation angelegt hat. Um diese Ansicht abzuschalten, gehen Sie auf Extras | Optionen und löschen die Checkbox bei Ansicht | Systemobjekte. Datum mit Hilfe der Plus- und Minustaste verändern Mit einem einfachen Listing kann man Access dazu bewegen, jedesmal, wenn in einem Datumsfeld eines Formulars anstelle eines Datums die Taste [+] gedrückt wird, das Datum um einen Tag zu erhöhen. Die Betätigung der Taste [-] setzt das Datum um einen Tag zurück. Um das zu erreichen, laden Sie das Formular, das Sie mit dieser Funktionalität erweitern wollen, in die Entwurfsansicht. Dort markieren Sie das Feld mit dem Datum und wählen nach einem Klick mit der rechten Maustaste den Punkt Eigenschaften. Im Register Ereignis markieren Sie den untersten Eintrag Bei Taste und klicken anschließend auf die Schaltfläche mit den drei Punkten um den Code-Editor zu öffnen. Geben Sie hier das unten abgedruckte Listing ein. Falls Ihre Feldbezeichnung nicht Datum lautet, muss man das Makro entsprechend anpassen. Weil die Ereignisprozedur allerdings nur dann funktioniert, wenn im Datumsfeld ein Wert eingetragen ist, sollten Sie dieses Feld außerdem mit einem Standardwert versehen. Dafür wechseln Sie in das Register Daten und tragen im Feld Standardwert z.B. die Zeichenfolge Datum() ein, wenn Sie das jeweils aktuelle Datum als Ausgangsbasis in das Datumsfeld eintragen wollen. Wechseln Sie anschließend in die Formularansicht. Dort können Sie jetzt Ihre neue Datumsfunktion ausprobieren. Durch kleine Veränderungen und Erweiterungen des Listings können Sie auch dafür sorgen, dass beispielsweise die Taste [+] das Datum um 10 Tage hochsetzt oder die Taste [w] (Ascii-Code 119) das Datum sieben Tage erhöht.
Private Sub Datum_KeyPress(KeyAscii As Integer) If KeyAscii = 43 Then '43 = ANSI-Code für + Taste [Datum] = [Datum] + 1 'Datum um einen Tag erhöhen KeyAscii = 0 'verhindern dass + Zeichen angezeigt wird End If If KeyAscii = 45 Then '45 = ANSI-Code für - Taste [Datum] = [Datum] – 1 'Datum um einen Tag verringern KeyAscii = 0 'verhindern dass - Zeichen angezeigt wird End If End Sub Datumseingabe Oft werden in Tabellen von Access auch die Geburtsdaten der eingetragenen Personen erfasst. Dabei können jedoch Fehler auftreten, z.B. wenn Sie das Format Datum, kurz wählen und das Eingabeformat 99.99.00;0;# angeben. Tragen Sie in dieses Feld ein Datum ein, in dem das Jahr vor 1930 liegt, erscheint unter Umständen 17.11.28 stellvertretend für 17.11.2028 und nicht für 17.11.1928. Verlassen Sie die Access-Tabelle und öffnen Sie sie danach erneut, ist in diesem Datensatz kein Datumseintrag mehr vorhanden. Tritt dieser unerwünschte Effekt ein, so liegt dies an der Datei OLEAUT32.DLL. Diese DLL-Datei befindet sich im System-Verzeichnis , also normalerweise in C:\WINDOWS\SYSTEM. Die Datei, die mit Access ausgeliefert wird, trägt die Versionsnummer 2.1. In ihr ist unter anderem festgelegt, dass standardmäßig das zwanzigste Jahrhundert, also Jahreszahlen zwischen 1900 und 1999, verwendet werden soll. Tauchen jedoch die beschriebenen Probleme auf, dann hat die Datei OLEAUT32.DLL eine neuere Versionsnummer, z.B. 2.20.4049. Diese aktuelleren Dateien gehen jedoch standardmäßig vom einundzwanzigsten Jahrhundert aus. Solche neueren Versionen dieser Datei werden unter anderem vom Betriebssystem oder vom Internet Explorer installiert. Lösung: Geben Sie bei Ihrer Datumsangabe das Datum immer mit vollständiger Jahresangabe ein. In diesem Fall entstehen nicht mehr die oben beschriebenen Effekte. Dokumentation Access bietet unter Extras | Analyse das Tool Dokumentierer an. Es hat die Aufgabe, alle Module, Tabellen, Abfragen und vieles andere mehr in einem aktuellen Projekt zu dokumentieren. Mit seiner Hilfe baut Access eine Textdatei auf, die eine ausführliche Objektdefinition enthält. Arbeiten Sie mit der Option Alle einschließen, um keine Details auszulassen. Druck auf Enter löst Zeilenwechsel aus Ich habe in Access ein Formular mit einem Textfeld, das mehrere Zeilen umfasst. Bei der Dateneingabe möchte ich mit der Taste Enter einen Zeilenumbruch erreichen und nicht - Standard in Access - den Fokus auf das nächste Steuerelement setzen. Wechseln Sie in die Entwurfsansicht des Formulars und klicken Sie das entsprechende Textfeld an. Lassen Sie sich über das Menü Ansicht - Eigenschaften die Eigenschaften für dieses Textfeld anzeigen. Ändern Sie die Eigenschaft Eingabetastenverhalten im Textfeld vom Eintrag Standard auf Neue Zeile im Feld. Nach dieser Umstellung springt der Text-Editor von Access in diesem Textfeld nach Betätigen mit Enter in eine neue Zeile. Eigenschaften per Doppelklick wechseln Möchte man in Access die Eigenschaften eines Elements ändern, klickt man gewöhnlich auf den Pfeil neben der zu ändernden Zeile, um die Angebote zu betrachten, und wählt dann eines davon aus. Viel schneller geht es jedoch, wenn nur zwei Optionen, wie z.B. Ja und Nein, zur Auswahl stehen, die jeweilige Einstellung mit einem Doppelklick zu ändern. Stehen mehrere Optionen zur Auswahl, wie etwa bei Spezialeffekt, schreibt Access nach jedem Doppelklick auf den gerade eingestellten Spezialeffekt den nächsten der Auswahlliste in das Feld. Möchten Sie die Eigenschaften weiterer Formulare oder Tabellen verändern, gelangen Sie übrigens mit [F11] sofort zum Datenbankfenster von Access, in dem Sie das gewünschte Objekt in der Entwurfsansicht öffnen können. Eigenschaften von Formularen und Berichten ändern Wählen Sie in einer Access-Datenbank im Bereich Formulare oder Berichte Neu, um ein neues Formular oder einen neuen Bericht ohne Assistent anzulegen, erhalten Sie immer einen Rohling mit bestimmten Eigenschaften bezüglich Größe und Einteilung. Wenn Sie an diesen Basisformularen und -berichten grundsätzlich die gleichen Änderungen vornehmen, sparen Sie eine Menge Zeit und Arbeit, wenn Sie bei Neuanlagen auf bestehende Formulare oder Berichte zurückgreifen. Wählen Sie dafür Extras | Optionen und wechseln Sie zum Registerblatt Formulare / Berichte. Sie können unter Formularvorlage und Berichtsvorlage die passende bereits bestehende Vorlage eintragen, also ein Formular oder einen Bericht, der bereits existiert. Alle Formulare oder Berichte, die Sie in Zukunft ohne die Verwendung eines Assistenten erzeugen, werden von Access mit den so definierten Eigenschaften angelegt. Errechneten Zeitspannen Werte zuweisen Möchte man in einer Datenbank ermitteln, wie lange eine bestimmte Zeitspanne ist, verwendet man normalerweise den Ausdruck =[Ende]-[Beginn]. Als Ergebnis liefert diese Formel die Anzahl der Stunden zwischen den Feldern Ende und Beginn. Allerdings ist es manchmal erforderlich, bestimmten Zeitspannen verschiedene Werte zuzuweisen, etwa weil ab einer Dauer von acht Stunden Zusatzkosten anfallen. Diese Berechnung ist über ein Makro und die Aktion SetzenWert zu realisieren. Im Makro müsste im Feld Bedingung der Ausdruck ([Ende]-[Beginn])>=8 und bei SetzenWert die Bedingung für diese Dauer eingetragen werden. Allerdings führt dies nicht zum gewünschten Ergebnis, denn Access kann Zahlen nicht mit Datum/Zeit-Feldern vergleichen. Der Ausdruck muss daher Format ([Ende]-[Beginn];"hh")>=8 lauten. Damit weisen Sie Access an, das Stundenformat der Felder [Ende] und [Beginn] zu beachten. Exklusives Öffnen von Datenbanken verhindern Beim gemeinsamen Zugriff auf Datenbanken im Netzwerk wird Anwendern immer wieder der Zugriff auf die eine oder andere Datenbank verweigert, weil ein anderer Anwender diese Datenbank bereits "Exklusiv" geöffnet hat. Selbst der Administrator steht dann vor verschlossener Tür und kann keine Änderungen vornehmen. Um zu verhindern, dass Anwender eine Datenbank exklusiv öffnen, setzt man die Kombination aus einer VBA-Funktion und einem "AutoExec"-Makro ein. Arbeitschritte: In der betreffenden Datenbank ein neues Modul "modExklusiv" anlegen und die folgende Funktion eingeben: Function ExklusivPruefen() Anschließend ein Makro "AutoExec" erstellen, über Ansicht-Bedingungen die Spalte "Bedingungen" anzeigen lassen und in dieser Spalte folgendes eingeben: ExklusivPruefen()= True Wenn bereits ein Makro "AutoExec" vorhanden ist, fügt man ganz am Anfang eine neue Zeile hinzu und gibt die notwendigen Anweisungen dort ein. Die Einstellung "Aktion" setzt man auf "AusführenBefehl". Als Parameter für die Aktion "Beenden" angeben. Wenn in Zukunft ein Anwender versucht, diese Datenbank exklusiv zu öffnen, wird automatisch das Makro "AutoExec" ausgeführt. Von hier aus erfolgt ein Aufruf der Funktion "ExklusivPruefen()". Liefert diese als Ergebnis "True/Wahr", wird die Aktion "AusführenMenübefehl" oder "AusführenBefehl" ausgeführt und Access damit beendet. Felddatentyp ändern Wenn Sie in einer Access-Datenbank ein neues Feld hinzufügen, ist dieses gewöhnlich vom Typ Text und hat eine maximale Länge von 50 Zeichen. Wollen Sie allerdings vorwiegend Felder anderer Datentypen erzeugen, muss man bei jedem neu angelegten Feld mindestens eine, meistens jedoch mehrere Änderungen vornehmen. Oder Sie ändern die Standardvorgaben von Access. Die Änderung erfolgt im Menü Extras | Optionen | Tabellen: Abfragen. Hier können Sie sowohl den Standardfeldtyp, als auch die Standardfeldgröße Ihren Anforderungen anpassen. Felder automatisch ausfüllen Manchmal wäre es praktisch, wenn auch Access die Funktion des automatischen Ergänzens von Datenfeldern wie die Excel beherrschen würde. Wenn man in Excel die Funktion AutoAusfüllen aktiviert, merkt sich das Programm alle Wörter, die in der Tabelle bereits vorhanden sind. Gibt man in eine Zelle einen Buchstaben ein, schlägt Excel automatisch ein Wort aus seinem Gedächtnis vor, dessen Anfangsbuchstabe mit dem eingegebenen Buchstaben übereinstimmt. Praktisch ist die Funktion, weil man sich viel Tipparbeit spart, wenn z.B. Namen häufig in einer Tabelle auftauchen. Mit einem einfachen Kniff können Sie erreichen, dass Ihnen Access den gleichen Komfort bietet. Öffnen Sie die Tabelle, für die Sie diese Funktion einrichten wollen, in der Entwurfsansicht und klicken Sie das Feld an, bei dem Access automatisch Wörter vorschlagen soll, also in einer Adressdatenbank z.B. das Feld mit dem Ortsnamen. Im unteren Bereich der Entwurfsansicht der Tabelle stehen im Registerblatt Allgemein ein paar Angaben, z.B. zur Feldgröße. Wählen Sie dort das Registerblatt Nachschlagen und klicken Sie auf den Eintrag Textfeld. Es erscheint ein Pfeil, nach einem Klick auf ihn wählen Sie aus der Liste den Eintrag Kombinationsfeld. Setzen Sie dann den Cursor in das Feld Datensatzherkunft und klicken Sie auf die Schaltfläche mit den drei Punkten. Mit einem Doppelklick wählen Sie aus der Liste die Tabelle, die Sie gerade bearbeiten und Schließen die Dialogbox Tabelle anzeigen. Mit einem weiteren Doppelklick auf das Feld mit dem Ortsnamen können Sie den Abfrage-Editor schließen und speichern. Wenn Sie nun in die Tabellenansicht wechseln, schlägt Ihnen Access passende Wörter aus seinem Fundus vor, sobald Sie einen passenden ersten Buchstaben in das bearbeitete Feld eintragen. Feldinhalte als Quickinfo anzeigen Aus Platzgründen müssen Textfelder, Listenfelder oder Kombinationsfelder in Formularen häufig mit reduzierter Breite dargestellt werden, um alle Steuerelemente im Formular unterbringen zu können. Die Inhalte sind dann häufig nicht komplett zu sehen und müssen erst durch entsprechendes Scrollen im Feld sichtbar gemacht werden. Abhilfe schafft man mit einem Trick: Man definiert den kompletten Feld- oder Listeninhalt einfach als Steuerelement-TipText (QuickInfo). Wenn man den Mauszeiger dann einen kurzen Moment über dem betreffenden Feld oder der Liste stehen lässt, zeigt Access den kompletten Inhalt oder Eintrag als QuickInfo in einem kleinen gelben Kasten darunter an. Alles, was man dazu benötigt, ist eine kleine VBA-Routine in einem globalen Modul, die beim Wechsel des Datensatzes aufgerufen wird und die Inhalte der betreffenden Steuerelemente als QuickInfo definiert: Sub SETiptextSetzen(frmAktForm As Form) Dim ctlInForm As Control On Error Resume Next For Each ctlInForm In frmAktForm.Controls With ctlInForm If .ControlType = acTextBox Then .ControlTipText = IIf(IsNull(.Value), "NULL", .Value) ElseIf .ControlType = acComboBox Or _ .ControlType = acListBox Then If .ColumnCount > 1 Then .ControlTipText = IIf(IsNull(.Value), "NULL", .Column(.BoundColumn)) Else .ControlTipText = IIf(IsNull(.Value), "NULL", .Value) End If End If End With Next ctlInForm End Sub In einer Schleife werden alle Steuerelemente des betreffenden Formulars geprüft - handelt es sich um ein Text-, Listen oder Kombinationsfeld, wird der aktuelle Inhalt der Eigenschaft "ControlTipText" zugewiesen. Damit die Routine jeweils beim Wechsel des Datensatzes aufgerufen wird und die korrekten Werte setzen kann, fügt man in der Ereignisprozedur "Beim Anzeigen" des entsprechenden Formulars die folgende Anweisung ein: SETiptextSetzen Me. Formular zeigt Wochentag des eingegebenen Datums an Es ist zwar beim Formularentwurf möglich, die Datumsangabe lang zu verwenden, um den Wochentag im Datumsfeld anzuzeigen, doch die entsprechende Darstellung ist ziemlich lang und unübersichtlich. Möchte man deshalb im Datumsfeld lieber ein kurzes Format verwenden, kann man den Wochentag dennoch im Blick haben, indem man eine zusätzliche Optionsgruppe anlegt. Öffnen Sie dafür das Formular in der Entwurfsansicht und aktivieren Sie den Button mit dem Zauberstab in der Toolbox. Er sorgt dafür, dass Ihnen bei den nächsten Schritten ein Assistent bei der Arbeit hilft. Betätigen Sie die Schaltfläche Optionsgruppe in der Toolbox und markieren Sie dann im Formular die Fläche, die die Optionsgruppe einnehmen darf. Im nächsten Schritt fordert Sie der Formularassistent auf, die Beschriftungen der Optionen einzugeben. In diesem Fall sind das die Wochentage in der Form Mo, Di, Mi ... oder Montag, Dienstag, Mittwoch; die Tabulatortaste bringt Sie jeweils in die nächste Zeile. Nach einem Klick auf Weiter möchte der Assistent wissen, ob er einen Standardwert setzen soll. Hier klicken Sie auf Nein, ich möchte keine Standardauswahl treffen und wechseln mit Weiter zum nächsten Schritt. Diese Dialogbox übergehen Sie, indem Sie nochmals auf Weiter klicken. Übergehen Sie auch die nächste Seite mit Weiter und entscheiden Sie sich im nächsten Fenster für eines der Layouts. Nachdem Sie nach einem letzten Weiter eine Beschriftung festgelegt haben, können Sie die Optionsgruppe jetzt fertigstellen. Markieren Sie das neue Objekt mit einem rechten Klick auf dessen Rahmen und wählen Sie Eigenschaften aus dem Pop-Up-Menü. Im Register Alle tragen Sie die Formel =Wochentag([Datum]-1) ein. "Datum" steht hier für die Feldbezeichnung Ihres Datumsfeldes, ändern Sie den Namen entsprechend Ihres Feldnamens für das Datum ab. Weiter unten im selben Fenster finden Sie den Eintrag In Reihenfolge, ändern hier die Option nach einem Klick auf das Feld und danach auf den Button mit dem nach unten weisenden Pfeil auf Nein. Nun schließen Sie das Fenster Eigenschaften und wechseln wieder mit Ansicht | Formular in die Formularansicht. Zu jedem Datum, das Sie nun eingeben, erscheint in der neu angelegten Optionsgruppe der entsprechende Wochentag markiert. Funktion zum kaufmännischen Runden Um Werte gerundet auszugeben, müss man eine eigene, benutzerdefinierte Funktion schreiben, die man z. B. in Abfragen oder in VBA-Prozeduren einsetzen kann. Es stimmt, dass in Access 2000 die VBA-Funktion "Round" eingeführt wurde. Doch die liefert zum Teil merkwürdige Resultate, weshalb sie für eine sinnvolle Rundung ausscheidet. Probieren Sie es aus, indem Sie den Visual Basic-Editor mit Alt+F11 aus Access heraus starten. Lassen Sie sich dann über das Menü Ansicht das Direktfenster anzeigen. Darin geben Sie folgendes ein: ?Round(3.5) Nach einem Druck auf die Return-Taste erhalten Sie das auf eine ganze Zahl gerundete Ergebnis "4". Das ist korrekt. Versuchen Sie es dann aber noch einmal mit ?Round(4.5) Wieder ist das Ergebnis "4", was offensichtlich nicht der kaufmännischen Rundung entspricht. Wenn man auf ganze Zahlen (ohne Nachkommastellen) rundet, liefert "Round" immer nur gerade Zahlen. Ebenfalls unbrauchbar für die Rundung ist der Einsatz eines Zahlenformats mit der entsprechenden Anzahl an Nachkommastellen, wie es beispielsweise im Währungsformat umgesetzt wird. Dabei kann es zu Diskrepanzen zwischen Anzeigegenauigkeit und Rechengenauigkeit kommen, denn intern rechnet Access immer mit den tatsächlich vorhandenen Werten. Es führt also kein Weg an einer benutzerdefinierten Funktion vorbei. Die im Anschluß vorgestellte Funktion erlaubt sogar die Angabe der Stellen, auf die gerundet werden soll, wobei als Standardwert "0" vorgegeben wird. Man legt ein neues leeres Modul auf dem Datenbankregister "Module" an. Im Codefenster gibt man folgende Zeilen ein: Public Function funcRunden(Wert, Optional Stellen = 0) As Double Nachdem man das Modul gespeichert hat, steht die Funktion in der gesamten Datenbank - also zum Beispiel auch in Abfragen - zur Verfügung. Sie könnten auf diese Weise ein berechnetes Abfragefeld anlegen, das bei einer Bestelltabelle mit den Feldern "Einzelpreis" und "Anzahl" wie folgt aussieht: RundeSumme: funcRunden([Einzelpreis]*[Anzahl];2) Das Produkt aus Einzelpreis und Anzahl wird damit auf zwei Nachkommastellen gerundet, und zwar so, dass Access auch intern anschließend nur noch mit dieser Genauigkeit rechnet. Gruppen in Berichten anlegen Ich möchte mit Access Berichte erzeugen. Bei den Daten kommen einige Einträge häufiger vor (ein Autor für mehrere Bücher). Ich möchte solche Informationen nicht unnötig oft im Bericht erscheinen lassen. Die Eigenschaft Duplikate ausblenden erzeugt unnütze Leerzeilen. Das Aktivieren der Eigenschaft Duplikate ausblenden veranlasst Access, die Wiederholung eines mehrfach vorhandenen Feldwerts im Bericht zu unterbinden. Statt alle Felder des folgenden Detailbereichs zu zeigen, beschränkt sich Access auf diejenigen mit unterschiedlichen Werten. Wenn z.B. das auszublendende Feld 1,5cm und ein weiteres Feld 2,5cm vom oberen Rand des Detailbereichs entfernt ist, zeigt Access zwar nur das zweite Feld an, reduziert jedoch nicht den Abstand zum Detailbereichsrand. Das sieht auf dem Ausdruck hinterher ganz nach ungewollten Leerzeilen aus. Um dieses Problem zu umgehen, bleiben Ihnen zwei Lösungen: Entweder Sie vermeiden die leere Zeile, indem Sie neben das Duplikatfeld ein kontinuierlich eingeblendetes Feld anordnen, oder Sie verwenden die Gruppierungsfunktion. Die erste Lösung eignet sich lediglich für kleinere Berichte mit wenigen Feldern. Um in großen Listen die Übersichtlichkeit zu wahren, sollten Sie besser die Gruppierungsfunktion verwenden. Dazu öffnen Sie den Bericht und wählen den Befehl Ansicht Sortieren und Gruppieren. Im gleichnamigen Dialog weisen Sie der linken Tabellenspalte den Namen des Duplikatfelds zu. In der rechten Spalte geben Sie die Sortierreihenfolge dieses Feldes an. Am effizientesten ist es, wenn Sie diese Auswahl bereits in der Abfrage treffen. Im Bereich Gruppeneigenschaften stellen Sie die Einstellung Gruppenkopf auf Ja. Access blendet daraufhin einen weiteren Berichtsbereich ein. In diesen können Sie das betreffende Feld via Drag & Drop verschieben. Von jetzt an sollten Ihnen die Leerzeilen erspart bleiben. Hyperlink-Felder per VBA ansprechen Wenn man in einem Formular mit Hyperlinks arbeitet, kann man drei verschiedene Informationen eingeben: die tatsächliche Adresse (URL), eine Unteradresse (Anker) und einen beschreibenden Text, der anstelle Adresse angezeigt werden soll. Die Eingabe dieser Informationen klappt ohne Probleme, aber wie kann man per VBA auf diese Elemente eines Hyperlinks zugreifen? Jedes Textfeld mit einem Hyperlink verfügt zunächst einmal über die Eigenschaften "Address" und "SubAddress". "Address" beinhaltet dabei die URL, also z. B.: http://www.web.com/default.asp, und "SubAddress" optional den Namen eines auf dieser Seite vorhandenen Ankers, z. B.: officefiles. Die komplette URL des Beispiels sähe also so aus: http://www.web.com/default.asp#officefiles Der Zugriff auf Adresse und Unteradresse ist einfach: MsgBox Me.URL.Hyperlink.Address MsgBox Me.URL.Hyperlink.SubAddress Alternativ dazu kann man die "HyperlinkPart()"-Funktion von Access einsetzen, die außer Adresse und Anker noch den angezeigten Text als Ergebnis liefern kann. Die Funktion erwartet als ersten Parameter das Hyperlink-Textfeld und als zweiten Parameter eine Konstante, über die gewünschte Teil der URL spezifiziert wird: MsgBox HyperlinkPart(Me.URL, acAddress) 'http://-Adresse MsgBox HyperlinkPart(Me.URL, acSubAddress) 'Ankername MsgBox HyperlinkPart(Me.URL, acDisplayedValue) 'Text Die Eigenschaften werden per VBA durch eine einfache Zuweisung gesetzt. Dabei sind die drei Bestandteile "Anzeigetext", "Adresse" und "Anker" durch das Nummernzeichen (#) zu trennen: Me.URL = "Office Downloads#http://www.web.com/" & "default.asp#officefiles" Me.URL = "Mail an Herrn Müller#mailto:hmueller@test.de" Me.URL="FTP-Download#ftp://ftp.test.de/files/archiv.zip" Wenn nur ein Nummernzeichen angegeben ist, wird der Text davor als Anzeigetext und der Text danach als Link interpretiert. Sind zwei Nummernzeichen angegeben, wird der Text vor dem ersten Nummernzeichen als Anzeigetext, der Text vor dem zweiten Nummernzeichen als Link und der Text nach dem zweiten Nummernzeichen als Ankername umgesetzt. Um die angegebene Seite per VBA direkt anzusteuern, bei einem "mailto:"-Link den E-Mail-Client zu öffnen oder bei einem "ftp:"-Link den Download zu starten, wird folgende Anweisung eingesetzt: Me.URL.Hyperlink.Follow. Kombinationsfelder in Formularen In Formularen von Datenbanken werden häufig mit Hilfe von Kombinationsfeldern Daten aus anderen Tabellen übernommen. So ist es etwa denkbar, dass Sie eine Tabelle angelegt haben, in der Autohersteller und Autotypen aufgelistet sind. Möchten Sie in einer zweiten Tabelle festhalten, welcher Kunde welches Auto gekauft hat, können Sie über Kombinationsfelder auf die Tabelle mit den Autotypen zugreifen und mit einem Mausklick in die Kundentabelle übernehmen. Normalerweise listet Access aber sowohl im Kombinationsfeld mit den Autoherstellern als auch in dem Typenfeld grundsätzlich alle Einträge der Typentabelle auf. Dies passiert unabhängig vom Inhalt des anderen Kombinationsfeldes. Mit einem Trick können Sie aber dafür sorgen, dass, sobald im ersten Feld ein Hersteller ausgewählt wurde, im zweiten Feld nur noch die Typen erscheinen, die diese ausgewählte Firma herstellt. Ist als Hersteller etwa Opel gewählt, so werden im Kombinationsfeld Typ nur die dazugehörenden Autotypen wie Corsa, Omega und Vectra angezeigt. Erstellen Sie zunächst eine Tabelle, in der Sie die Autotypen auflisten. Sie muss die beiden Felder Hersteller und Typ enthalten. Geben Sie anschließend die entsprechenden Daten ein. Die Tabelle mit den Kunden bezieht ihre Daten aus den Abfragen "AF_Hersteller", in der alle Hersteller aufgelistet sind, und "AF_Typ", die ein Auswahlkriterium enthält. Legen Sie für die Tabelle Kunden die Felder Kunde, Hersteller und Typ an. Für die Abfragen verwenden Sie den Auswahlabfrage-Assistenten, zu dem Sie mit einem Klick auf Neu im Register Abfrage gelangen. Legen Sie unter Tabellen | Abfragen die Tabelle mit den Autotypen fest und übernehmen dann unter Verfügbare Felder den Eintrag Hersteller in Ausgewählte Felder. Geben Sie im nächsten Dialogfeld den Namen AF_Hersteller an und lassen nach einem Klick auf die Option Den Abfrageentwurf ändern Access die Abfrage Fertigstellen. Sie befinden sich nun in der Entwurfsansicht der Abfrage. Klicken Sie mit der rechten Maustaste in den oberen Bereich des Fensters, um an Eigenschaften zu gelangen. Stellen Sie dort die Option Keine Duplikate auf Ja. In der zweiten Abfrage übernehmen Sie sowohl Typ als auch Hersteller der Tabelle mit den Autotypen und vergeben die Bezeichnung AF_Typ. Auch diese Abfrage sollten Sie in der Entwurfsansicht öffnen und in der Spalte Hersteller unter dem Punkt Kriterien diese Zeichenfolge eingeben: [Formulare]![Kunden]![Hersteller]. Entfernen Sie dann in derselben Spalte das Häkchen in Anzeigen und schließen die Abfrage. In einem neuen Formular, das auf der Tabelle Kunden basiert, übernehmen Sie nur das Feld Kunde. Öffnen Sie das Formular in der Entwurfsansicht und erzeugen das erste Kombinationsfeld Hersteller durch einen Klick auf die entsprechende Schaltfläche. Im Assistenten geben Sie als Datenursprung die Abfrage AF_Hersteller an und legen fest, dass Sie die Daten im Feld Hersteller der Tabelle speichern wollen. Nach derselben Methode legen Sie das Kombinationsfeld Typ an, das seine Daten aus der Abfrage AF_Typ bezieht und im Feld Typ ablegt. Ändern Sie nach einem rechten Mausklick auf das Kombinationsfeld Hersteller und Eigenschaften im Register Andere unter Name die Standardbezeichnung auf Hersteller und wechseln in das Register Ereignis. Wählen Sie dann in der Zeile Nach Aktualisieren den Eintrag Ereignisprozedur, um mit einem Klick auf die Schaltfläche mit den drei Punkten in den Editor zu gelangen. Zwischen die beiden vorhandenen Zeilen fügen Sie die folgende Zeile ein: Me.[Typ].Requery Definieren Sie den Namen des zweiten Kombinationsfeldes als Typ und wechseln darauf in die Normalansicht des Formulars. Sobald Sie nun im Kombinationsfeld Hersteller einen Wert auswählen, bietet das Kombinationsfeld Typ nur noch die Typen dieses Herstellers an. Konvertierung von Daten Access bietet Ihnen an, eine aus Version 7.0 übernommene Datenbank in das neue Format zu konvertieren. Diese Funktion ermöglicht es, in die Datenbank neue Funktionen zu integrieren, die Access 7.0 noch nicht beherrscht. Allerdings können Sie eine solche Datenbank später unter dem älteren Access nicht mehr öffnen, denn einen Importfilter liefert Access nicht mit. Besteht also die Wahrscheinlichkeit, dass Sie oder andere Anwender nochmals unter Access 7.0 auf besagte Datenbank zugreifen wollen, dann wählen Sie im Fenster Datenbank konvertieren/öffnen die Option Datenbank öffnen und OK. Leeres Datumsfeld suchen Können Sie mir sagen, welche Formel oder Funktion ich einsetzen muss, wenn ich alle Datensätze sehen will, die noch kein Rückgabedatum enthalten? Ein Feld, das noch keine Daten enthält, hat in Access den Wert NULL. Dabei handelt es sich um eine Art Platzhalter für einen fehlenden Feldinhalt. Wenn Sie herausfinden wollen, ob ein Feld leer ist, können Sie die Funktion IstNull() oder IsNull() verwenden. Wenn das Feld Rückgabe leer ist, gibt die Funktion IstNull (Rückgabe) den Wert Wahr zurück. Falls das Feld Daten enthält, gibt die Funktion den Wert Falsch zurück. Ziehen Sie das Feld 'Rückgabe' in das Entwurfsraster der Abfrage, und geben Sie in der Zeile Kriterien die Bedingung Ist Null ein. Dieses Filterkriterium sorgt dafür, dass die Abfrage nur Datensätze ohne Rückgabewert anzeigt. Bei solchen Kriterien kommt es vor, dass ein Feld wie 'Rückgabe' zwar als Bedingung zum Einsatz kommt, ansonsten aber nicht in der Abfrage erscheinen soll. In diesem Fall brauchen Sie nur das Kontrollkästchen in der Zeile Anzeigen zu deaktivieren. Liste aller angemeldeten Anwender In Access hat man die Möglichkeit, mit wenig Aufwand alle angemeldeten Anwender einer Datenbank sowie die entsprechenden Rechnernamen zu ermitteln. Public Sub ListLoggedInUsers() On Error GoTo PROC_ERR Dim cnnAktuelleConn As Connection Dim rstErgebnisSchema As New Recordset Set cnnAktuelleConn = CurrentProject.Connection Set rstErgebnisSchema = cnnAktuelleConn.OpenSchema( _ adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}") Debug.Print While Not rstErgebnisSchema.EOF Debug.Print "Rechner: " & _ rstErgebnisSchema.Fields(0).Value Debug.Print "User: " & _ rstErgebnisSchema.Fields(1).Value Debug.Print String$(50, "-") rstErgebnisSchema.MoveNext Wend PROC_EXIT: Exit Sub PROC_ERR: MsgBox Err.Description Resume PROC_EXIT End Sub Die Namen der angemeldeten User sind in einem sogenannten "Schema" gespeichert, das man anhand einer "Schema-ID" vom OLE DB-Provider abrufen kann. Das Ergebnis wird dann in Form eines Recordsets zurueckgeliefert. Um diese Daten in einer Access-Datenbank abzurufen, reicht eine kleine VBA-Routine, die die Namen wie in unserem Beispiel im Direktfenster ausgibt. Man kann die Inhalte des Recordsets auch intern verarbeiten. Der Abruf von Schemata erfolgt über die "OpenSchema"-Methode des Connection-Objektes. Dazu weist man einer Objektvariablen die aktuelle Verbindung der Datenbank zu. "cnnAktuelleConn.OpenSchema" liefert dann ueber die Schema-ID "{947BB102-5D43-11D1-BDBF-00C04FB92675}" ein Recordset als Ergebnis (Schema-IDs sind in der Dokumentation des jeweiligen OLE DB-Providers aufgelistet). Das Recordset gibt im ersten Feld über den Rechnernamen und im zweiten Feld über den Usernamen Auskunft. Diese Informationen schreibt man pro User durch eine Linie getrennt in das Direktfenster. Sobald man das Modul in einer Datenbank erstellt hat, steht die neue Funktion zur Verfügung. Bei Bedarf öffnet man mit Strg+G das Direktfenster, gibt "? ListLoggedInUsers" ein und kann sofort sehen, welche User momentan mit der betreffenden Datenbank arbeiten. Memofelder und Zeilenumbrüche Wollen Sie in einem Formular von Access in einem Memofeld einen Zeilenumbruch einfügen, kommen Sie mit der [Return]-Taste nicht zum Ziel, sondern landen im nächsten Eingabefeld. Betätigen Sie jedoch die Tastenkombination [Strg] [Return], verbleibt der Cursor im Memofeld und springt an den Anfang der nächsten Zeile. Namen auf einem Etikett zusammenfassen Für einen Verein verwalte ich Adressen in Access. Per Etiketten-Druck verschicke ich Briefe. Einige davon gehen dabei an dieselbe Familie, weil mehrere Familienmitglieder zum Verein gehören. Ich würde daher gerne mehrere Namen einer Familie zusammenfassen. Im ersten Schritt reduziert sich das Problem auf die Frage, wer zu einer Familie gehört. Dazu braucht Ihre Adresstabelle ein logisches Feld, das mit den Werten Ja oder Nein entscheidet, ob der Brief für dieses Mitglied auszudrucken ist. Im zweiten Schritt ist es nützlich, alle betroffenen Familienmitglieder auf dem Brief mit Vornamen zu erwähnen. Auch dafür ist ein neues Datenfeld erforderlich. Öffnen Sie Ihre Adresstabelle in der Entwurfsansicht. Fügen Sie das Feld Familienadresse hinzu, wählen Sie den Felddatentyp Ja/Nein aus und geben den Standardwert Ja ein. Fügen Sie das Feld Vornamenliste hinzu und wählen den Felddatentyp Text aus. Wenn die Datenstruktur gespeichert ist, bleibt es Ihnen nicht erspart, jede Adresse zu kontrollieren, um Mitglieder von Ihrem Mailing auszuschließen. Dazu bestimmen Sie im Feld Familienadresse den Wert Nein. Bei allen anderen sollten Sie alle Vornamen aus der Familie in die Vornamenliste eintragen. Jetzt definieren Sie eine Abfrage, die nur Adressen berücksichtigt, die im Feld Familienadresse den Wert Ja besitzen. Aktivieren Sie das Datenbankfenster mit der Taste [F11], markieren Sie Ihre Adresstabelle und wählen Einfügen Abfrage Entwurfsansicht. Rufen Sie Ansicht SQL auf und tippen diese Befehle ein: SELECT * FROM Adressen WHERE Familienadresse = (Yes) Speichern Sie die Abfrage unter dem Namen Familienadressen. Zuletzt ändern Sie die Datenherkunft des Berichts: Öffnen Sie den Bericht im Entwurfsmodus, rufen Sie Bearbeiten Bericht auswählen auf und wählen als Herkunft Familienadressen aus. Nullwerte statt leere Felder Ich möchte eine Berechnung über zwei Felder ausführen. Aber wenn ein Feld leer ist, ist auch das Ergebnis dieser Berechnung leer. Der Inhalt des Steuerelements des ungebundenen Ergebnisfeldes lautet: = [Feld1] + [Feld2]. Sobald Feld1 oder Feld2 nichts enthalten, also den Wert Null haben, ist das Ergebnisfeld leer. Im Ihrem Formular haben Sie zwei Felder, die Sie addieren möchten. Wenn einer der Operanden den Wert Null hat, so hat auch das Ergebnis der ganzen Berechnung den Wert Null. Dies können Sie durch folgenden Ausdruck im Inhalt des Steuerelements des Ergebnisfelds abfangen: =Wenn(IstNull([Feld1]);0;[Feld1])+Wenn(IstNull([Feld2]);0;[Feld2])" Diesen Ausdruck kann man auch in der Abfrage in der Zeile Feld benutzen. Pfad und Dateiname in Formularen und Berichten ausgeben Arbeitet man mit mehreren Datenbanken, ist es oft praktisch, den Pfad und den Dateinamen der aktuellen Datei auf den Formularen und Berichten anzugeben. Dies ist in Access über ein ungebundenes Textfeld möglich. Möchten Sie z.B. ein Formular mit einem Feld versehen, in dem der Pfad und Dateiname der aktuellen Datenbank erscheint, öffnen Sie dieses zunächst mit einem Klick auf Entwurf in der Entwurfsansicht. Betätigen Sie dann die Schaltfläche Textfeld in der Symbolleiste Formularentwurf und ziehen Sie im Formular eine Fläche von ausreichender Länge für den Pfad auf. Nach einem rechten Mausklick auf das Textfeld mit der Beschriftung Ungebunden wählen Sie Eigenschaften im Popup-Menü und öffnen das Register Daten. Geben Sie unter Steuerelementinhalt die Zeichenfolge =[CurrentDb].[Name] ein und verlassen Sie danach die Dialogbox mit den Eigenschaften des Textfeldes. Aktualisieren oder löschen Sie nun das Erläuterungsfeld Textx (das x steht für die laufende Nummer des Textfeldes) und wechseln Sie mit einem Klick auf die entsprechende Schaltfläche der Standard-Symbolleiste in die Formularansicht. Das Formular enthält nun ein Textfeld, in dem der Pfad und Dateiname der Datenbank erscheinen. Möchten Sie dieses Textfeld auf einem Bericht ausgeben, gehen Sie folgendermaßen vor: Öffnen Sie den gewünschten Bericht in der Entwurfsansicht, fügen Sie ein ungebundenes Textfeld ein und geben Sie unter Steuerelementinhalt die Zeichenfolge =[CurrentDb].[Name] ein. In der Seitenansicht des Berichts können Sie das Ergebnis überprüfen. Sammelmappe Bei der Arbeit mit Office nutze ich häufig die Sammelmappen, um schnell auf die Dateien von Word, Excel oder Powerpoint zugreifen zu können, die zu einem Projekt gehören. Nun habe ich Office Standard und Access separat gekauft. Es gelingt mir aber nicht, in der Sammelmappe eine Access-Datei hinzuzufügen. Wenn ich den Befehl Abschnitt - Hinzufügen aufrufe, fehlt ein Auswahlpunkt für Access-Dateien. Weder Ihre aktuelle Programm-Installation noch die separaten Versionen von Office Standard und Access trifft die Schuld für Ihr Problem. Access-Datenbanken sind einfach nicht für eine Integration in die Office-Sammelmappe vorgesehen. Ein kleiner Trick bringt Ihre Access-Daten trotzdem in die Sammelmappe: Anstatt die MDB-Dateien direkt in die Sammelmappe einzufügen, legen Sie eine Word- oder Excel-Datei an und fügen dort Ihre Access-Tabelle ein. Dazu legen Sie in Ihrer Sammelmappe mit dem Befehl Abschnitt - Hinzufügen zunächst eine Word-Datei an. Starten Sie dann Access, markieren Sie im Datenbankfenster eine Tabelle und rufen den Befehl Bearbeiten - Kopieren auf. Aktivieren Sie zuletzt die Sammelmappe und fügen dann die Tabelle mit dem Befehl Bearbeiten - Einfügen ein. Schaltfläche für automatisches Wählen Eine praktische Ergänzung für Formulare ist eine Schaltfläche, mit der Sie die Person anrufen können, deren Datensatz gerade aktiv ist. Wenn Ihr Telefon mit dem Rechner verbunden ist, brauchen Sie nicht mehr selbst die Nummer zu wählen, sondern Access erledigt das. Wenn Sie ein Formular mit dieser Schaltfläche ausstatten wollen, öffnen Sie das Formular zunächst in der Entwurfsansicht. Achten Sie darauf, dass die Schaltfläche Steuerelementassistenten der Toolbox aktiv ist, und betätigen Sie die Befehlsschaltfläche, die sich ebenfalls in der Toolbox befindet. Mit der Maus ziehen Sie nun an der Stelle, an der Sie die Schaltfläche wünschen, eine Fläche auf, und die Dialogbox Befehlsschaltflächen-Assistenten kommt zum Vorschein. Markieren Sie Diverse im Bereich Kategorien und klicken Sie dann unter Aktionen auf Telefonnummernwähler. Nach dem Klick auf Fertigstellen können Sie die Funktion ausprobieren, indem Sie mit Ansicht | Formular in die Formularansicht wechseln und die neue Schaltfläche erstmals betätigen. Allerdings weist der Telefonnummernwähler noch eine Schwäche auf: Er schlägt immer vor, die Zeichenfolge im gerade aktiven Feld anzurufen. Befindet sich der Cursor also im Feld 'Namen', erscheint nicht die Telefonnummer, sondern der Name im Display. Sie müssten also immer zuerst das Feld mit der Telefonnummer anklicken, um Access mitzuteilen, welche Nummer gewählt werden soll. Möchten Sie diesen Vorgang automatisieren, müssen Sie nur eine Kleinigkeit in der Ereignisprozedur des Autowählers ändern. Wechseln Sie dafür wieder in die Entwurfsansicht, klicken Sie die Schaltfläche mit der rechten Maustaste an, und rufen Sie aus dem Kontextmenü Eigenschaften auf. Im Register Ereignis klicken Sie auf den Eintrag Ereignisprozedur und anschließend auf die Schaltfläche mit den drei Punkten. Sie gelangen in den Editor, in dem Sie nun eine Kleinigkeit verändern müssen. Die Zeile Set PrevCtl = Screen.PreviousControl sagt aus, dass die Zeichenfolge des gerade aktiven Feldes verwendet wird. Um einen Bezug zum Feld mit der Telefonnummer herzustellen, geben Sie anstelle der Zeichenfolge Screen.PreviousControl den Feldnamen mit der Telefonnummer ein. Die Schreibweise ist Forms.Formularname.Feldname. Lautet also der Name des Formulars Adressen und der des Feldes mit der Telefonnummer Telefon, muss die Zeile folgendermaßen aussehen: Set PrevCtl = Forms.Adressen.Telefon. Mit dieser Änderung greift der Autowähler immer automatisch auf das Telefonnummern-Feld zu, egal, wo sich der Cursor gerade befindet. Steuerelemente mit Hilfetexten Sie haben die Möglichkeit, Steuerelemente, z.B. Schaltflächen, mit kleinen Hilfetexten zu versehen, die dem Benutzer die Funktion dieser Elemente erklären. Den Text für den Kasten können Sie in den Eigenschaften des Steuerelements im Bereich Andere in der Zeile SteuerelementTip-Text eintragen. Zu den Eigenschaften der Steuerelemente gelangen Sie, indem Sie das Objekt in der Entwurfsansicht mit der rechten Maustaste anklicken und danach Eigenschaften aus dem Kontextmenü aufrufen. Ein unerwünschter Effekt entsteht bei sehr langen Hilfetexten: Dann wird die Hilfe später in der Formularansicht als langer, einzeiliger Balken dargestellt. Besser wäre es, Zeilenumbrüche einzufügen, damit der Hilfetext statt in einem Balken in einem kleinen Feld erscheint, das den Post-It-Klebezetteln ähnelt. Wenn Sie einen Zeilenumbruch einfügen wollen, kommen Sie mit [Return] nicht weiter, weil Sie damit in Dialogboxen nur die Einstellungen bestätigen. Bewegen Sie statt dessen den Cursor an die Stelle im Feld SteuerelementTip-Text, an der Sie den Zeilenumbruch wünschen, und halten Sie die Taste Umschalt gedrückt, während Sie dabei die [Return]-Taste betätigen. Mit der Cursortaste [Nach unten] können Sie zur zweiten Zeile wechseln und bei Bedarf einen zweiten Zeilenumbruch einfügen. Um den Hilfetext auch begutachten zu können, müssen Sie allerdings zuerst über die Schaltfläche Ansicht von der Entwurfsansicht in die Formularansicht wechseln und dann den Mauszeiger über das entsprechende Objekt bewegen. Suchoption ändern Verwendet man in einem Formular die Schaltfläche Suchen oder den Befehl Bearbeiten | Suchen, sind in der Dialogbox für den Suchvorgang schon ein paar Voreinstellungen aktiv. So möchte Access z.B. in der Standardeinstellung nur das aktuelle Feld durchsuchen und das Suchergebnis mit dem kompletten Feld vergleichen. Dabei handelt es sich bei großen Datenbanken um die schnellste Art der Suche, aber auch um die umständlichste. Sie müssen vor dem Suchvorgang das gewünschte Feld im Formular anklicken und auch noch den kompletten gesuchten Feldinhalt angeben, oder aber die Optionen der Dialogbox bei jedem Start der Suchfunktion anpassen. Mit einer kleinen Änderung kann man Access jedoch ein großzügigeres Suchverhalten angewöhnen. Es benötigt dann bei sehr umfangreichen Datenbanken etwas mehr Zeit für die Suche, findet dafür aber auch ohne lange Vorbereitung gleich die gewünschten Datensätze. Möchten Sie z.B., dass Access besonders flexibel ist und sämtliche Felder nach der eingegebenen Zeichenfolge durchsucht, wählen Sie im Menü Extras den Punkt Optionen und wechseln in das Registerblatt Bearbeiten | Suchen. Aktivieren Sie im Bereich Suchen | Ersetzen-Standard die Option Allgemeine Suche. Damit veranlassen Sie, dass in der Dialogbox Suchen die Option Aktuelles Feld nicht aktiv ist und in Vergleichen: automatisch der Eintrag Teil des Feldinhalts erscheint. Die Option Feldanfang-Suche in den Optionen für Bearbeiten | Suchen aktiviert in der Suchen-Dialogbox die Option Aktuelles Feld und setzt den Wert im Feld Vergleichen: auf Anfang des Feldinhalts. Die Änderungen dieser Suchoptionen werden jedoch nicht sofort, nachdem Sie mit einem Klick auf die Schaltfläche Übernehmen oder OK bestätigt haben, aktiv. Sie kommen erst nach einem erneuten Start von Access in den Genuss der bequemeren Suche. Symbol- und Menüleisten-Einstellungen zwischen Datenbanken austauschen Import- / Export-Spezifikationen und eigene Symbol- und Menüleisten werden immer nur in der Datenbank gespeichert, in der sie angelegt wurden. Häufig könnte man die mühsam eingerichteten Spezifikationen und Symbol-/Menüleisten aber auch in anderen Datenbanken sinnvoll nutzen. Wie kann man diese Informationen von einer Datenbank in eine andere übernehmen? Access speichert diese Informationen in versteckten Systemtabellen: - Import- / Export-Spezifikationen in den Tabellen "MSysImexSpecs" und "MSysImexColumns" - Symbol-/Menüleisten in der Tabelle "MSysCmdBars" Über Extras-Optionen kann man zwar auf der Registerkarte "Ansicht" die Option "Systemobjekte" aktivieren. Kopieren lassen sich die dann im Datenbank-Fenster sichtbaren Tabellen wegen entsprechend gesetzter Zugriffsrechte aber immer noch nicht. Es gibt allerdings versteckte, kaum bekannte Optionen in Access, über die man Import- und Export-Spezifikationen sowie Symbol- und Menüleisten schnell und einfach in andere Datenbanken übertragen können. Das Geheimnis verbirgt sich in der Import-Funktion von Access: Zunächst die Ziel-Datenbank öffnen, in der man Einstellungen aus einer anderen Datenbank nutzen möchten. Dann das Menü Datei-Externe Daten-Importieren anwählen. Die Quell-Datenbank lokalisieren, die die benötigten Einstellungen enthält. Auf die Schaltfläche Optionen klicken. Hier aktiviert man die Kontrollkästchen Menüs und Symbolleisten und / oder IMPORT / EXPORT-SPEZ, deaktiviert das Kontrollkästchen Beziehungen und setzt die Option Definitionen und Daten im Bereich "Tabellen importieren". Mit Ok bestätigen, um die gewünschten Objekte zu übertragen. In der Ziel-Datenbank kann man die Import-/Export-Spezifikationen sowie Symbol- und Menüleisten nun genauso benutzen und anpassen, als wenn sie in dieser Datenbank angelegt worden wären. Symbolleisten: Änderungen werden nicht gespeichert Änderungen an Symbolleisten sind zwar jederzeit möglich, aber gespeichert werden sie nur, wenn man die Datenbank exklusiv geöffnet hat. Sollte das nicht der Fall sein, erscheint beim Aufruf des Menüs ANPASSEN normalerweise die folgende Meldung: "Sie haben momentan keinen exklusiven Zugriff auf die Datenbank. Falls Sie Änderungen vornehmen, werden Sie sie eventuell später nicht speichern können." Danach ist allerdings eine problemlose Anpassung der Symbolleiste möglich und Access weist beim Verlassen der Datenbank auch nicht darauf hin, dass Änderungen verloren gehen. Tabellen im Textformat exportieren Ich möchte aus Access Tabellen im reinen Textformat exportieren, um sie in ein anderes Programm zu übernehmen. Wenn ich das über die entsprechende Funktion Speichern unter/Exportieren im Format .TXT mache, sind in den Ergebnissen die Umlaute und Sonderzeichen falsch. Falsche Umlaute und Sonderzeichen lassen auf das Problem der verschiedenen Zeichenpositionen zwischen ASCII- (DOS) und ANSI-Zeichensatz (Windows) schließen. Je nachdem, welche Plattform die Daten benutzen soll, müssen Sie die Daten im entsprechenden Format exportieren. Auch Access unterstützt beide Formate. Wählen Sie dazu im Dialog Speichern unter/Exportieren die Option In eine externe Datenbank. Im folgenden Windows-Standarddialog wählen Sie den Dateityp Textdateien und betätigen den Schalter Weitere. Dort können Sie im Optionsfeld Dateiherkunft zwischen den Zeichenformaten Windows und DOS wählen. Beenden Sie dann den Exportassistenten wie gewohnt. Tabellenchaos nach PC-Absturz Eine Datenbank hat nach einem Stromausfall offenbar einen irreparablen Schaden erlitten: Einige Tabellen erscheinen doppelt im Datenbankfenster. Wenn ich versuche, die Datenbank zu reparieren, erscheint jedoch nur folgende Fehlermeldung: Auftrag ist kein Index in dieser Tabelle. Da liegt Access ganz richtig: Auftrag ist kein Index, sondern der Name meiner MDB-Datei. Wie kann ich die Datenbank retten? Doppelte Tabellennamen weisen auf Fehler in den Systemtabellen Ihrer Datenbank hin. Access verwendet diese Systemtabellen, um Informationen über Objekte wie Tabellen, Felder oder Beziehungen zu speichern. Bevor Sie den nächsten Versuch starten, die MDB-Datei zu reparieren, legen Sie zuerst eine Sicherheitskopie an. Öffnen Sie dann Ihre Datenbank und versuchen, die Datenbank vor der Reparatur zu komprimieren. Dazu rufen Sie den Befehl Extras Dienstprogramme Datenbank komprimieren auf. Danach stehen die Chancen, dass die Reparatur der Datenbank gelingt, deutlich besser. Das erledigen Sie gleich mit dem Befehl Extras Dienstprogramme Datenbank reparieren. Anschließend legen Sie eine neue MDB-Datei an und importieren sämtliche Datenbankobjekte aus der alten MDB-Datei. Verwenden Sie dazu Datei Externe Daten Importieren und wählen dann als Importquelle Ihre reparierte MDB-Datei aus. Sofern Sie Access unter NT einsetzen, könnte ein Update des Datenbankkerns (Jet-Engine) von Access weiterhelfen. Übersichtsseiten für selbstgestaltete Datenbanken Wenn Sie eine neue Datenbank mit Hilfe eines der Assistenten von Access anlegen, erzeugt dieser immer eine Übersicht der Datenbank. Mit ihr können Sie ebenso gezielt wie bequem auf die einzelnen Elemente der Datenbank wie Formulare und Berichte zugreifen. Beim Start einer mit dem Assistenten gestalteten Datenbank wird der Anwender zunächst mit einem Übersichtsfenster konfrontiert, in dem er über Schaltflächen bestimmen kann, was er tun möchte, also z.B. neue Datensätze anlegen oder einen Bericht ausdrucken. Diese Benutzerführung erleichtert vor allem ungeübten Anwendern die Arbeit mit der Datenbank erheblich und verhindert zugleich, dass sie in sensible Bereiche eindringen können. Darüber hinaus verleiht die Übersicht der Datenbank den gewissen professionellen Touch. Möchten Sie Ihre selbstkreierte Datenbank mit einer Übersicht ausstatten, benötigen Sie im Menü Extras | Add-In den Übersichts-Manager. Nachdem Sie ihn angewählt haben, teilt Ihnen dieser normalerweise mit, dass er keine gültige Übersicht finden konnte, und fragt nach, ob Sie eine anlegen wollen. Beantworten Sie diese Frage mit Ja, gelangen Sie in ein Fenster, in dem sich bisher nur der Eintrag Hauptübersicht (Standard) befindet. Mit einem Klick auf Neu legen Sie weitere Übersichten an, die Gliederung bleibt dabei Ihnen überlassen. Es ist jedoch sinnvoll, entweder nach Themen oder nach Arbeiten zu gliedern. Im Fall einer Themengliederung bei der Beispieldatenbank "Nordwind" würden beispielsweise themenorientierte Übersichtsseiten alle Datenbankelemente für Kunden, Mitarbeiter und Lieferanten anbieten. Falls Sie nach Arbeitsschritten gliedern wollen, wäre es z.B. sinnvoll, Übersichtsseiten für Neuanlage von Datensätzen, Aktualisierung und Berichte einzurichten. Damit Sie später nicht den Überblick verlieren, legen Sie vorab eine Skizze an, auf der Sie festhalten, wie sich die einzelnen Seiten verzweigen sollen. Anschließend können Sie, beginnend bei der Hauptübersicht, mit Bearbeiten | Neu Verknüpfungen zu der ersten Ebene der Übersichtsseiten anlegen. Legen Sie einen Text für die Schaltfläche fest und wählen Sie unter Befehl den Eintrag Zur Übersicht gehen. Im Feld Übersicht: können Sie nun den Namen der gewünschten Übersicht auswählen. Der Befehl Zur Übersicht gehen dient der Organisation der Übersichtsseiten; alle anderen Befehle, wie z.B. Formular im Hinzufügemodus öffnen, führen die jeweilige Aktion aus. Sie können jederzeit überprüfen, wie gelungen der Aufbau Ihrer Übersicht ist, indem Sie im Datenbankfenster das vom Übersichts-Manager angelegte Formular Übersicht öffnen. Um weitere Änderungen vorzunehmen, wählen Sie wieder Extras | Add-Ins | Übersichts-Manager. Wenn Sie mit Ihrer Übersicht zufrieden sind, können Sie Access anweisen, diese bei jedem Neustart automatisch zu laden. Wechseln Sie dafür in das Menü Extras | Start und wählen Sie im Feld Formular anzeigen das Formular Übersicht aus. Unterformulare von mehreren Faktoren abhängig machen Der Inhalt von Unterformularen hängt davon ab, welcher Datensatz im Hauptformular aktiv ist. Allerdings ist es manchmal praktisch, den Inhalt eines Unterformulars von mehreren Faktoren abhängig zu machen. So ist es z.B. möglich, im Formular Kategorien der Beispiel-Datenbank Nordwind ein zusätzliches Kriterium Lieferanten einzufügen, das die Auswahl der im Unterformular angezeigten Produkte weiter eingrenzt. Dafür erstellen Sie zunächst mit Hilfe des Abfrageassistenten eine neue, auf der Tabelle Lieferanten basierende Abfrage. Nehmen Sie die Felder Lieferanten-Nr und Firma in die Auswahl auf und klicken Sie auf Fertigstellen. Wählen Sie dann im Menü Ansicht den Punkt SQL und markieren Sie den gesamten sichtbaren Text, um ihn mit Bearbeiten | Kopieren in die Zwischenablage zu befördern. Öffnen Sie nun das Formular Kategorien in der Entwurfsansicht und legen Sie ein neues Kombinationsfeld an. Nach einem rechten Mausklick auf das Feld wählen Sie Eigenschaften und klicken in die Eingabezeile Datensatzherkunft im Register Daten. Mit [Strg] [V] fügen Sie hier die zuvor kopierte Zeichenfolge ein. Lassen Sie die Eigenschaften des Kombinationsfeldes geöffnet und wechseln Sie zum Register Alle. Als Name geben Sie die Bezeichnung Lieferant ein, in das Feld Spaltenanzahl schreiben Sie eine 2 und in das Feld Spaltenbreiten die Zeichenfolge 0;4. Ein Makro sorgt nun dafür, dass das Unterformular nach den Änderungen des Kombinationsfeldes aktualisiert wird. Dafür klicken Sie zuerst mit der linken Maustaste in das Feld Nach Aktualisieren im Register Ereignis und anschließend auf die Schaltfläche mit den drei Punkten rechts daneben. In der kleinen Dialogbox wählen Sie Makro-Editor. Im Makro-Editor wählen Sie in der ersten Zeile der Spalte Aktion den Eintrag AktualisierenDaten aus und schreiben in das Feld Steuerelementname das Kategorien-Unterformular. Nachdem Sie den Makro-Editor und das Formular Kategorien geschlossen und gespeichert haben, erstellen Sie eine neue Abfrage mit Hilfe des Abfrageassistenten, diesmal aber basierend auf der Tabelle Artikel. Übernehmen Sie sämtliche Felder in die Auswahl und schreiben Sie in die Zeile Kriterium des Feldes Lieferanten-Nr das Kriterium [Formulare] | [Kategorien] | [Lieferant]. Speichern Sie diese Abfrage und öffnen Sie das Formular Kategorien-Unterformular in der Entwurfsansicht. In den Formulareigenschaften tragen Sie unter Datenherkunft die soeben erstellte Abfrage ein und speichern und schließen das Unterformular. Um die neue Verhaltensweise zu testen, öffnen Sie wieder das Formular Kategorien in der Normalansicht, wählen eine Kategorie und danach einen Lieferanten aus. Access aktualisiert die Daten des Unterformulars unmittelbar, nachdem Sie einen Lieferanten ausgewählt haben. Wildcards I Sie können in Access nach Platzhalter-Zeichen suchen, indem Sie sie einfach in eckigen Klammern angeben. So finden Sie beispielsweise mit dem Suchbegriff [*] alle Einträge Ihrer Datenbank, die als Zeichenkette einen Stern enthalten. Mit den übrigen Platzhaltern wie dem Fragezeichen funktioniert das ebenfalls. Wildcards II Wir bekommen Teile unserer Kundendaten auf Diskette und importieren sie dann in MS-Access. Spezielle Kunden sind dabei mit einem Stern * vor dem Kundennamen markiert. Ich möchte mir nun mit einer Abwahlabfrage genau diese Kunden anzeigen lassen. Leider funktioniert der Ausdruck Wie"*" als Kriterium nicht, es werden trotzdem alle Kunden angezeigt. Der Stern * ist ein sogenanntes Platzhalter-Zeichen und steht in einem Ausdruck für eine beliebige Anzahl von Zeichen. Der Ausdruck Wie"*" trifft daher auf jeden Datensatz zu, das heißt, die Auswahl wird überhaupt nicht eingeschränkt. Die Lösung Ihres Problems erfordert die Verwendung einer Funktion namens InStr, die das erste Vorkommen von beliebigen Zeichenketten innerhalb einer anderen Zeichenkette prüft und die entsprechende Position als Ergebnis liefert. Dabei sind keine Platzhalter-Zeichen als Suchbegriff möglich, die Funktion sucht nur nach der angegebenen konstanten Zeichenfolge. Die einfachste Syntax für die InStr-Funktion lautet: InStr (String1;String2), wobei String1 die zu durchsuchende Zeichenkette und String2 der Suchbegriff ist. Falls String2 in String1 enthalten ist, liefert die Funktion die Position des ersten übereinstimmenden Zeichens zurück, im anderen Fall ist das Ergebnis eine Null. Für Ihr Problem wäre String1 das Feld mit den Kundennamen und String2 die nur aus einem Zeichen bestehende Zeichenkette *. Wenn Sie nun in einer zusätzlichen Spalte Ihrer Abfrage die InStr-Funktion entsprechend definieren (etwa Ausdruck1:InStr([Nachname]; "*") und als Kriterium für diese Spalte ">0" angeben, so erhalten Sie als Ergebnis eine Abfrage, die nur die Datensätze anzeigt, die an beliebiger Position im Kundennamen einen Stern enthalten. Works-Datenbank importieren WDB-Datenbanken unter der Erweiterung *.dbf abspeichern. Access-Menü: Datei | Externe Daten | Importieren (Dateityp dBaseIII *.dbf einstellen) Zahlen zweistellig runden Es gelingt mir nur, mit Funktionen wie ZInteger Währungsbeträge auf zwei Kommastellen korrekt zu runden. Ohne diese Funktion errechnet Access einen Cent zuviel oder zuwenig. Wenn Sie ein Feld mit dem Datentyp Währung verwenden, berücksichtigt Access vier statt der im kaufmännischen Bereich üblichen zwei Nachkommastellen. Das kann je nach Ergebnis zu den unerwünschten Rundungsfehlern führen. Wenn Sie die Beträge 10,204 und 50,304 Euro addieren, stehen auf der Rechnung die zweistelligen Beträge 10,20 und 50,30 Mark, weil Access in beiden Fällen abrundet. Trotzdem rechnet Access als Ergebnis 60,51 Euro aus, weil es die tatsächlich Summe von 60,508 Euro aufrundet. Um die Genauigkeit während des gesamten Rechenprozesses auf zwei Nachkommastellen zu reduzieren, nutzen Sie Formeln, die unerwünschte Nachkommastellen abschneiden. Außerdem können Sie mit Eingabeformaten zusätzlich sicherstellen, dass der Anwender immer nur zweistellige Beträge eingibt. Die Eingabeformate definiert man im Entwurfsmodus der betreffenden Tabelle. Ein Feld mit dem Eingabeformat #.##0,00 beispielsweise erlaubt nur Beträge unter 10.000 Euro mit genau zwei Nachkommastellen. Die Rautenzeichen sind dabei Platzhalter für Ziffern sowie Plus- und Minuszeichen. Der Punkt dient als Tausendertrennzeichen. Die Nullen sind Platzhalter für Ziffern, die Sie auf jeden Fall eingeben müssen. Die beiden Nullen nach dem Komma erzwingen also die Eingabe von genau zwei Nachkommastellen. Andernfalls weist Access die Eingabe als unkorrekt zurück. Trotzdem kommt es vor, dass eine Access-Funktion vier oder mehr Nachkommastellen berechnet. In diesem Fall hilft eine einfache mathematische Formel weiter: Wert = Int (Wert * 100) / 100. Diese Formel schneidet die dritte und vierte Nachkommastelle der Variablen Wert ab. Die Variable enthält z.B. den Wert 651,825. Die Multiplikation mit 100 verschiebt das Komma um zwei Stellen nach rechts, so dass Access den Wert 65.182,5 errechnet. Danach schneidet die INT()-Funktion alle Nachkommastellen ab. Das Ergebnis 65.182 wird wieder durch 100 geteilt, so dass ein zweistelliger Betrag von 651,82 Euro herauskommt. So ist sichergestellt, dass ein Rechnungsbetrag wirklich der Summe aller Rechnungspositionen entspricht. Wenn man statt der 100 den Wert 10 in die Formel einsetzt, nutzt Access nur die erste Nachkommastelle. |