Access liefert standardmäßig bereits einige Assistenten mit. Für die Format-Eigenschaft jedoch liefert es nur ein Auswahlfeld mit einigen voreingestellten Optionen wie verschiedneen Zeit-, Zahlen und Boolean-Formaten. Diese dienen durchaus als gute Beispiele, wie man selbst Formatierungen vornehmen kann, aber wenn man sich dann an diese Aufgabe begibt, wird schnell ein ziemliches Experimentieren daraus. Um diesen Teil zu vereinfachen, wollen wir Sie mit einem Assistenten unterstützen. Dieser soll direkt über das Eingabefenster für die Format-Eigenschaft geöffnet werden und die Möglichkeit bieten, verschiedene Werte einzugeben und diese mit dem geünwschten Formatierungsausdruck zu testen. Und natürlich finden Sie in diesem Beitrag die Anleitung, wie Sie den Assistenten selbst erstellen können!
Die Format-Eigenschaft
Die Eigenschaft Format kennen Sie von verschiedenen Situationen. Das erste Mal begegnet sie einem beim Erstellen einer neuen Datenbankanwendung bereits im Tabellenentwurf für neue Felder beispielsweise des Datentyps Kurzer Text (siehe Bild 1). An dieser Stelle finden wir noch nicht einmal eine Auswahlliste mit verschiedenen Optionen vor, sodass wir zu eigenen Versuchen mit den verschiedenen Platzhaltern und Möglichkeiten der Format-Eigenschaft angehalten sind.
Bild 1: Format-Eigenschaft im Tabellenentwurf
Erstellen wir Abfragen auf Basis einer solchen Tabelle, finden wir hier ebenfalls die Möglichkeit, die Format-Eigenschaft zu setzen. Damit würden wir eventuelle Einstellungen aus der zugrunde liegenden Tabelle überschreiben. Auch hier finden wir keine Unterstützung zum Zusammenstellen der Ausdrücke für die Format-Eigenschaft.
Damit landen wir bei den Formularen, wo wir Steuerelemente auf Basis der Felder der als Datensatzquelle verwendeten Tabelle oder Abfrage hinzufügen. Auch hier finden wir die Eigenschaft Format vor. Allerdings sehen wir an dieser Stelle bereits ein reichlich gefülltes Auswahlfeld für verschiedene Formatierungen (siehe Bild 2).
Bild 2: Auswahl verschiedener Formate
Wenn wir nun an der einen oder anderen Stelle einen Format-Ausdruck festlegen wollen, der die im Feld gespeicherten Daten in der gewünschten Art formatiert, müssen wir in die Entwurfsansicht wechseln, den Format-Ausdruck definieren, zurück zur Datenblattansicht wechseln, prüfen, ob der Format-Ausdruck die gewünschte Ansicht liefert und falls nicht, wieder zurück zur Entwurfsansicht wechseln, um den Wert der Format-Eigenschaft weiter zu optimieren.
Es gibt in Formularen eine Möglichkeit, den Formatausdruck für ein Feld ohne ständiges Wechseln zwischen Formular- und Entwurfsansicht zu testen. Dabei handelt es sich um die Layout-Ansicht. Hier können wir das betroffene Feld markieren und die Eigenschaft Format anpassen, während die Formatierung direkt auf die aktuell angezeigten Daten angewendet wird (siehe Bild 3).
Bild 3: Anpassen von Formaten in der Layoutansicht von Formularen
In Tabellen und Abfragen steht diese Möglichkeit allerdings nicht zur Verfügung, sodass wir mit dem hier vorgestellten Assistenten eine alternative Lösung anbieten wollen. Der Assistent soll außerdem noch einen weiteren Mehrwert bieten: Er soll mehrere Werte gleichzeitig inklusive der formatierten Version anzeigen können.
Grundgerüst des Assistenten
Die grundlegende Vorgehensweise beim Erstellen eines Eigenschafts-Assistenten, wie wir ihn hier beschreiben, finden Sie im Beitrag Eigenschaftsassistenten oder Property Wizards (www.access-im-unternehmen.de/****). Im vorliegenden Beitrag beschreiben wir nur kurz die Anwendung der dort vorgestellten Techniken anhand unserer konkreten Umsetzung.
Als Erstes benötigen wir eine Tabelle namens USysRegInfo, welche die Daten für die Registrierung des Assistenten in der Windows-Registry enthält. Diese werden beim Installieren mit dem Add-In-Manager in die Registry eingetragen, damit Access den Assistenten an der gewünschten Stelle anbieten kann.
Die Tabelle enthält die Daten aus Bild 4. Wichtig ist, dass der Name der .accda-Datei genau in der Zeile mit dem Wert Library angegeben wird und das der Name der aufzurufenden Funktion des Assistenten in der Zeile mit dem Wert Function erscheint.
Bild 4: Die Tabelle USysRegInfo mit den Daten für die Registrierung des Assistenten
Formulare für den Assistenten vorbereiten
Der Assistent soll seine Daten in Haupt- und Unterformular anzeigen. Das Hauptformular soll das Textfeld zur Eingabe des zu testenden Format-Ausdrucks bereitstellen sowie die beiden Schaltflächen zum Übernehmen der Eingabe oder zum Abbrechen. Außerdem soll es das Unterformular anzeigen, das in der Datenblattansicht zwei Spalten anzeigt.
Die erste enthält die Daten, die formatiert werden sollen, in der gespeicherten Version. Die zweite soll die Daten mit dem Formatausdruck formatieren, den der Benutzer im Hauptformular angibt. Die Datensätze des Unterformulars in der Datenblattansicht sollen die Daten aus der eigentlichen Datenquelle anzeigen. Wenn wir also die Eigenschaft Format für das Feld PLZ einer Tabelle anpassen wollen, dann soll das Unterformular die Werte des Feldes PLZ für alle Datensätze der zugrunde liegenden Tabelle anzeigen.
Unterformular anlegen
Daher erstellen wir nun zwei Formulare. Wir beginnen mit dem Unterformular, das wir unter dem Namen sfmFormatassistent speichern. Es sieht in der Entwurfsansicht wie in Bild 5 aus. Wir fügen diesem zwei Textfelder samt Bezeichnungsfeldern hinzu. Die Bezeichnungsfelder erhalten die Beschriftungen Wert und Formatierter Wert. Die Textfelder versehen wir mit den Namen txtWert und txtFormatierterWert. Damit die Daten des Unterformulars in der Datenblattansicht angezeigt werden, stellen wir die Eigenschaft Standardansicht auf den Wert Datenblatt ein. Danach speichern und schließen wir das Unterformular.
Bild 5: Unterformular des Formulars des Assistenten
Hauptformular anlegen
Das Hauptformular legen wir unter dem Namen frmFormatassistent an. Solange wir mit dem Formular des Assistenten keine Daten bearbeiten wollen, benötigen wir einige Elemente nicht. Diese blenden wir aus, indem wir die Eigenschaften Datensatzmarkierer, Navigationsschaltflächen, Trennlinien und Bildlaufleisten auf Nein einstellen. Außerdem soll das Formular immer zentriert im Access-Fenster angezeigt werden, sodass wir die Eigenschaft Automatisch zentrieren auf den Wert Ja einstellen.
Außerdem stellen wir den Wert der Eigenschaft Beschriftung auf einen passenden Titel ein, in diesem Fall amvFormatassistent.
Dann folgen die eigentlichen Steuerelement. Ganz oben platzieren wir ein Textfeld mit dem Namen txtFormat. Daneben legen wir ein weiteres Textfeld an, dieses heißt txtFormatDeutsch. Der Grund ist, dass die deutschen Formatierungen teilweise anders lauten als die englischen, die wir hier nutzen müssen.
Darunter fügen wir das Unterformular ein, indem wir es aus dem Navigationsbereich in den Formularentwurf ziehen. Unter diesem platzieren wir die beiden Schaltflächen cmdOK und cmdAbbrechen, sodass das Formular wie in Bild 6 aussieht. Außerdem bringen wir noch eine weitere Schaltfläche namens cmdBeispielwerteEinlesen hinzu.
Bild 6: Hauptformular des Assistenten mit Unterformular
Für die Schaltflächen hinterlegen wir die folgenden Ereignisprozeduren:
Private Sub cmdAbbrechen_Click() DoCmd.Close acForm, Me.Name End Sub Private Sub cmdOK_Click() Me.Visible = False End Sub
Bevor wir mit der Programmierung der Funktion des Formulars fortschreiten, kümmern wir uns als Erstes noch um Beispieldaten für den Assistenten und dann um seinen Aufruf und die Auswertung des Ergebnisses.
Vorbereitung von Beispieldaten für das Unterformular
Der Benutzer soll direkt mit dem Format experimentieren können und deshalb stellen wir ihm im Unterformular zehn Datensätze zur Verfügung. Diese stammen aus der Tabelle tblWerteFormatierteWerte, die in der Entwurfsansicht wie in Bild 7 aussieht. Wir haben Felder für die verschiedenen Datentypen festgelegt. Damit diese nicht alle angezeigt werden müssen, der Benutzer aber dennoch mit realistischen Beispielwerten arbeiten kann, weisen wir der Eigenschaft Steuerelementinhalt beziehungsweise unter VBA ControlSource des Feldes txtWert das jeweilige Feld zu.
Bild 7: Entwurf der Tabelle für die Beispieldaten
Wechseln wir in die Datenblattansicht, sehen wir, dass wir bereits einige Beispieldatensätze eingegeben haben – zugegebenermaßen etwas improvisiert, aber der Benutzer kann diese nach seinen eigenen Wünschen anpassen (siehe Bild 8).
Bild 8: Beispielwerte für die verschiedenen Felddatentypen
Startfunktion für den Assistenten
Um das Formular beim Aufrufen des Assistenten anzuzeigen, müssen wir die Funktion, die wir in der Tabelle USysRegInfo hinterlegt haben, zunächst mit den entsprechenden Anweisungen füllen. Diese Funktion soll nicht nur das Formular öffnen, sondern auch noch die benötigten Informationen übergeben. Diese erhalten wir in dieser Funktion über die standardmäßig zu definierenden Parameter:
- strObject liefert den Namen des Objekts, also Tabelle, Abfrage, Formular oder Bericht, von dem aus der Assistent aufgerufen wurde.
- strControl liefert den Namen des Tabellen- oder Abfragefeldes beziehungsweise des Formular- oder Berichtssteuerelements, für welches der Assistent gestartet wurde.
- strCurVal liefert, sofern vorhanden, den aktuellen Wert der Format-Eigenschaft für das auslösende Element.
Die Funktion aus Listing 1 stellt zunächst den Namen des zu öffnenden Formulars, hier frmFormatassistent, in der Variablen strFormular ein. Dann fügt es die Werte der drei Parameter in einer einzigen Zeichenkette zusammen – getrennt durch das Pipe-Zeichen. Das sieht beispielsweise wie folgt aus:
Public Function amvFormatAssistent(strObject As String, strControl As String, strCurVal As String) As String Dim strOpenArgs As String Dim strFormular As String strFormular = "frmFormatassistent" strOpenArgs = strObject & "|" & strControl & "|" & strCurVal DoCmd.OpenForm strFormular, WindowMode:=acDialog, OpenArgs:=strOpenArgs If IstFormularGeoeffnet(strFormular) Then amvFormatAssistent = Nz(Forms(strFormular)!txtFormatDeutsch, "") DoCmd.Close acForm, strFormular End If End Function
Listing 1: Startfunktion des Assistenten
tblKunden|PLZ|"D-"@@@@@
Danach ruft die Funktion das Formular mit der DoCmd.Open-Methode auf und übergibt den Inhalt von strOpenArgs mit dem Parameter OpenArgs. Durch den Parameter WindowMode:=acDialog wird das Formular außerdem als modaler Dialog geöffnet. Dies sorgt dafür, dass der Code an dieser Stelle angehalten wird.
Hier folgt nun die eigentliche Bearbeitung. Diese schließt der Benutzer entweder mit der OK– oder der Abbrechen-Schaltfläche ab. Dadurch wird das Formular entweder ausblendet oder geschlossen, was beides dazu führt, dass der aufrufende Code fortgesetzt wird.
Hier kommt die Funktion IstFormularGeoeffnet zum Einsatz und überprüft, ob das Formular noch geöffnet ist. Ist das nicht der Fall, hat der Benutzer die Abbrechen-Schaltfläche betätigt und es ist nichts weiter zu tun. Ist das Formular jedoch noch geöffnet, muss der Benutzer es durch einen Klick auf die Schaltfläche cmdOK unsichtbar gemacht haben und die Anweisungen innerhalb der If…Then-Bedingung werden ausgeführt.
Hier liest die Funktion den Wert des Textfeldes txtFormatDeutsch aus dem noch geöffneten Formular als Rückgabewert der Funktion amvFormatAssistent ein und schließt das Formular dann. Hier ist zu berücksichtigen, dass das Textfeld txtFormat auch leer sein kann, also den Wert Null enthält. In diesem Fall ist der Wert Null durch eine leere Zeichenkette zu ersetzen, was wir mit der Nz-Funktion erledigen.
Beim Öffnen des Formulars
Beim Öffnen des Formulars wird die Prozedur aus Listing 2 aufgerufen. Diese deklariert einige Variablen und liest als erstes den Inhalt der Eigenschaft OpenArgs in die Variable strOpenArgs ein. Dabei wandelt den eventuell vorhandenen Wert Null in eine leere Zeichenkette um, da die Zuweisung des Wertes Null zu einer String-Variablen einen Fehler auslösen würde.
Private Sub Form_Open(Cancel As Integer) Dim strOpenArgs As String Dim strCurVal As String Dim intDataType As DataTypeEnum Dim strSQL As String strOpenArgs = Nz(Me.OpenArgs, "") If Len(strOpenArgs) = 0 Then MsgBox "Der Assistent kann nicht ohne Angabe der Parameter aufgerufen werden." Cancel = True Exit Sub End If If Not Len(strOpenArgs) = 0 Then strObject = Split(strOpenArgs, "|")(0) strControl = Split(strOpenArgs, "|")(1) strCurVal = Split(strOpenArgs, "|")(2) Else MsgBox "Der Assistent kann nicht ohne Angabe der Parameter aufgerufen werden." Cancel = True Exit Sub End If Me!txtFormatDeutsch = strCurVal intObjectType = GetObjectType(strObject) intDataType = GetDataType(strObject, strControl, intObjectType) strCurVal = UebersetzeNachEnglisch(strCurVal, intDataType) Me!txtFormat = strCurVal Select Case intDataType Case dbText Me!sfmFormatassistent.Form!txtWert.ControlSource = "WertText" Me!sfmFormatassistent.Form!txtFormatierterWert.ControlSource = "WertText" Case dbCurrency Me!sfmFormatassistent.Form!txtWert.ControlSource = "WertWaehrung" Me!sfmFormatassistent.Form!txtFormatierterWert.ControlSource = "WertWaehrung" Case dbBoolean Me!sfmFormatassistent.Form!txtWert.ControlSource = "WertBoolean" Me!sfmFormatassistent.Form!txtFormatierterWert.ControlSource = "WertBoolean" Case dbDate Me!sfmFormatassistent.Form!txtWert.ControlSource = "WertDatum" Me!sfmFormatassistent.Form!txtFormatierterWert.ControlSource = "WertDatum" Case dbInteger, dbLong Me!sfmFormatassistent.Form!txtWert.ControlSource = "WertZahl" Me!sfmFormatassistent.Form!txtFormatierterWert.ControlSource = "WertZahl" Case dbSingle, dbDouble Me!sfmFormatassistent.Form!txtWert.ControlSource = "WertZahl" Me!sfmFormatassistent.Form!txtFormatierterWert.ControlSource = "WertZahlMitKomma" Case Else MsgBox "Nicht definierter Felddatentyp: " & intDataType End Select Me!sfmFormatassistent.Form!txtFormatierterWert.Format = Me!txtFormat End Sub
Listing 2: Beim Aufrufen des Formulars des Assistenten
Dann prüft die Prozedur, ob strOpenArgs überhaupt eine Zeichenkette mit einer Länge größer 0 enthält. Falls ja, untersucht sie die Zeichenkette genauer. In diesem Fall zerlegen wir diese mit der Split-Funktion in die durch das Pipe-Zeichen getrennten Einzelteile. Über den nachgeschalteten Index greifen wir auf das erste, zweite und dritte Element einer Zeichenkette wie beispielsweise der folgenden zu:
tblKunden|PLZ|"D-"@@@@@
Das erste Element landet in der Variablen strObject, das zweite in strControl und das dritte in strCurVal. Ist strOpenArgs hingegen leer, erscheint eine entsprechende Meldung und das Formular die Prozedur wird mit Exit Sub verlassen. Außerdem stellen wir noch den Parameter Cancel auf den Wert True ein, damit auch das Öffnen des Formulars abgebrochen wird.
Sind alle Werte in die Variablen eingelesen, weisen wir den Wert aus strCurVal dem Textfeld txtFormatDeutsch zu. Dies ist also die Formatierung, die der Benutzer gegebenenfalls bereits in der entsprechenden Eigenschaft des Feldes oder Steuerelements festgelegt hat. Die englische Version wollen wir im Textfeld txtFormat anzeigen. Dazu müssen wir das Format jedoch erst noch übersetzen und dazu benötigen wir noch weitere Informationen.
[
strObject liefert uns den Namen des Objekts, von dem aus der Benutzer den Assistenten aufgerufen hat. Damit wollen wir den Typ des Objekts ermitteln. Davon ausgehend, dass jeder Objektname nur einmal pro Datenbank angelegt werden kann, können wir damit die Tabelle MSysObjects durchsuchen und aus dieser den Typ ermitteln. Das erledigt die Hilfsfunktion GetObjectType für uns, die wir weiter unten beschreiben.
Diese wandelt außerdem die kryptischen Zahlenwerte wie zum Beispiel -32.768 für Formulare in handliche Konstanten wie acForm um und wir speichern den ermittelten Wert in der Variablen intObjectType.
Den Objekttyp benötigen wir unter anderem für die nachfolgende Ermittlung des Felddatentyps des mit der Format-Eigenschaft auszustattenden Feldes. Diese erfolgt mit der Funktion GetDataType. Dieser übergeben wir den Namen des Objekts und des Felds beziehungsweise Steuerelements und schreiben das Ergebnis in Form eines der entsprechenden Konstanten wie beispielsweise acText für ein Textfeld mit dem Datentyp Kurzer Text in die Variable intDataType. Diese hat wiederum den Datentyp DataTypeEnum.
Den Datentyp nutzen wir nun in der Funktion UebersetzeNachEnglisch, der wir den zu übersetzenden Ausdruck übergeben sowie den Datentyp. Das Ergebnis dieses Aufrufs landet schließlich im Textfeld txtFormat. Wie und warum wir das Format übersetzen, erläutern wir weiter unten.
Den Inhalt der Variablen intDataType untersuchen wir dann in einer Select Case-Anweisung daraufhin, um welchen Datentyp es sich handelt. Abhängig davon nehmen wir nun Einstellungen im Unterformular des Assistenten vor. Dieses zeigt ja bereits die Tabelle der Tabelle tblWerteFormatierteWerte an.
Je nachdem, welchen Datentyp das Feld hat, für das der Benutzer den Format-Assistenten aufgerufen hat, stellen wir die Eigenschaft Steuerelementinhalt auf eines der Felder WertText, WertWaehrung, WertBoolean, WertDatum, WertZahl oder WertZahlMitKomma ein.
Hat der Benutzer einen anderen Datentyp gewählt, erscheint eine entsprechende Meldung – an dieser Stelle könnte man die Prozedur noch für diesen zusätzlichen Datentyp erweitern. Schließlich stellen wir die Eigenschaft Format des Feldes txtFormatierterWert auf die im Textfeld txtFormat gespeicherte Formatierung ein.
Ändern des Formats
Wenn der Benutzer die Formatierung im Textfeld txtFormat ändert, soll sich dies jeweils direkt auf die zu formatierenden Beispieltextfelder auswirken. Dazu hinterlegen wir für das Ereignis Bei Änderung das Format für die Eigenschaft Format des Textfeldes txtFormatierterWert. Hier lesen wir allerdings nicht den aktuellen Wert aus, also Value, sondern den aktuell angezeigten Inhalt aus der Eigenschaft Text (der aktuelle Inhalt wird erst nach dem Speichern des Inhalts zum Value):
Private Sub txtFormat_Change() Me!sfmFormatassistent.Form!txtFormatierterWert.Format _ = Me!txtFormat.Text End Sub
Modul mdlTools
Die Hilfsfunktion GetObjectType erwartet den Namen des zu untersuchenden Objekts als Parameter und soll den Typ in Form einer Konstanten der Auflistung acObjectType zurückliefern. Dazu öffnen wir die Systemtabelle MSysObjects der Datenbank, von der aus der Assistent geöffnet wurde, als Recordset. Als Kriterium der zu verwendenden Abfrage verwenden wir das Feld Name, dessen Wert mit dem per Parameter überlieferten Objektnamen übereinstimmen soll.
Es kommen nur die vier Elementtypen Tabelle, Abfrage, Formular oder Berichte als Elementtypen in Frage. Daher prüfen wir für den Wert Type des gefundenen Datensatzes der Tabelle MSysObjects, ob dieser einen der folgenden Werte enthält:
- 1: Das Objekt ist eine Tabelle.
- 5: Das Objekt ist eine Abfrage.
- -32.768: Das Objekt ist ein Formular.
- -32.764: Das Objekt ist ein Bericht.
Abhängig davon, welchen Objekttyp das Element hat, geben wir einen der Werte acTable, acQuery, acForm oder acReport zurück. Den kompletten Code dieser Funktion zeigt Listing 3.
Public Function GetObjectType(strObject As String) As AcObjectType Dim dbc As DAO.Database Dim rst As DAO.Recordset Set db = CodeDb Set rst = db.OpenRecordset("SELECT * FROM MSysObjects WHERE Name = ''" & strObject & "''", dbOpenDynaset) If Not rst.EOF Then Select Case rst!Type Case 1 ''Tabelle GetObjectType = acTable Case 5 ''Abrfrage GetObjectType = acQuery Case -32768 ''Formulare GetObjectType = acForm Case -32764 ''Bericht GetObjectType = acReport End Select End If End Function
Listing 3: Die Hilfsfunktion GetObjectType
Die Hilfsfunktion GetDataType
Die zweite Hilfsfunktion finden wir ebenfalls im Modul mdlTools (siehe Listing 4). Die Funktion GetDataType hat die Aufgabe, zu dem mit strControl gelieferten Element des mit strObject gelieferten Objekts mit dem Typ aus intObjectType den Datentyp zu liefern.
Public Function GetDataType(strObject As String, strControl As String, intObjectType As acObjectType) As DataTypeEnum Dim db As DAO.Database Dim tdf As DAO.TableDef Dim qdf As DAO.QueryDef Dim frm As Form Dim rpt As Report Dim fld As DAO.Field Dim strRecordsource As String Dim rst As DAO.Recordset Set db = CurrentDb Select Case intObjectType Case acTable Set tdf = db.TableDefs(strObject) Set fld = tdf.Fields(strControl) GetDataType = fld.Type Case acQuery Set qdf = db.QueryDefs(strObject) Set fld = qdf.Fields(strControl) GetDataType = fld.Type Case acForm, acReport Select Case intObjectType Case acForm Set frm = Forms(strObject) strRecordsource = frm.RecordSource Case acReport Set rpt = Reports(strObject) strRecordsource = rpt.RecordSource End Select Select Case Left(strRecordsource, 7) Case "SELECT" Set qdf = db.OpenRecordset(strRecordsource) Set fld = qdf.Fields(strControl) Case Else Set tdf = db.TableDefs(strRecordsource) Set fld = tdf.Fields(strControl) End Select GetDataType = fld.Type End Select End Function
Listing 4: Die Hilfsfunktion GetFieldType
Das bedeutet, dass sie genauso den Datentyp eines Feldes einer Tabelle wie eines Steuerelements in einem Formular oder Bericht liefern können soll.
Zu diesem Zweck nimmt die Prozedur die drei genannten Parameter entgegen und liefert einen Wert der Auflistung DataTypeEnum zurück. Wir deklarieren hier gleich eine ganze Reihe von Objektvariablen für die unterschiedlichen Fälle, also zum Beispiel ein TableDef-, ein QueryDef-, ein Form– oder ein Report-Objekt.
Gleich zu Beginn unterscheiden wir in einer Select Case-Bedingung zwischen den verschiedenen Werten des Parameters intObjectType und somit den unterschiedlichen Objekttypen Tabelle, Abfrage, Formular und Bericht.
Im Fall einer Tabelle ermitteln wir das TableDef-Objekt und das Field-Element für das mit strControl angegebene Feld. Den Typ des Feldes ermitteln wir mit der Type-Eigenschaft und tragen diese als Rückgabewert der Funktion GetDataType ein.
Die Vorgehensweise für eine Abfrage sieht identisch aus, nur dass wir hier ein QueryDef-Objekt referenzieren und kein TableDef-Objekt. Schließlich folgen noch die Formulare und Berichte. Diese verarbeiten wir in einem Case-Zweig, der noch eine verschachtelte Select Case-Bedingung enthält. In dieser unterscheiden wir zunächst nach acForm und acReport.
Für ein Formular lesen wir einen Verweis auf das entsprechende Formular über die Forms-Auflistung ein und schreiben dann den Wert der Eigenschaft RecordSource, also der Datensatzquelle, in die Variable strRecordsource ein.
Das Gleiche erledigen wir auch im Fall eines Berichts, nur dass wir hier auf die Reports-Auflistung zugreifen und den Verweis in die Report-Variable rpt schreiben.
Danach prüfen wir, ob das Formular oder der Bericht eine SELECT-Abfrage oder die reine Angabe des Namens einer Tabelle oder Abfrage als Datensatzquelle verwenden. Im Falle einer SELECT-Anweisung erstellen wir ein Recordset auf Basis dieser Datensatzquelle und referenzieren diese mit der Variablen qdf.
Aus dieser ermitteln wir dann über den Namen des Elements aus der Fields-Auflistung einen Verweis auf das zu formatierende Feld. Dessen Type-Eigenschaft liefert dann wiederum den Felddatentyp, den wir als Ergebnis der Funktion GetDataType zurückgeben.
Probleme mit Deutsch/Englisch in Formatausdrücken
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo