SQL: Erstellen der Übungsdatenbank

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Zum Erstellen der Tabellen für die Übungen gehen Access-Anwender folgendermaßen vor:

  • Öffnen einer vorhandenen, oder Erstellen einer neuen Access-Datenbank
  • Anlegen eines allgemeinen (globalen) VBA-Moduls
  • Kopieren der nachfolgenden Prozedur RecreateSampleTables in das Modul
  • Ausführen dieser Prozedur aus dem Direktfenster, über eine Schaltfläche, oder über die Funktionstaste F5


Ein erneutes Ausführen der Prozedur versetzt die Tabellen wieder zurück in die Ausgangslage.

'Löscht ggf. die Tabellen 'abteilung', 'mitarbeiter' und 'seminar'
'und legt sie anschließend neu an.
Public Sub RecreateSampleTables()
 
   'Definition für Tabelle abteilung
   Const DDL_ABT As String = _
         "CREATE TABLE abteilung (" & vbLf & _
         "    abt_nr      INTEGER," & vbLf & _
         "    abt_name    VARCHAR (20) NOT NULL," & vbLf & _
         "    ort         VARCHAR (20) NOT NULL," & vbLf & _
         "    CONSTRAINT  pk_abteilung PRIMARY KEY ( abt_nr )" & vbLf & _
         ");"
 
   'Anfügeabfrage für Tabelle abteilung
   Const APP_ABT_DATA As String = _
         "INSERT INTO abteilung ( abt_nr, abt_name, ort )" & vbLf & _
         "VALUES ( [@abt_nr], [@abt_name], [@ort] );"
 
   'Definition für Tabelle mitarbeiter
   Const DDL_MA As String = _
         "CREATE TABLE mitarbeiter (" & vbLf & _
         "    ma_nr       INTEGER," & vbLf & _
         "    ma_name     VARCHAR (20)   NOT NULL," & vbLf & _
         "    job         VARCHAR (20)   NOT NULL," & vbLf & _
         "    mgr         INTEGER," & vbLf & _
         "    eingestellt DATE           NOT NULL," & vbLf & _
         "    gehalt      CURRENCY       NOT NULL," & vbLf & _
         "    provision   CURRENCY," & vbLf & _
         "    abt_nr      INTEGER," & vbLf & _
         "    CONSTRAINT  pk_mitarbeiter PRIMARY KEY ( ma_nr )," & vbLf & _
         "    CONSTRAINT  fk_abt_nr      FOREIGN KEY ( abt_nr )" & vbLf & _
         "    REFERENCES  abteilung( abt_nr )," & vbLf & _
         "    CONSTRAINT  fk_mgr         FOREIGN KEY ( mgr )" & vbLf & _
         "    REFERENCES  mitarbeiter ( ma_nr )" & vbLf & _
         ");"
 
   'Anfügeabfrage für Tabelle mitarbeiter
   Const APP_MA_DATA As String = _
         "INSERT INTO mitarbeiter ( ma_nr, ma_name, job, mgr, eingestellt, gehalt, provision, abt_nr )" & vbLf & _
         "VALUES ( [@ma_nr], [@ma_name], [@job], [@mgr], [@eingestellt], [@gehalt], [@provision], [@abt_nr] );"
 
   'Definition für Tabelle seminar
   Const DDL_SEM As String = _
         "CREATE TABLE seminar (" & vbLf & _
         "    sem_nr      VARCHAR(7)     NOT NULL," & vbLf & _
         "    stufe       BYTE           NOT NULL," & vbLf & _
         "    ma_nr       INTEGER        NOT NULL," & vbLf & _
         "    punkte      DOUBLE         NOT NULL," & vbLf & _
         "    CONSTRAINT  fk_ma_nr       FOREIGN KEY ( ma_nr )" & vbLf & _
         "    REFERENCES  mitarbeiter ( ma_nr )," & vbLf & _
         "    CONSTRAINT  unq_sem_nr_stufe_ma_nr" & vbLf & _
         "    UNIQUE ( sem_nr, stufe, ma_nr )" & vbLf & _
         ");"
 
   'Anfügeabfrage für Tabelle seminar
   Const APP_SEM_DATA As String = _
         "INSERT INTO seminar ( sem_nr, ma_nr, punkte, stufe )" & vbLf & _
         "VALUES ( [@sem_nr], [@ma_nr], [@punkte], [@stufe] );"
 
   Dim va As Variant
   Dim v As Variant
   Dim i As Long
 
   'alte Versionen ggf. löschen
   On Error Resume Next
   CurrentDb.Execute "DROP TABLE seminar"
   CurrentDb.Execute "DROP TABLE mitarbeiter;"
   CurrentDb.Execute "DROP TABLE abteilung;"
   On Error GoTo e
 
   BeginTrans
   va = Array(DDL_ABT, DDL_MA, DDL_SEM)
 
   'Tabellen anlegen
   For Each v In va
      CurrentDb.Execute v, dbFailOnError
   Next
 
   va = Array(Array(10, "Buchhaltung", "Dortmund"), _
              Array(20, "Forschung", "Hamburg"), _
              Array(30, "Verkauf", "Köln"), _
              Array(40, "Fertigung", "Wuppertal"))
 
   'Daten in 'abteilung' schreiben
   With CurrentDb.CreateQueryDef(vbNullString, APP_ABT_DATA)
      For Each v In va
         For i = 0 To UBound(v)
            .Parameters(i) = v(i)
         Next
         .Execute dbFailOnError
      Next
   End With
 
   va = Array(Array(7839, "König", "Hauptgeschäftsführer", Null, #11/17/1981#, 5000, Null, 10), _
              Array(7566, "Johann", "Abteilungsleiter", 7839, #4/12/1981#, 2975, Null, 20), _
              Array(7902, "Fuhrmann", "Referent", 7566, #12/3/1981#, 3000, Null, 20), _
              Array(7369, "Schmidt", "Sachbearbeiter", 7902, #2/17/1981#, 800, Null, 20), _
              Array(7698, "Blank", "Abteilungsleiter", 7839, #5/11/1981#, 2850, Null, 30), _
              Array(7499, "Allard", "Handelsvertreter", 7698, #2/20/1981#, 1600, 300, 30), _
              Array(7521, "Wecker", "Handelsvertreter", 7698, #2/22/1981#, 1250, 500, 30), _
              Array(7654, "Mertens", "Handelsvertreter", 7698, #9/28/1981#, 1250, 1400, 30), _
              Array(7782, "Kühne", "Abteilungsleiter", 7839, #6/19/1981#, 2450, Null, 10), _
              Array(7788, "Scheidt", "Referent", 7566, #7/13/1987#, 3000, Null, 20), _
              Array(7844, "Dreher", "Handelsvertreter", 7698, #9/18/1981#, 1500, 0, 30), _
              Array(7876, "Adam", "Sachbearbeiter", 7788, #7/13/1987#, 1100, Null, 20), _
              Array(7934, "Müller", "Sachbearbeiter", 7782, #1/23/1982#, 1300, Null, 10), _
              Array(7900, "Jakobs", "Sachbearbeiter", 7698, #12/3/1981#, 950, Null, 30))
 
   'Daten in 'mitarbeiter' schreiben
   With CurrentDb.CreateQueryDef(vbNullString, APP_MA_DATA)
      For Each v In va
         For i = 0 To UBound(v)
            .Parameters(i) = v(i)
         Next
         .Execute dbFailOnError
      Next
   End With
 
   va = Array(Array("SALA101", 7654, 15.6, 4), _
              Array("SALA101", 7654, 10.4, 2), _
              Array("SALA101", 7654, 11, 3), _
              Array("SALA101", 7499, 13.4, 1), _
              Array("SALA101", 7499, 11.2, 2), _
              Array("SALA101", 7499, 13, 3), _
              Array("SALA101", 7521, 12.1, 1), _
              Array("SALA101", 7521, 16.2, 2), _
              Array("SALC108", 7654, 20.2, 1), _
              Array("SALC108", 7654, 21.7, 2), _
              Array("SALC108", 7654, 23.1, 3), _
              Array("SALC108", 7521, 12.1, 1), _
              Array("SALC108", 7521, 14.4, 2), _
              Array("SALC108", 7521, 16, 3))
 
   'Daten in 'seminar' schreiben
   With CurrentDb.CreateQueryDef(vbNullString, APP_SEM_DATA)
      For Each v In va
         For i = 0 To UBound(v)
            .Parameters(i) = v(i)
         Next
         .Execute dbFailOnError
      Next
   End With
 
   CommitTrans
   RefreshDatabaseWindow
   MsgBox "Tabellen 'abteilung', 'mitarbeiter' und 'seminar' erfolgreich mit Beispieldaten angelegt."
   Exit Sub
 
e:
   Rollback
   MsgBox "Fehler beim Anlegen der Tabellen 'abteilung', 'mitarbeiter' und 'seminar'."
End Sub



Zurück zur Übersicht