HINWEIS
BEISPIEL
Kapitel 16: Techniken der Programmentwicklung
In unserem Beispiel kommt die zweite Variante zum Einsatz: In der Ereignisprozedur ConfirmDelete kann
der Anwender den Parameter cancel verändern, je nach gesetztem Wert wird das Steuerelement das Löschen
eines Datensatzes zulassen oder abbrechen.
Bisher wurden lediglich die Ereignisse deklariert, nicht aufgerufen! Auslösen werden wir diese vordefinierten
Ereignisse später aus den einzelnen Methoden der Komponente heraus.
Auslösen eines Ereignisses
RaiseEvent CancelClick
Methoden
Neben den Eigenschaften und Ereignissen sind die Methoden die dritte Schnittstelle eines ActiveX-
Controls. An dieser Stelle werden wir auf dieses Thema allerdings nicht weiter eingehen, da unser Steuer-
element keine öffentlichen Methoden benötigt. Ansonsten ließe sich alles übernehmen, was in Kapitel 5
über Methoden geschrieben wurde.
Wenden wir uns deshalb nach der Definition der Steuerelement-Schnittstelle den eigentlichen Routinen zu.
Hinzufügen der Datenbankfunktionen
Bevor wir uns den Datenbank-Objekten zuwenden können, müssen wir einen Verweis auf die Microsoft
DAO 3.6 Object Library einrichten. Über Projekt/Verweise... erreichen Sie ein bekanntes Dialogfeld:
Abbildung 16.32 Einrichten eines Verweises
auf die DAO-Bibliothek
Nächster Schritt ist die Definition der Recordset-Eigenschaft, der später im Anwenderprogramm ein
initialisierter Recordset übergeben werden kann. Intern wird das Objekt in einer privaten Variablen ge-
speichert:
1048
Private rs As Recordset
Public Property Get Recordset() As Recordset
Set Recordset = rs
End Property
Public Property Set Recordset(ByVal vNewValue As Recordset)
On Error Resume Next
Set rs = vNewValue
TastenSperren
RaiseEvent Current
End Property
Nach Zuweisen der Objektvariablen (Set beachten!) werden über die Prozedur TastenSperren alle nötigen
Anpassungen am Layout des Steuerelements vorgenommen. Danach lösen wir erst einmal ein Ereignis aus.
Der Anwender bekommt damit die Möglichkeit, die Daten im Anzeigeformular zu aktualisieren.
Zurück zur Prozedur TastenSperren. Je nach übergebenem Recordset-Typ sind nicht alle Datensatz-
operationen zulässig
1
:
Private Sub TastenSperren()
If rs.EditMode = dbEditNone Then
BInsert.Enabled = rs.Updatable
BEdit.Enabled = rs.Updatable
BDelete.Enabled = rs.Updatable
BCancel.Enabled = False
BSave.Enabled = False
If rs.Type = dbOpenForwardOnly Then
BPrevious.Enabled = False
BFirst.Enabled = False
BLast.Enabled = False
Else
BPrevious.Enabled = True
BFirst.Enabled = True
BLast.Enabled = True
End If
BNext.Enabled = True
Else
BInsert.Enabled = False
BEdit.Enabled = False
BDelete.Enabled = False
BCancel.Enabled = True
BSave.Enabled = True
BPrevious.Enabled = False
BFirst.Enabled = False
BNext.Enabled = False
BLast.Enabled = False
End If
End Sub
Sollte sich die Datenmenge im Editiermodus befinden, sind nur die Operationen CancelUpdate und Update
zulässig.
1
In einem ForwardOnly-Recordset können die Methoden MoveFirst und MovePrevious nicht ausgeführt werden.
1049
ActiveX-Controls mit VB 6 programmieren
Kapitel 16: Techniken der Programmentwicklung
Was jetzt folgt, ist reine DAO-Programmierung (siehe Kapitel 6). Jede Taste wird mit dem zugehörigen
Ereigniscode belegt, gegebenenfalls werden Ereignisse ausgelöst.
Private Sub BCancel_Click()
If IsEmpty(rs) Then Exit Sub
RaiseEvent CancelClick
rs.CancelUpdate
TastenSperren
RaiseEvent Current
End Sub
Besonders interessant dürfte die Delete-Taste sein, wird doch hier das Ereignis-Argument im weiteren Pro-
grammverlauf ausgewertet (Rückmeldung vom Anwenderprogramm):
Private Sub BDelete_Click()
Dim bbCancel As Boolean
If IsEmpty(rs) Then Exit Sub
bbCancel = False
RaiseEvent ConfirmDelete(bbCancel)
If Not bbCancel Then ' Datensatz löschen
If Not (rs.BOF And rs.EOF) Then rs.Delete
rs.MoveNext
If rs.EOF Then rs.MoveLast
RaiseEvent Current
End If
End Sub
Private Sub BEdit_Click()
If IsEmpty(rs) Then Exit Sub
rs.Edit
TastenSperren
RaiseEvent EditClick
End Sub
Private Sub BFirst_Click()
If IsEmpty(rs) Then Exit Sub
rs.MoveFirst
RaiseEvent Current
End Sub
Private Sub BInsert_Click()
If IsEmpty(rs) Then Exit Sub
rs.AddNew
TastenSperren
RaiseEvent InsertClick
End Sub
Private Sub BLast_Click()
If IsEmpty(rs) Then Exit Sub
rs.MoveLast
RaiseEvent Current
End Sub
1050

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.