Module - Beuth Hochschule für Technik Berlin

Werbung
Module
Module (ACCESS Basic)
Access Basic ist eine Programmiersprache, die sowohl konventionell, aber auch für visuelle
ereignisgesteuerte Programmierung verwendbar ist. Hinter einem Formular oder Bericht steht
programmtechnisch ein Modul mit einer Menge von Ereignisfunktionen, die im Rahmen dieses
Formulars oder Berichtes definiert werden.
Sub Befehl6_Click ()
Text4 = .16 * preis
End Sub
Sub Befehl12_Click ()
Text8 = preis + Feld4
End Sub
Prozedurale Programmiersprache
1) Datentypen, Variablen, Namen
einfache Datentypen: Integer, Long, Single, Double, Currency, String (für variable Länge),
String * Länge (für feste Länge), Variant, benutzerdefinierte Datentypen,
Objektdatentypen (Dynaset, Database etc.). Für jede Variable wird eine
eigene As-Klausel angegeben.
Zusammengesetzte Datentypen: Arrays, Tabellen, Dynasets
Variablen: explizit oder implizit
Dim Variable [([Indizes])][As Datentyp][, Variable[([Indizes])] [As Datentyp]]...
Variable
Indizes
As Datentyp
Name, den die Variable bekommt
Dimension(en) einer Datenfeldvariablen (Array).
Es dürfen mehrere Dimensionen deklariert werden.
Reserviertes Wort mit nachfolgender Angabe des Datentyps
z.B. Dim i As Integer
TFH Berlin/Steyer
7-1
Module
Konstanten
Const PI = 3.14
Arrays
Dim TestArray1 (1 To 100) As Integer
Dim TestArray2 (1 To 100, 1 To 100) As Integer
mit Dim Datenfeld () As Integer zunächst
und ReDim Datenfeld (1 To 5, 1 To 100) später
und ReDim Datenfeld (1 To 5, 1 To 50) als weitere Änderung
benutzerdefinierte
Typen
Type PersonenTyp
Name As String
Alter As Integer
Telefon As String
End Type
2) Operatoren, Ausdrücke
Vergleichsoperatoren
Print True = True
Print True = False
Print False = False
Print 5 = 3 + 2
Print 5 < 3
Print (5 = 3 + 2) + 3
Print "Meier" = "Mei" & "er"
Print "A" <"Z"
Print "AAAAAB" > "AAAAAA"
Rem Ergebnis -1
Rem Ergebnis 0
Rem Ergebnis -1
Rem Ergebnis -1
Rem Ergebnis 0
Rem Ergebnis 2
Rem Ergebnis -1
Rem Ergebnis -1
Rem Ergebnis -1
False = 0
True <> 0
Numerische
Ausdrücke:
Print 10 ^ 10
Print 3 + 4 * 2
Print (3 + 4) * 2
Print 5 / 2
Print 2.5 * 3
Print 2.5E-5
Print &HAFE / 2
Rem Ergebnis 100
Rem Ergebnis 11
Rem Ergebnis 14
Rem Ergebnis 2.5
Rem Ergebnis 7.3
Rem Ergebnis 0.000025
Rem Ergebnis 1407
Zeichenketten: Print "Hallo"
Print "Dieter" & "Meier"
Print "Dieter" & " " & "Meier"
Rem Hallo
Rem Ergebnis DieterMeier
Rem Ergebnis Dieter Meier
Logische
Ausdrücke:
Rem Ergebnis -1 (oder <> 0)
Rem Ergebnis 0
Rem Ergebnis -1
Rem Ergebnis 0
Rem Ergebnis -1
Rem Ergebnis 0
Print True
Print False
Print True And True
Print True And False
Print True Or False
Print True Xor True
TFH Berlin/Steyer
7-2
Module
3) Befehle
Befehle
Entscheidungs
strukturen
If <Bedingung> Then
<Anweisungsblock>
End If
If <Bedingung> Then
<Anweisungsblock>
Else
<Anweisungsblock>
End If
Select Case <Testausdruck>
[Case <Ausdrucksliste1> [<Anweisungsblock>]]
[Case <Ausdrucksliste2> [<Anweisungsblock>]]
[Case Else [<ElseAnweisungsblock>]]
End Select
Schleifenstrukturen
For <Zähler> = <Startwert> To <Endwert> [Step <Schrittgrösse>]
<Anweisungsblock>
[Exit For]
<Anweisungsblock>
Next [<Zähler>]
Do [{While|Until} <Bedingung>
<Anweisungsblock>
[Exit Do]
<Anweisungsblock>
Loop
Do
<Anweisungsblock>
[Exit Do]
[<Anweisungsblock>]
Loop [{While|Until}] <Bedingung>
While <Bedingung>
<Anweisungsblock>
Wend
Sprünge
GoTo <Ziel>
...
Ziel:
4) Funktionen, Prozeduren
Funktionen:
Function DoppelterWert (Zahl As Integer) As Integer
DoppelterWert = Zahl * 2
End Function
Aufruf: A = DoppelterWert(2) + DoppelterWert(4) / 10
TFH Berlin/Steyer
7-3
Module
Prozeduren:
Sub Prozedur1 ()
Dim a As Integer
a = 10
Debug.Print a
Rem Ausgabe: 10
Prozedur2 (a)
Debug.Print a
:Rem Ausgabe: 2
End Sub
Sub Prozedur2 (zahl As Integer)
Debug.Print zahl :Rem Ausgabe: 10
zahl = 2
Debug.Print zahl :Rem Ausgabe: 2
End Sub
Aufruf: Call Prozedur1 (1)
oder: Prozedur1 (1)
oder: x = 1
Prozedur1 (x)
Viele Access-Datenbankobjekte können über Variable angesprochen werden.
Objektvariablen: Systemobjekte
Objekttyp
Gilt für
Application
Screen
Form(i)
Property(i)
Control
Property(i)
Report(i)
Property(i)
Control
Property(i)
Debug
gesamte Anwendungsumgebung
Oberflächenobjekte
Formular
Eigenschaft eines Objektes
Steuerelement in Formular oder Bericht
Eigenschaft eines Objektes
Bericht
Eigenschaft eines Objektes
Steuerelement in Formular oder Bericht
Eigenschaft eines Objektes
Ausgabe im Direktfenster
Objektvariablen: Datenzugriffsobjekte
Objekttyp
Gilt für
DBEngine
alle Datenquellen
Workspace(i) Aktive Sitzung der Jet_Datenbank
Database
Datenbank
TableDef(i) Gespeicherte Tabelle
Field(i)
Feld in Tabelle, Abfrage, Datensatzgruppe o.a.
Index(i)
Tabellenindex
Field(i)
Feld in Tabelle, Abfrage, Datensatzgruppe o.a.
QueryDef
Abfragedefinition
Field(i)
Feld in Tabelle, Abfrage, Datensatzgruppe o.a.
Parameter(i)Abfrageparameter
Recordset Datensatzgruppe
Field(i)
Feld in Tabelle, Abfrage, Datensatzgruppe o.a.
Relation
Tabellen- oder Abfragebeziehung
TFH Berlin/Steyer
7-4
Module
Field(i)
Feld in Tabelle, Abfrage, Datensatzgruppe o.a.
Container(i) Objekt mit Informationen zu anderen Objekten
Document(i)Informationen über Objekte in der Jet-Datenbank
User(i)
Benutzerkonto in der aktuellen Arbeitsgruppe
Group(i)
Gruppenkonto in der aktuellen Arbeitsgruppe
User(i)
Benutzerkonto in der aktuellen Arbeitsgruppe
Kleine Beispiele für die Arbeit mit Systemobjekten:
Formular öffnen:
DoCmd.OpenForm "Adressen"
Formular schliessen:
DoCmd.Close acForm, "Adressen"
Geöffnetes Formular unsichtbar machen:
Dim FF1 As Form
Set FF1 = Forms!Adressen
FF1.Visible = False
Formularname im Programm zuweisen:
Dim FF1 As Form
Dim Name As String
Name = "Adressen"
Set FF1 = Forms!(Name)
alle existierenden Formularnamen ausgeben:
Dim i As Integer
For i = 0 To Forms.Count - 1
Debug.Print Forms(i).Name
Next i
alle Objekte eines geöffneten Formulars ausgeben:
Dim i As Integer
For i = 0 To Forms![Adressen].Count - 1
MsgBox Forms![Adressen](i).Name
Next i
Beispiele für die Arbeit mit Datenzugriffsobjekten s.u.
TFH Berlin/Steyer
7-5
Module
Beispiele für das Arbeiten mit Datenzugriffsobjekten:
Es existiert ein Formular mit vier Textfeldern Text0, Text5, Text9 und Text12 und eine Tabelle
"person" mit den Spalten pnr, nachname, vorname, alter. Es gibt verschiedene Ereignis-prozeduren,
die auf Tastendruck verschiedene Aktionen ausführen:
pnr
nachname
vorname
alter
mit SQL
Private Sub Befehl0_Click()
'Zeile einfügen
Dim db As DAO.Database
Set db = CurrentDb()
Dim sql As String
sql = "INSERT INTO person VALUES (" + Text4 + ",'" + Text6 + "','" + Text8 + "'," + Text10 + ")"
MsgBox sql
db.Execute (sql)
End Sub
Private Sub Befehl1_Click()
'alle lesen
Dim db As DAO.Database, rs As DAO.Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("SELECT * FROM person")
While Not rs.EOF
Text4 = rs(0)
Text6 = rs(1)
Text8 = rs(2)
Text10 = rs(3)
MsgBox "weiter ?"
rs.MoveNext
Wend
End Sub
TFH Berlin/Steyer
7-6
Module
Private Sub Befehl2_Click()
'alle ändern
Dim db As DAO.Database
Set db = CurrentDb()
db.Execute ("UPDATE person SET palter = palter + 1")
End Sub
Private Sub Befehl3_Click()
'alle löschen
Dim db As DAO.Database
Set db = CurrentDb()
db.Execute ("DELETE FROM person")
End Sub
ohne SQL
Private Sub Befehl15_Click()
‘Zeile einfügen
Dim db As DAO.Database, ta As DAO.Recordset
Set db = CurrentDb()
Set ta = db.OpenRecordset("person", DB_OPEN_TABLE)
ta.AddNew
ta!pnr = Text0
ta!nachname = Text5
ta!vorname = Text9
ta!alter = Text12
ta.Update
ta.Close
End Sub
Private Sub Befehl16_Click()
‘alle lesen
Dim db As DAO.Database, ta As DAO.Recordset
Set db = CurrentDb()
Set ta = db.OpenRecordset("person", DB_OPEN_TABLE)
ta.MoveFirst
While Not ta.EOF
Text0 = ta![pnr]
Text5 = ta![nachname]
Text9 = ta![vorname]
Text12 = ta![alter]
MsgBox "weiter ?"
ta.MoveNext
Wend
ta.Close
End Sub
Private Sub Befehl17_Click()
‘alle ändern
Dim db As DAO.Database, ta As DAO.Recordset
Set db = CurrentDb()
Set ta = db.OpenTable("person")
ta.MoveFirst
While Not ta.EOF
ta.Edit
TFH Berlin/Steyer
7-7
Module
ta![alter] = ta![alter] + 10
ta.Update
ta.MoveNext
Wend
ta.Close
End Sub
Private Sub Befehl18_Click()
‘alle löschen
Dim db As DAO.Database, ta As DAO.Recordset
Set db = CurrentDb()
Set ta = db.OpenTable("person")
ta.MoveFirst
While Not ta.EOF
ta.Edit
ta.Delete
ta.MoveNext
Wend
ta.Close
End Sub
Weitere Möglichkeiten
select und recordset
Abfrage und recordset
find und recordset
Private Sub Befehl0_Click()
'select und recordset
Dim db As DAO.Database, ta As DAO.Recordset, sql As String
Set db = CurrentDb()
sql = "SELECT nachname FROM person;"
Set ta = db.openrecordset(sql, dbopendynaset)
ta.MoveFirst
While Not ta.EOF
MsgBox ta!nachname
MsgBox "Weiter"
ta.MoveNext
Wend
ta.Close
End Sub
Private Sub Befehl0_Click()
'Abfrage und recordset
Dim db As DAO.Database, ta As DAO.Recordset, sql As String
Set db = CurrentDb()
sql = "SELECT * FROM namen;"
Set ta = db.openrecordset(sql, dbopendynaset)
ta.MoveFirst
While Not ta.EOF
MsgBox ta!Ausdr1
MsgBox "Weiter"
ta.MoveNext
Wend
ta.Close
End Sub
TFH Berlin/Steyer
7-8
Module
Private Sub Befehl0_Click()
'find und recordset
Dim db As DAO.Database, ta As DAO.Recordset, bedingung As String
Set db = CurrentDb()
bedingung = "alter < 10"
Set ta = db.openrecordset(“person”, dbopendynaset)
ta.FindFirst bedingung
While Not ta.NoMatch
MsgBox ta!nachname
MsgBox "Weiter"
ta.MoveFindNext bedingung
Wend
ta.Close
End Sub
TFH Berlin/Steyer
7-9
Module
Selbstanwendung: Tabellen/Abfragen/Formulare/Berichte bearbeiten
Tabellen:
Private Sub Befehl2_Click()
'Tabelle erzeugen
Dim db As DAO.Database
Dim df As DAO.TableDef
Dim fe As DAO.Field
Set db = CurrentDb()
Set df = db.CreateTableDef("neu")
Set fe = df.CreateField("f1", DB_TEXT, 60)
df.Fields.Append fe
db.TableDefs.Append df
End Sub
Private Sub Befehl3_Click()
'Tabelle füllen
Dim db As DAO.Database
Dim ta As DAO.Recordset
Set db = CurrentDb()
Set ta = db.OpenRecordset("neu", DB_OPEN_TABLE)
ta.AddNew
ta!f1 = "x1"
ta.Update
ta.Close
End Sub
Private Sub Befehl4_Click()
'Tabelle löschen
Dim db As DAO.Database
Set db = CurrentDb()
db.TableDefs.Delete "neu"
End Sub
TFH Berlin/Steyer
7-10
Module
Abfragen:
Private Sub Befehl5_Click()
'Abfrage erzeugen
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb()
Set qdf = db.CreateQueryDef("myquery")
Dim strSQL As String
Dim strWhere As String
strWhere = "alter > 5"
'kann auch aus Eingabevariablen gelesen und zusammengebastelt werden
strSQL = "SELECT * FROM person WHERE " & strWhere
MsgBox strSQL
qdf.SQL = strSQL
End Sub
Private Sub Befehl6_Click()
'Abfrage ausführen
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb()
Set qdf = db.QueryDefs("myquery")
qdf.OpenRecordset
'hier noch anzeigen
End Sub
Private Sub Befehl7_Click()
'Abfrage löschen
Dim db As DAO.Database
Set db = CurrentDb()
db.QueryDefs.Delete "myquery"
End Sub
Formulare:
Private Sub Befehl11_Click()
MsgBox Forms.Count
'Formulare anzeigen
MsgBox Forms(0).Caption
For i = 0 To Forms.Count - 1
MsgBox Forms(i).Caption
Next
End Sub
Private Sub Befehl1_Click()
'Formular erzeugen
Dim fo As Form
Set fo = CreateForm
DoCmd.Restore
fo.Caption = Text2 + "Form"
End Sub
TFH Berlin/Steyer
7-11
Module
Private Sub Befehl4_Click()
'Formular öffnen
DoCmd.OpenForm Text2 + "Form"
End Sub
Berichte:
Private Sub Befehl14_Click()
MsgBox Reports.Count
'Berichte anzeigen
MsgBox Reports(0).Caption
For i = 0 To Reports.Count - 1
MsgBox Reports(i).Caption
Next
End Sub
Private Sub Befehl1_Click()
'Bericht erzeugen
Dim rp As Report
Set rp = CreateReport
DoCmd.Restore
rp.Caption = Text2 + "Report"
End Sub
Private Sub Befehl4_Click()
'Bericht öffnen
DoCmd.OpenReport Text2 + "Report"
End Sub
TFH Berlin/Steyer
7-12
Module
DoCmd-Methoden:
AddMenu
ApplyFilter
Beep
CancelEvent
Close
CopyObject
DeleteObject
DoMenuItem
Echo
FindNext
FindRecord
GoToControl
GoToPage
GotToRecord
Hourglass
Maximize
Minimize
MoveSize
OpenForm
OpenModule
OpenQuery
OpenReport
OpenTable
OutputTo
PrintOut
Quit
Rename
RepaintObject
Requery
Restore
RunCommand
RunMacro
RunSQL
Save
SelectObject
SendObject
SetMenuItem
SetWarnings
ShowAllRecords
ShowToolbar
TransferDatabase
TransferSpreadsheet
TransferText
TFH Berlin
7-13
Herunterladen