ACCESS 2007 Frank Steyer Datenbank erstellen Entwicklungsumgebung Tabelle erstellen Tabelle ansehen oder Zeilen eintragen Abfrage erstellen Formular erstellen Formular benutzen oder modifizieren Bericht erstellen Programmieren Datenbankzugriff mit DAO konstant mit Formularfeldern Datenbankzugriff mit SQL Programmierunterschiede ACCESS-VBA und Java ODBC Programmieren Zuweisung Bedingung Wiederholung Stringkonkatenation Zufall Ja/Nein If-Then If-Then-Else Select-Case For-Next Do-Loop While-Wend Aufgaben Datenbank erstellen ACCESS7 aufrufen Oben: neue leere Datenbank Name eingeben Ort finden Datentyp ist dann *.accdb Evtl. Makros/Programme aktivieren (Button „Optionen“) Entwicklungsumgebung -> Start editieren, Tabelle ansehen, sortieren -> Erstellen Tabelle, Abfrage, Formular, Bericht, Makro, Modul -> Externe Daten export, import, Mails -> Datenbanktools Programme erstellen, Beziehungen einrichten, analysieren Tabelle erstellen Datenbank öffnen -> Erstellen -> Tabellenentwurf Tabelle ansehen oder Zeilen eintragen rechte Maustaste: Tabelle öffnen eintippen ist möglich spaltenweises Sortieren ist möglich Abfrage erstellen Datenbank öffnen -> Erstellen -> Abfrageentwurf Formular erstellen -> Erstellen -> Formularentwurf -> vorhandene Felder hinzufügen, evtl. auch Controls Formular benutzen oder modifizieren Formular markieren rechte Maustaste: öffnen oder rechte Maustaste: Entwurfsmodus Bericht erstellen -> Erstellen -> Berichtsentwurf -> vorhandene Felder hinzufügen, evtl. auch Controls Programmieren -> Schaltfläche ins Formular (andere Controls sind z.B. Textfeld und Label) z.B. mit MsgBox nur Fensterausgabe z.B. mit Textfeld und Zuweisung z.B. mit DoCmd.Openform „Formularname“ einen Unterformularaufruf Damit kann ein Menü mit Unterzweigen erstellt werden. Datenbankzugriff mit DAO konstant Private Sub Befehl0_Click() Dim db As DAO.Database Dim ta As DAO.Recordset Set db = CurrentDb() Set ta = db.OpenRecordset("person") ta.AddNew ta!pnr = 99 ta!pname = "Zuse" ta.Updatex ta.Close End Sub Private Sub Befehl1_Click() Dim db As DAO.Database Dim ta As DAO.Recordset Set db = CurrentDb() Set ta = db.OpenRecordset("person") ta.MoveFirst While Not ta.EOF MsgBox ta!pnr MsgBox ta!pname MsgBox "weiter?" ta.MoveNext Wend ta.Close End Sub Mit Formularfeldern Private Sub Befehl6_Click() 'Tabelle anlegen Dim db As DAO.Database Dim df As DAO.TableDef Dim fe1 As DAO.Field Dim fe2 As DAO.Field Set db = CurrentDb() Set df = db.CreateTableDef("person") Set fe1 = df.CreateField("pnr", DB_INTEGER) Set fe2 = df.CreateField("pname", DB_TEXT, 20) df.Fields.Append fe1 df.Fields.Append fe2 db.TableDefs.Append df End Sub Private Sub Befehl0_Click() 'Zeile eintragen Dim db As DAO.Database Dim ta As DAO.Recordset Set db = CurrentDb() MsgBox "OK?" Set ta = db.OpenRecordset("person") ta.AddNew ta!pnr = Text2 ta!pname = Text4 ta.Update ta.Close End Sub Private Sub Befehl1_Click() 'alle Zeilen lesen Dim db As DAO.Database Dim ta As DAO.Recordset Set db = CurrentDb() Set ta = db.OpenRecordset("person") ta.MoveFirst While Not ta.EOF Text2 = ta!pnr Text4 = ta!pname MsgBox "weiter?" ta.MoveNext Wend ta.Close End Sub Private Sub Befehl7_Click() 'Zeilen mit Bedingung lesen Dim db As DAO.Database Dim ta As DAO.Recordset Dim bedingung As String Set db = CurrentDb() bedingung = "pnr > 10" Set ta = db.OpenRecordset("person", dbOpenDynaset) ta.FindFirst bedingung While Not ta.NoMatch Text2 = ta!pnr Text4 = ta!pname MsgBox "weiter?" ta.FindNext bedingung Wend ta.Close End Sub Private Sub Befehl1_Click() 'Zeilen löschen Dim db As DAO.Database Dim ta As DAO.Recordset Set db = CurrentDb() Set ta = db.OpenRecordset("person") ta.MoveFirst While Not ta.EOF Text2 = ta!pnr Text4 = ta!pname ergebnis = MsgBox("löschen?", vbYesNo, "MsgBox-Beispiel") If ergebnis = vbYes Then ta.Edit ta.Delete End If ta.MoveNext Wend ta.Close End Sub Datenbankzugriff mit SQL Private Sub Befehl4_Click() Dim db As DAO.Database Dim cmd As String Set db = CurrentDb() cmd = "insert into person values (" + Text5 + ",'" + Text7 + "'," + Text9 + ")" MsgBox cmd db.Execute (cmd) End Sub Private Sub Befehl11_Click() 'Deklarationen Dim db As DAO.Database Dim ergebnis As DAO.Recordset Set db = CurrentDb() 'Datenbankzugriff Dim cmd As String cmd = "select pnr, pname, palter from person" Set ergebnis = db.OpenRecordset(cmd) 'Reaktion ergebnis.MoveLast ergebnis.MoveFirst For i = 1 To ergebnis.RecordCount Text5 = ergebnis!pnr Text7 = ergebnis!pname Text9 = ergebnis!palter MsgBox "weiter" ergebnis.MoveNext Next End Sub Programmierunterschiede ACCESS-VBA und Java In Java ist nötig SQL-Bibliotheken einbinden Panel erzeugen Listener erzeugen Datasource definieren und benutzen Methoden für Panel und Resultset benutzen Die Programme haben also eine geringere Zeilenzahl wegen der engen Verklammerung von ACCESS-VBA mit dem eigenen ACCESS-Datenbanksystem. ODBC Beim Anlegen einer ACCESS7-Datenbank als Datenquelle ist darauf zu achten, dass der ACCESS7-Datenbanktreiber den Typ accdb kann. Private Sub Befehl8_Click() Text6 = Val(Text1) + Val(Text3) End Sub Private Sub Befehl9_Click() Dim x As Integer x = Val(Text2) + Val(Text4) If x > 10 Then Text7 = x Else Text7 = "zu klein" End If End Sub Private Sub Befehl4_Click() Dim x, i As Integer x=0 i=1 While i <= Val(Text1) x=x+i i=i+1 Wend Text8 = x End Sub Stringkonkatenation Private Sub Befehl3_Click() Text1 = "Eingabe war: " + Text1 End Sub Zufall Private Sub Befehl3_Click() Text1 = CInt(Rnd * 10) End Sub Ja/Nein Private Sub Befehl0_Click() ergebnis = MsgBox("Ist das Wetter heute schön?", vbYesNo, "MsgBox-Beispiel") If ergebnis = vbYes Then MsgBox "Ja" Else MsgBox "Nein" End If End Sub Weitere Befehle If-Then Private Sub Befehl3_Click() Dim zufall As Integer zufall = CInt(Rnd * 10) If Val(Text1) = zufall Then MsgBox ("Glückwunsch") End If End Sub If-Then-Else Private Sub Befehl3_Click() Dim zufall As Integer zufall = CInt(Rnd * 10) If Val(Text1) = zufall Then MsgBox ("Glückwunsch") Else MsgBox ("Pechvogel") End If End Sub Select-Case Private Sub Befehl3_Click() Dim zufall1, zufall2, zufall3 As Integer zufall1 = CInt(Rnd * 10) zufall2 = CInt(Rnd * 10) zufall3 = CInt(Rnd * 10) Select Case Val(Text1) Case zufall1 MsgBox ("erster Vergleich") Case zufall2 MsgBox ("zweiter Vergleich") Case zufall3 MsgBox ("dritter Vergleich") Case Else MsgBox ("überhaupt nichts") End Select End Sub For-Next-Schleife Private Sub Befehl1_Click() Dim zufall, anzahl As Integer For anzahl = 1 To 2 x = InputBox("Bitte Zahl eingeben") zufall = CInt(Rnd * 10) If x = zufall Then MsgBox ("Glückwunsch") Else MsgBox ("Pechvogel") End If Next anzahl DoCmd.Close acForm, "ForNext" End Sub Do-Loop-Schleife Private Sub Befehl1_Click() Dim zufall, x As Integer Do x = InputBox("Bitte Zahl eingeben") If x <> 0 Then zufall = CInt(Rnd * 10) If x = zufall Then MsgBox ("Glückwunsch") Else MsgBox ("Pechvogel") End If End If Loop Until x = 0 DoCmd.Close acForm, "DoLoop" End Sub While-Wend-Schleife Private Sub Befehl1_Click() Dim zufall, x As Integer x=5 While x <> 0 x = InputBox("Bitte Zahl eingeben") If x <> 0 Then zufall = CInt(Rnd * 10) If x = zufall Then MsgBox ("Glückwunsch") Else MsgBox ("Pechvogel") End If End If Wend DoCmd.Close acForm, "DoLoop" End Sub Aufgabe 1: Menüsystem zum Rechnen Erstellen Sie ein Menüsystem für die vier Grundrechenarten Menüformular + / - * Addition Subtraktion Multiplikation Division Jedes Rechenformular hat etwa folgenden Aufbau: <Überschrift> <Op> = rechne Aufgabe 2: Additions-Taschenrechner Erstellen Sie einen Taschenrechner 1 2 3 4 5 6 7 8 9 0 + = C - 1 Textfeld zur Anzeige - 10 Ziffernbuttons - 1 Plusbutton - 1 Ergebnisbutton - 1 Löschbutton Ziffernbutton klicken -> Anzeige der 1. Ziffer -> speichern des Wertes in 1. Variablen Plusbutton klicken -> umschalten Ziffernbutton klicken -> Anzeige der 2. Ziffer -> speichern des Wertes in 2. Variablen Ergebnisbutton klicken -> Anzeige Ziffer1 + Ziffer2 Löschbutton klicken -> Textfeld löschen -> Umschalter zurücksetzen (Umschalter auf 1. Variable setzen in FormLoad) Aufgabe 3: Menüsystem zur Tabellenbearbeitung Erstellen Sie ein Menüsystem zur Tabellenbearbeitung Menüformular eintragen suchen löschen Jedes Tätigkeitsformular hat etwa folgenden Aufbau: <Überschrift> Feld1 Feld2 tue Aufgabe 4: Access mit login - Legen Sie eine Datenbank 'lager' an. - Erzeugen Sie die Tabelle 'artikel': artikelnr artikelname menge nettopreis (Neue Tabelle, kein Primärschlüssel) - Tragen Sie die Zeilen ein: 11 12 13 14 15 16 17 18 Fahrrad Lenker Rahmen Laufrad Nabe Speichen Felge Schlauch 25 150 300 45 65 5 400.00 € 30 20.00 € 30.00 € 3 15.00 € 7.00 € 0.50 € 2.50 € 3.00 € - Erstellen Sie eine Abfrage zu Artikel: artikelname und menge ausgeben nach menge absteigend sortieren Kriterium >=5 - Erstellen Sie ein Formular zu Artikel Einspaltige Darstellung, alle Felder Erweiterung um Bezeichnungsfeld zur Beschriftung, Textfeld zur Anzeige, Button zur Berechnung, Programm zur Berechnung des Bruttopreises - Erstellen Sie einen Bericht zu Artikel tabellarische Darstellung, artikelname, menge, sortiert nach artikelname - Erzeugen Sie ein Formular "Artikelverwaltung" mit Kontrollelementen (Buttons), mit denen man die erstellten Abfrage, Formular und Bericht aufrufen kann. - Legen Sie über das Formular "Artikelverwaltung" ein weiteres (Titel: "Firma"), das als Unterpunkte noch "Kundenverwaltung" und "Lieferantenverwaltung" enthält. Geben Sie für die noch nicht realisierten Zweige die Meldung „noch nicht realisiert“ aus. - Legen Sie über das Formular "Firma" ein Log-in-Formular, das Benutzername und Passwort abfragt und bei Button-Klick ihr Vorhandensein in einer Tabelle „User“ überprüft. Wenn ja, wird das Formular „Firma“ geöffnet, sonst erscheint eine Fehlermeldung. Login: Firma: Artikelverwaltung Kundenverwaltung Lieferantenverwaltung (noch nicht realisiert) (noch nicht realisiert) Machen Sie das Login-Formular zum Startformular.