Post on 04-Jun-2018
Access 2003Programmierung
mit Visual Basic
Autor: Andreas Klein
3. Auflage: 2005
© Merkwerk
Alle Rechte vorbehalten. Kein Teil des Werkes darf in irgendeiner Form ohne Genehmigung der Firma Merkwerk reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.
Diese Schulungsunterlage wurde mit Sorgfalt erstellt und geprüft. Trotzdem können Fehler nicht vollkommen ausgeschlossen werden. Für fehlerhafte Angaben und deren Folgen kann daher keine Haftung übernommen werden.
Inhaltsverzeichnis
1 Lernziele 3
2 Namenskonventionen 4
3 Die Mitarbeitertabelle 5
4 Erstellung von Formularen 6
5 Verwaltung der Stammdaten 85.1 FORMULAR MITARBEITER............................................................................................................85.1.1 EIGENSCHAFTEN DER STEUERELEMENTE......................................................................................95.1.2 PROGRAMMIERUNG...............................................................................................................105.2 NEUER MITARBEITER...............................................................................................................155.2.1 EIGENSCHAFTEN DER STEUERELEMENTE....................................................................................165.2.2 PROGRAMMIERUNG...............................................................................................................175.3 MITARBEITER ANZEIGEN............................................................................................................215.3.1 EIGENSCHAFTEN DER STEUERELEMENTE....................................................................................225.3.2 PROGRAMMIERUNG...............................................................................................................235.4 MITARBEITER BEARBEITEN........................................................................................................ 255.4.1 EIGENSCHAFTEN DER STEUERELEMENTE....................................................................................265.4.2 PROGRAMMIERUNG...............................................................................................................27
6 Die Such-/Sortierfunktion 306.1.1 SORTIEREN:....................................................................................................................... 316.1.2 SUCHEN:........................................................................................................................... 32
7 Fehlerroutine 33
8 Datensätze nach Excel exportieren 34
www.merkwerk.de Seite 2
1 Lernziele
Ziel der Schulung ist es, Ihnen verschiedene Möglichkeiten der ACCESS Programmierung zu zeigen. Lernziele sind die Verwendung von Tabellen, die Erstellung von Formularen, die Anbindung an Tabellen, das Anlegen, Bearbeiten und Löschen in Tabellen über ein Formular und die Verwendung von SQL Anweisungen.
Basis ist eine Tabelle, mit den notwendigen Feldern für die Stammdatenpflege. Zur Anzeige und zur weiteren Verarbeitung wird ein Startdialog erstellt.Von diesem Startdialog ausgehend, soll die Möglichkeit bestehen, über verschiedene Schaltflächen die jeweiligen Formulare zur Bearbeitung aufzurufen und die Daten über die Formulare einzugeben oder zu verändern.Der Startdialog soll zudem die Möglichkeit bieten, Datensätze nach gewissen Kriterien zu suchen oder innerhalb der Liste zu sortieren.
Die Formulare werden einzeln aufgeführt und im jeweiligen Kapitel komplett bearbeitet. Jedes Formular wird von der Erstellung über die Eigenschaften bis hin zum Programmcode durchgesprochen.
www.merkwerk.de Seite 3
2 Namenskonventionen
Notationen sind Programmierhilfen. Sie geben dem Programmierer zur Entwurfszeit Rückschlüsse auf den Datentyp des Objektes. Der Code wird „lesbarer“ und es werden Fehlerquellen durch implizite Typumwandlungen vermieden. Sie sollen helfen, dass der Code übersichtlicher wird und somit auch Personen, die nicht bei der Entwicklung dabei waren, das Programm zu verstehen.
Variablen sollten Präfixe erhalten, die auf den Datentyp verweisen:z.B. iBox = Variable vom Typ Integer
sSQL = Variable vom Typ String
Beispiele am aktuellen Fall:
Objekte BezeichnungTextfelder txtBezeichnungListenfelder lstBezeichnungKombinationsfelder cboBezeichnungOptionsfelder optBezeichnungFormulare frmBezeichnungTabellen tblBezeichnungBezeichnungsfelder lblBezeichnungBefehlsschaltflächen cmdBezeichnung
z.B.: = cmdBearbeiten
Notizen
www.merkwerk.de Seite 4
3 Die Mitarbeitertabelle
Erstellen Sie in ACCESS eine neue Tabelle in der Entwurfsansicht. Speichern Sie die Tabelle unter dem Namen tblMitarbeiter. Die zu verwendenden Felder entnehmen Sie der Abbildung.
Wenn diese Tabelle erstellt ist wechseln Sie in das Register Formulare.
Notizen
www.merkwerk.de Seite 5
4 Erstellung von Formularen
Erstellen Sie ein neues Formular, welches den Namen frmMitarbeiter erhält.Zum Erstellen öffnen Sie die Entwurfsansicht.
Sie erhalten eine leere Fläche, auf die Sie nach belieben die benötigten Steuerelemente setzen können.
Notizen
www.merkwerk.de Seite 6
TextfeldBezeichnungsfeld
Listenfeld
Kombinationsfeld
Optionsfeld
Optionsgruppe
Befehlsschaltfläche
Um die Eigenschaften der Steuerelemente zu verändern klicken Sie mit der rechten Maustaste auf das gewünschte Element und verändern dann die Eigenschaften. Im folgenden werden immer die Wichtigsten genannt.
Notizen
www.merkwerk.de Seite 7
5 Verwaltung der Stammdaten
5.1 Formular Mitarbeiter
Notizen
www.merkwerk.de Seite 8
5.1.1 Eigenschaften der Steuerelemente
FormularBeschriftung MitarbeiterDatensatzmarkierer NeinNavigationsschaltflächen NeinTrennlinien NeinRahmenart Dialog
ListenfeldName lstMitarbeiterDatensatzherkunft SELECT tblMitarbeiter.MemoID,
tblMitarbeiter.Nachname, tblMitarbeiter.Vorname, tblMitarbeiter.pkMitarbeiter FROM tblMitarbeiter;
Spaltenzahl 4Spaltenüberschriften JaSpaltenbreiten 2,542cm;2,551cm;2,551cm;0cmGebundene Spalte 4
SchaltflächenName Wie gewünscht, beginnt immer mit cmd...Beschriftung Was soll danach ausgeführt werden.Reihenfolgenposition Wählen Sie, in welcher Reihenfolge die
Elemente angesprochen werden sollen und vergeben die Nummer von 0 bis ....
OptionsgruppeName fraSortierenStandardwert Hier 3, um MemoID zu aktivieren.
OptionsfelderName Wie gewünscht, beginnend mit opt....
TextfeldName txtFilter
KombinationsfeldName cboFilter
Notizen
www.merkwerk.de Seite 9
5.1.2 Programmierung
Beim Starten des Programms soll der erste Eintrag im Listenfeld markiert werden.
Öffnen des Formulars:
Private Sub Form_Load()¶
lstMitarbeiter.Value = lstMitarbeiter.ItemData(1)¶
End Sub¶
Zusatz: Listenfeld per Code formatieren / füllen:
Dim sSql As String¶ sSql = "SELECT Vorname, Nachname, MemoID, pkMitarbeiter FROM tblMitarbeiter"¶ lstMitarbeiter.ColumnCount = 4¶ lstMitarbeiter.ColumnWidths = "2,5 cm;2,5 cm; 2,5 cm;0 cm"¶ lstMitarbeiter.BoundColumn = 4¶ lstMitarbeiter.RowSource = sSql¶
Notizen:
www.merkwerk.de Seite 10
Schaltfläche Neu:
Private Sub cmdBearbeiten_Click()¶ DoCmd.OpenForm "frmMitarbeiterNeu"¶ End Sub¶
Schaltfläche Bearbeiten:
Private Sub cmdBearbeiten_Click()¶ DoCmd.OpenForm "frmMitarbeiterBearbeiten"¶ End Sub¶
Notizen
www.merkwerk.de Seite 11
Schaltfläche Löschen:
Private Sub cmdLoeschen_Click()¶
Dim sSql As String¶
sSql = "DELETE * FROM tblMitarbeiter WHERE pkMitarbeiter =" & lstMitarbeiter.Value¶
Dim oCommand As ADODB.Command¶ Set oCommand = New ADODB.Command¶ oCommand.CommandText = sSql¶ oCommand.ActiveConnection = CurrentProject.AccessConnection¶ oCommand.Execute¶ Set oCommand = Nothing¶
lstMitarbeiter.Requery¶ lstMitarbeiter = lstMitarbeiter.ItemData(1) ¶
End Sub¶Notizen
www.merkwerk.de Seite 12
Schön wäre es noch, wenn der Benutzer vor dem Löschen gefragt wird, ob er wirklich löschen will. Das Löschen geschieht mit oCommand.Execute, die Rückfrage könnte folgendermaßen aussehen:
Dim ibox As Integer¶ ibox = MsgBox("Wollen Sie den Datensatz wirklich löschen", vbYesNo, "Datensatz löschen")¶ If ibox = vbYes Then¶
oCommand.Execute¶ End If¶
Notizen
www.merkwerk.de Seite 13
Schaltfläche Anzeigen:
Private Sub cmdBearbeiten_Click()¶ DoCmd.OpenForm "frmMitarbeiterAnzeigen"¶ End Sub¶
Schaltfläche Schliessen:
Private Sub cmdSchliessen_Click()¶ DoCmd.Close¶ End Sub¶
Notizen
www.merkwerk.de Seite 14
5.2 Neuer Mitarbeiter
Lernziele: Verwendung der AddNew Methode des Recordsets.
Erstellen Sie ein neues Formular mit dem Namen frmMitarbeiterNeu.
Das Formular zur Neuanlage soll die Textfelder zur Eingabe der Stammdaten enthalten.
Notizen
www.merkwerk.de Seite 15
5.2.1 Eigenschaften der Steuerelemente
FormularBeschriftung NeuDatensatzmarkierer NeinNavigationsschaltflächen NeinRahmenart Dialog
TextfelderName Wie gewünscht, immer beginnend mit txt...Aktiviert JaGesperrt Nein
SchaltflächenName Beginnend mit cmd...
Notizen
www.merkwerk.de Seite 16
5.2.2 Programmierung
Öffnen des Formulars:
Beim Öffnen des Formulars soll der Speichern Schalter deaktiviert sein (das es zu diesem Zeitpunkt nichts zu speichern gibt).
Private Sub Form_Load()¶
cmdSpeichern.Enabled = False¶
End Sub¶
Notizen
www.merkwerk.de Seite 17
Textfeld MemoID:
Es soll nur möglich sein, den Datensatz zu speichern, wenn das Textfeld MemoID mindestens ein Zeichen enthält.
Private Sub txtMemoID_Change()¶ If (Trim(txtMemoID.Text)) = "" Then¶
cmdSpeichern.Enabled = False¶
Else¶
cmdSpeichern.Enabled = True¶ End If¶ End Sub¶
Notizen
www.merkwerk.de Seite 18
Schaltfläche Speichern:
Private Sub cmdSpeichern_Click()¶
Dim rst As ADODB.Recordset¶ Set rst = New ADODB.Recordset¶ rst.ActiveConnection = CurrentProject.AccessConnection¶ rst.CursorType = adOpenKeyset¶ rst.LockType = adLockOptimistic¶ rst.Open "tblMitarbeiter"¶ rst.AddNew¶ rst("MemoID") = txtMemoID¶ rst("Vorname") = txtVorname¶ rst("Nachname") = txtNachname¶ rst("Telefon") = txtTelefon¶ rst("Kostenstelle") = txtKostenstelle¶ rst("Abteilung") = txtAbteilung¶ rst.Update¶ rst.Close¶ Forms!frmMitarbeiter!lstMitarbeiter.Requery¶
End Sub¶Notizen
www.merkwerk.de Seite 19
Schaltfläche Abbrechen:
Private Sub cmdAbbrechen_Click()¶
DoCmd.Close¶ End Sub¶
Notizen
www.merkwerk.de Seite 20
5.3 Mitarbeiter anzeigen
Lernziele: Verwendung von SQL-Strings.
Erstellen Sie ein neues Formular mit dem Namen frmMitarbeiterAnzeigen.
Ein aus der Liste gewählter Datensatz soll angezeigt werden
Mit der Schaltfäche BEARBEITEN kann der angezeigte Datensatz geändert werden.
Die E-Mail Adresse wird automatisch aus Vor- und Nachnamen erstellt.
Notizen
www.merkwerk.de Seite 21
5.3.1 Eigenschaften der Steuerelemente
FormularBeschriftung AnzeigenDatensatzmarkierer NeinNavigationsschaltflächen NeinRahmenart Dialog
TextfelderName Wie gewünscht, immer beginnend mit txt...Aktiviert JaGesperrt Nein
SchaltflächenName Beginnend mit cmd...
Notizen
www.merkwerk.de Seite 22
5.3.2 Programmierung
Öffnen des Formulars:
Private Sub Form_Load()¶
Dim vPkFromListbox¶ vPkFromListbox = Forms!frmMitarbeiter!lstMitarbeiter.Value¶ Dim sSql As String¶ sSql = "SELECT * FROM tblMitarbeiter WHERE pkMitarbeiter = " & vPkFromListbox¶
Dim rst As ADODB.Recordset¶ Set rst = New ADODB.Recordset¶ rst.Open sSql, CurrentProject.AccessConnection, adOpenKeyset, adLockReadOnly, adCmdText¶
txtEMail = rst("Vorname") & "." & rst("Nachname") & "@Firma.de"¶
txtMemoID = rst("MemoID")¶ txtVorname = rst("Vorname")¶ txtNachname = rst("Nachname")¶ txtTelefon = rst("Telefon")¶ txtKostenstelle = rst("Kostenstelle")¶ txtAbteilung = rst("Abteilung")¶
rst.Close¶End Sub¶
Notizen
www.merkwerk.de Seite 23
Schaltfläche Bearbeiten:
Private Sub cmdBearbeiten_Click()¶
DoCmd.Close¶ DoCmd.OpenForm "frmMitarbeiterBearbeiten"¶ End Sub¶
Schaltfläche Abbrechen:
Private Sub cmdAbbrechen_Click()¶
DoCmd.Close¶ End Sub¶
Notizen
www.merkwerk.de Seite 24
5.4 Mitarbeiter bearbeiten
Lernziele: Parameterübergabe und verwenden von SQL-Strings, Recordsetmethoden
Erstellen Sie ein Formular mit dem Namen frmMitarbeiterBearbeiten.
Das Formular soll einen in der Liste gewählten Datensatz auslesen und Änderungen an diesem in der Tabelle speichern.
Notizen
www.merkwerk.de Seite 25
5.4.1 Eigenschaften der Steuerelemente
DetailbereichBeschriftung BearbeitenBildlaufleisten NeinDatensatzmarkierer NeinNavigationsschaltflächen NeinRahmenart DialogGebunden Ja
TextfelderName Wie gewünscht, immer beginnend mit txt...Aktiviert JaGesperrt Nein
SchaltflächenName Beginnend mit cmd...
Notizen
www.merkwerk.de Seite 26
5.4.2 Programmierung
Öffnen des Formulars:
Private Sub Form_Load()¶ Dim vPkFromListbox as Variant¶ vPkFromListbox = Forms!frmMitarbeiter!lstMitarbeiter.Value¶ Dim sSql As String¶ sSql = "SELECT * FROM tblMitarbeiter WHERE pkMitarbeiter = " & vPkFromListbox¶ Dim rst As ADODB.Recordset¶ Set rst = New ADODB.Recordset¶ rst.Open sSql, CurrentProject.AccessConnection, adOpenKeyset, adLockReadOnly, adCmdText¶
txtMemoID = rst("MemoID")¶ txtVorname = rst("Vorname")¶ txtNachname = rst("Nachname")¶ txtTelefon = rst("Telefon")¶ txtKostenstelle = rst("Kostenstelle")¶ txtAbteilung = rst("Abteilung")¶ rst.Close¶ End Sub¶Notizen
www.merkwerk.de Seite 27
Textfeld MemoID:
Es soll nur möglich sein, den Datensatz zu speichern, wenn das Textfeld MemoID mindestens ein Zeichen enthält.
Private Sub txtMemoID_Change()¶ If (Trim(txtMemoID.Text)) = "" Then¶ cmdSpeichern.Enabled = False¶ Else¶ cmdSpeichern.Enabled = True¶ End If¶ End Sub¶
Schaltfläche Abbrechen:
Private Sub cmdAbbrechen_Click()¶
DoCmd.Close¶ End Sub¶
Notizen
www.merkwerk.de Seite 28
Schaltfläche Speichern:
Private Sub cmdSpeichern_Click()¶
Dim vPkFromListbox¶ vPkFromListbox = Forms!frmMitarbeiter!lstMitarbeiter.Value¶ Dim sSql As String¶ sSql = "SELECT * FROM tblMitarbeiter WHERE pkMitarbeiter = " & CStr(vPkFromListbox) ¶ Dim rst As ADODB.Recordset¶ Set rst = New ADODB.Recordset¶ rst.Open sSql, CurrentProject.AccessConnection, adOpenKeyset, adLockOptimistic, adCmdText¶ rst("MemoID") = txtMemoID¶ rst("Vorname") = txtVorname¶ rst("Nachname") = txtNachname¶ rst("Telefon") = txtTelefon¶ rst("Kostenstelle") = txtKostenstelle¶ rst("Abteilung") = txtAbteilung¶ rst.Update¶ rst.Close¶ Forms!frmMitarbeiter!lstMitarbeiter.Requery¶ DoCmd.Close ¶End Sub¶
Notizen
www.merkwerk.de Seite 29
6 Die Such-/Sortierfunktion
Lernziele: Textoperation, die Verwendung von SQL-Strings, Funktionen.
In diesem Kapitel wird die bereits angesprochene Such- und Sortierfunktion erläutert.Im Formular frmMitarbeiter wurde diese Funktion vorgesehen, um die Liste mit den Stammdaten nach vorgegebenen Kriterien zu Filtern und danach auch zu sortieren.
Notizen
www.merkwerk.de Seite 30
6.1.1 Sortieren:
Private Sub fraSortieren_Click()¶
Const sSql As String = "SELECT MemoID, Vorname, Nachname, pkMitarbeiter FROM tbMitarbeiter ORDER BY "¶ Dim sSort As String
Select Case fraSortieren.Value¶ Case 1¶ sSort = " Nachname;" ¶ Case 2¶ sSort = " Vorname;" ¶ End Select¶ lstMitarbeiter.RowSource = sSql & sSort¶
End Sub¶Notizen
www.merkwerk.de Seite 31
6.1.2 Suchen:
Private Sub cmdSuchen_Click()¶
Dim sSuchen As String¶ sSuchen = "SELECT MemoID, Vorname, Nachname, pkMitarbeiter FROM tblMitarbeiter "¶ sSuchen = sSuchen & "WHERE " & cboFilter & " LIKE '" & txtFilter & "*'"¶
lstMitarbeiter.RowSource = sSuchen¶ End Sub¶Notizen
www.merkwerk.de Seite 32
7 Fehlerroutine
Um nicht vorgesehene Fehler abzufangen, bietet Visual Basic das Fehlerobjekt.
Private Sub cmdNeuerMitabeiter_Click()¶On Error GoTo Err_cmdNeuerMitabeiter_Click¶
Hier steht die eigentliche ProzedurExit_cmdNeuerMitabeiter_Click: ¶ Exit Sub¶
Err_cmdNeuerMitabeiter_Click: ¶ MsgBox Err.Description¶ Resume Exit_cmdNeuerMitabeiter_Click¶
End Sub¶Notizen
www.merkwerk.de Seite 33
8 Datensätze nach Excel exportieren
Private Sub cmdDatenNach_Excel_Click()¶
Dim rs As ADODB.Recordset¶ Set rs = New ADODB.Recordset¶ rs.ActiveConnection = CurrentProject.AccessConnection¶ rs.CursorType = adOpenKeyset¶ rs.LockType = adLockReadOnly¶ rs.Open "tblMitarbeiter"¶ Dim objExcel As Excel.Application¶ Set objExcel = New Excel.Application¶ objExcel.Visible = True¶ objExcel.Workbooks.Add¶ objExcel.Cursor = xlWait¶ objExcel.Range("A1").Value = rs.Fields(1).Name¶ objExcel.Range("B1").Value = rs.Fields(2).Name ¶ objExcel.Range("C1").Value = rs.Fields(3).Name ¶ objExcel.Range("D1").Value = rs.Fields(4).Name ¶ objExcel.Range("A2").Select¶ Do Until rst.EOF¶
With objExcel¶ .ActiveCell.Value = rs("MemoID")¶ .ActiveCell.Offset(0, 1).Select¶ .ActiveCell.Value = rs("Vorname")¶ .ActiveCell.Offset(0, 1).Select¶ .ActiveCell.Value = rs("Nachname")¶ .ActiveCell.Offset(0, 1).Select¶ .ActiveCell.Value = rs("Telefon")¶ .ActiveCell.Offset(1, -3).Select¶ End With¶ rs.MoveNext¶ Loop¶ objExcel.Cursor = xlDefault¶ rs.Close¶ Set objExcel = Nothing¶ Set rs = Nothing¶
End Sub¶
www.merkwerk.de Seite 34