Beispieldaten generieren

Zusammenfassung

Legen Sie mit wenigen Codezeilen Beispieldaten für Ihre Datenbanken in der Entwicklungsphase an.

Techniken

Zufallsfunktionen, Rnd, Int, zufällige Auswahl von Datensätzen

Voraussetzungen

Access 97 oder höher

Beispieldateien

Testdaten97.mdb, Testdaten00.mdb

André Minhorst, Duisburg

Eine der leidigsten Aufgaben bei der Datenbankentwicklung ist das Eintippen von Testdaten. Es ist ja ganz schön, zwischendurch mal eine etwas weniger anspruchsvolle Tätigkeit auszuüben, aber diese Zeit könnte man sicher sinnvoller nutzen, indem man einen Kaffee trinkt oder ein wenig im Internet surft. Ein wenig Vorarbeit ist natürlich notwendig, aber dann sind die Beispieldaten im Nu generiert.

Mancher Entwickler ist sich seiner selbst so sicher, dass er Anwendungen locker ohne Testdaten entwickelt. Wenn die Anwendung in Betrieb geht, ist der Nachholbedarf dann allerdings groß:

Fehler treten auf, die Daten passen nicht in die Steuerelemente und die Berichte zeigen nur die Hälfte der gewünschten Informationen an.

Mit ein wenig Aufwand lässt sich eine Menge ärger vermeiden: Wenn Testdaten vorhanden sind, lassen sich viele Funktionen zuverlässig prüfen und die Steuerelemente in Formularen und Berichten der gewünschten Größe anpassen.

Die optimalen Beispieldaten kommen natürlich vom Auftraggeber selbst: Wenn eine zu entwickelnde Anwendung dem Verwalten bestehender Daten dienen soll, liegt nichts näher, diese nach dem Entwurf des Datenmodells direkt in die passenden Tabellen zu integrieren. Diesen Schritt müssen Sie früher oder später vermutlich ohnehin gehen, also warum nicht sofort Die Beispieldaten kommen somit “frei Haus”.

Es gibt allerdings auch Fälle, in denen die Beispieldaten nicht auf der Straße liegen: Wenn Sie etwa ein Produkt entwickeln möchten, dessen Abnehmer noch nicht feststehen oder für das es einfach noch keine bestehenden Daten gibt, müssen Sie die Tabellen selbst füllen.

Es gibt einige Assistenten für Access, die Tabellen relativ “blind” mit Beispieldaten füllen, die dem jeweiligen Datentyp entsprechen. Das klappt für einige Fälle, aber sobald es an verknüpfte Tabellen geht, hört der Spaß meist auf.

Außerdem macht es doch wesentlich mehr Laune, beispielsweise eine Adressenliste zu testen, die richtige Namen enthält und keine per Zufall generierten Zeichenketten wie kUDvkxKskKNN. “Richtige” Beispieldaten machen auch einen wesentlich besseren Eindruck, wenn es um die Vorführung oder um eine Demoversion der jeweiligen Anwendung geht.

Woher nehmen, wenn nicht stehlen

Um etwa eine Adresstabelle mit einigen hundert oder tausend Datensätzen zu füllen, benötigen Sie natürlich einige Basisdaten – aber nicht unbedingt so viele, wie Sie Datensätze erzeugen möchten. Mit 20 bis 30 Vornamen, Nachnamen, Orten und Straßen lässt sich schon eine Menge eindeutige Kombinationen erzeugen. Die müssen Sie natürlich irgendwo her nehmen – also greifen Sie sich einfach das nächste Telefonbuch und “hacken” ein paar Daten in eine Basistabelle. Denn merke: Nichts ist monotoner, als Beispieldaten einzugeben – außer, sich die Beispieldaten auch noch ausdenken zu müssen …

Art der Daten

Welche Daten benötigt man überhaupt, um eine Datenbank mit Beispieldaten zu füllen In der Regel sollten Daten für die folgenden Felder ausreichen:

  • Vorname
  • Nachname
  • Anrede
  • Firma
  • Straße und Hausnummer
  • PLZ
  • Ort
  • Land
  • Telefon (Telefax, Mobil)
  • E-Mail
  • Internet
  • Datumsangaben
  • Zahlenwerte
  • Verknüpfungsfelder
  • Sonstige Felder wie Projektnamen, Fahrzeugnamen …
  • Daten generieren

    Die Daten für die oben genannten Felder gewinnen Sie auf unterschiedliche Arten. Für die ersten acht Felder halten Tabellen mit bestehenden Daten als Quelle her.

    Die übrigen können mit einfachen Funktionen erzeugt werden, die Sie ebenfalls wie die Funktion zum zufälligen Auswählen der bestehenden Daten im Folgenden kennen lernen.

    Zum Anlegen von Datensätzen mit Beispieldaten müssen Sie nun irgendwie dafür sorgen, dass die Daten – woher auch immer – in der Zieltabelle landen. Dazu verwendet man am Besten eine passende SQL-Anweisung, die per VBA mit den entsprechenden Daten bestückt wird. Für die Kontakttabelle aus Bild 1 könnte die Anweisung wie folgt aussehen:

    db.Execute "INSERT INTO tblPersonen
    (Anrede, Vorname, Nachname, Firma, 
    Strasse, PLZ, Ort, Bundesland, Telefon, 
    Telefax, EMail) VALUES(''" & strAnrede & 
    "'', ''" & strVorname & "'', ''" & 
    strNachname & "'', ''" & strFirma & "'', ''" 
    & strStrasse & " " & intHausnummer & "'', 
    ''" & strPLZ & "'', ''" & strOrt & "'', ''" & 
    strBundesland & "'', ''" & strVorwahl & "/" 
    & strTelefon & "'', ''" & strVorwahl & "/" 
    & strTelefax & "'', ''" & strEMail & "'')"

    Bleibt nur noch die kleine Aufgabe, die Variablen für die einzufügenden Daten mit den entsprechenden Werten zu füllen.

    Die dazu notwendige Funktionalität soll der übersicht halber auf eine öffentliche Routine und eine Klasse aufgeteilt werden, deren Methoden per Zufall die einzelnen Daten ermitteln.

    Quellcode 1: Routine zum Anlegen von Beispieldaten in einer Personen-Tabelle

    Public Sub TabelleFuellen(lngAnzahlDatensaetze As Long)
        Dim db As DAO.Database
        Dim i As Integer
        Dim objBeispieldaten As clsBeispieldaten
        Dim strAnrede As String
        Dim strVorname As String
        Dim strNachname As String
        ... weitere Deklarationen, siehe Beispieldatenbank
        ''Klasse für die Ermittlung der Zufallsdaten instanzieren
        Set objBeispieldaten = New clsBeispieldaten
        Set db = CurrentDb
        ''Gewünschte Anzahl Datensätze durchlaufen
        For i = 1 To lngAnzahlDatensaetze
            ''Beispieldaten ermitteln
            With objBeispieldaten
                .GetVorname strVorname, strGeschlecht, strAnrede
                .GetNachname strNachname
                .GetNachname strNameFirma
                .GetFirma strNameFirma, strFirma
                .GetStrasse strStrasse
                .GetHausnummer 1, 100, intHausnummer
                .GetOrt strPLZ, strOrt, strBundesland, strVorwahl
                .GetTelefon 6, 8, strTelefon
                .GetTelefon 6, 8, strTelefax
                .GetEMail strVorname, strNachname, strEMail
            End With
            ''Datensatz schreiben
            db.Execute "INSERT INTO tblPersonen(Anrede, Vorname, Nachname, Firma, Strasse, PLZ, " _            & "Ort, Bundesland, Telefon, Telefax, EMail) VALUES(''" & strAnrede & "'', ''" _            & strVorname & "'', ''" & strNachname & "'', ''" & strFirma & "'', ''" & strStrasse & " " _            & intHausnummer & "'', ''" & strPLZ & "'', ''" & strOrt & "'', ''" & strBundesland _            & "'', ''" & strVorwahl & "/" & strTelefon & "'', ''" & strVorwahl & "/" & strTelefax _            & "'', ''" & strEMail & "'')"
        Next i
        Set db = Nothing
    End Sub

    Bild 1: Diese Tabelle soll mit Beispieldaten gefüllt werden.

    Die Routine aus Quellcode 1 deklariert und instanziert zunächst die Klasse mit den Methoden zum Ermitteln der Beispieldaten und die Variablen für die per Zufall ermittelten Daten. Dann durchläuft die Routine eine Schleife und dabei die einzelnen Methoden zur Ermittlung der Daten. Diese Daten schreibt sie schließlich in einen neuen Datensatz der Personen-Tabelle.

    Die Klasse clsBeispieldaten enthält die Methoden zum Ermitteln von Daten nach dem Zufallsprinzip. Dabei werden verschiedene Techniken verwendet, die nachfolgend vorgestellt werden.

    Die Funktionen zur Generierung der Daten teilen sich in folgende Typen auf:

  • Generieren aus bestehenden Tabellen
  • Generieren von Telefonnummern
  • Generieren von E-Mail und Internetadressen aus Namen
  • Erzeugen von Datumsangaben
  • Erzeugen von Zahlenwerten in bestimmten Bereichen
  • Ermitteln von Werten für Verknüpfungsfelder aus fremden Tabellen
  • Zufallszahlen mit der Rnd-Funktion

    In fast allen nachfolgend vorgestellten Funktionen spielt die Rnd-Funktion eine Rolle. Diese Funktion ermittelt einen Zufallswert größer oder gleich 0 und kleiner 1. Um Werte aus einem bestimmten Bereich zu erhalten – beispielsweise zwischen 1 und 10 – muss man die Funktion entsprechend “einhüllen”. Der folgende Ausdruck liefert die passenden Werte:

    Int(10 * Rnd() + 1)

    Für andere Intervalle legen Sie die Werte für die zwei Variablen Obergrenze und Untergrenze fest und verwenden den folgenden Ausdruck:

    Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)

    Die nachfolgend verwendeten Ausdrücke verwenden dabei jeweils die berechneten Werte für den Ausdruck Obergrenze – Untergrenze + 1.

    Daten aus bestehenden Tabellen generieren

    Die Beispieldatenbank enthält folgende Tabellen mit Daten, die als Grundlage für Testdaten dienen können:

  • tblVornamen (Vornamen und Geschlecht)
  • tblNachnamen (Nachnamen)
  • tblStrassen (Straßennamen)
  • tblOrte (Ort, PLZ, Vorwahl, Bundesland)
  • Nachnamen ermitteln

    Daten aus Tabellen mit nur einem Feld wie tblNachnamen und tblStrassen werden mit einer Methode wie aus Quellcode 2 ermittelt.

    Dazu soll zufällig einer der Datensätze der Tabelle ermittelt werden. Dies geht am einfachsten, wenn Sie diese Aufgabe an eine Abfrage weitergeben. Diese Abfrage ist wie in Bild 2 aufgebaut.

    Wichtig ist hier, dass die Abfrage aufsteigend nach dem Feld Zufall sortiert ist. Dieses Feld enthält eine in Abhängigkeit vom Autowert des Datensatzes gebildete Zufallszahl. Da diese immer einen anderen Wert hat, ändert sich auch die Reihenfolge. Damit die Abfrage nur einen Datensatz zurückgibt, stellen Sie noch die Eigenschaft Spitzenwerte der Abfrage auf 1 ein.

    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

    Schreibe einen Kommentar