Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 4/2010.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erfahren Sie, wie Sie mit Schnittstellenklassen die Nutzung gleichartiger Implementierungen vereinheitlichen.

Techniken

VBA, Klassenprogrammierung

Voraussetzungen

Access 2000 und höher

Beispieldateien

Schnittstellen.mdb

Shortlink

www.access-im-unternehmen.de/734

Schnittstellenvererbung

André Minhorst, Duisburg

Access-Entwickler sind nicht gerade verwöhnt, wenn es um objektorientierte Techniken unter VBA geht. Es gibt zwar die Möglichkeit, Klassen zu programmieren und Objekte auf Basis dieser Klassen zu erzeugen, aber Features wie Vererbung fallen weitgehend flach. Weitgehend? Nun, zumindest die sogenannte Schnittstellenvererbung ist unter VBA möglich. Damit können Sie immerhin mehrere Ausprägungen einer Klasse nach den Vorgaben einer Schnittstelle implementieren und diese je nach Bedarf austauschen.

Bevor wir uns den technischen Feinheiten widmen, schauen wir uns erstmal den Sinn und Zweck der Schnittstellenvererbung an. Es gibt Anforderungen, die sehr ähnliche Vorgänge mit verschiedenen Techniken umsetzen. Ein Beispiel dafür ist das Versenden von E-Mails: Sie können dazu Outlook fernsteuern oder alternativ eine der vielen Klassen zum direkten Versenden von E-Mails via Winsock und SMTP einsetzen. Für Ihre Anwendung ist das Ziel immer gleich: Die E-Mail soll beim Empfänger ankommen und dafür stellen wir ein Paket aus Informationen wie Empfänger, Absender, Betreff und Inhalt der E-Mail zusammen. Der Rest interessiert uns nicht - dies sollen entsprechende Prozeduren erledigen.

Ein ähnliches Beispiel ist die Ausgabe von Daten. Diese sollen einmal in einem Bericht landen, ein anderes Mal in einem Word-Dokument, vielleicht aber auch einfach in einer Textdatei, in einem HTML- oder XML-Dokument oder als schlichte Ausgabe im Direktfenster des VBA-Editors.

Auch hier haben wir wenig Lust, uns darum zu kümmern, wie der Inhalt im entsprechenden Ausgabeformat landet - wir möchten höchstens festlegen, welches Ausgabeformat verwendet wird und gegebenenfalls die dorthin geschickten Daten filtern oder sortieren.

Dies alles ist mit herkömmlichen Prozeduren möglich. Im Falle der E-Mails würden Sie die Daten wie Absender, Empfänger, Betreff und Text etwa per Formular abfragen und dann die Prozedur zum Versenden der E-Mail aufrufen.

Diese entscheidet dann auf Basis vorher festgelegter Kriterien, ob die E-Mail mit Outlook oder direkt per SMTP verschickt wird, und steuert den entsprechenden Zweig einer If...Then- oder Select Case-Bedingung an. In den verschiedenen Zweigen steckt dann versandspezifischer Code oder schlicht ein Aufruf einer Funktion, welche den Versand auf die angegebene Weise durchführt.

Sie würden dann beispielsweise zwei Funktionen definieren, deren Prozedurköpfe etwa so aussehen:

Public Function MailToOutlook(strSender As String, strRecipient As String, strSubject As String, strBody As String)

    Public Function MailToSMTP(strSender As String, strRecipient As String, strSubject As String, strBody As String)

Die aufrufende Prozedur enthielte dann beispielsweise den folgenden Code:

Select Case strVersandart

    Case "Outlook"

        Call MailToOutlook (...)

    Case "SMTP"

        Call MailToSMTP (...)

End Select

Sie haben hier alle Freiheiten: Die Funktionen MailToOutlook oder MailToSMTP könnten beispielsweise auch zusätzliche Parameter verwenden, oder Sie erweitern das Select Case-Statement um eine dritte Methode zum Versenden von E-Mails.

Klasse Funktion

Die Funktionen zum Versenden von E-Mails könnten auch in zwei Klassen ausgelagert werden. Die Klasse zum Versenden von E-Mails via SMTP könnte beispielsweise wie in Listing 1 aussehen. Die Klasse für den Versand mit Outlook sieht genauso aus, nur dass die Methode zum Versenden der E-Mail den Namen SendSMTPMail besitzt.

Listing 1: Klasse zum Versenden von E-Mails via SMTP

Private m_Sender As String

Private m_Recipient As String

Private m_Subject As String

Private m_Body As String

Public Property Let Sender(strSender As String)

    m_Sender = strSender

End Property

Public Property Let Recipient(strRecipient As String)

    m_Recipient = strRecipient

End Property

Public Property Let Subject(strSubject As String)

    m_Subject = strSubject

End Property

Public Property Let Body(strBody As String)

    m_Body = strBody

End Property

Public Function SendSMTPMail() As Boolean

    '... Code zum Senden der Mail per SMTP

    SendSMTPMail = True

End Function

Eine Prozedur, welche eine dieser beiden Klassen aufruft, sieht etwa wie in Listing 2 aus. Sie bekommt per Parameter den Versender, den Empfänger, den Betreff und den Inhalt sowie die Versandart übermittelt. Mit diesen Informationen entscheidet die Select Case-Bedingung, welcher der beiden Zweige angesteuert werden soll.

Listing 2: Instanzierung der Klassen zum Versenden von E-Mails und Versenden der E-Mail

Public Sub MailVersenden(strAbsender As String, strEmpfaenger As String, strBetreff As String, strInhalt As String, strVersandart As String)

    Dim objSendSMTPMail As clsSendSMTPMail

    Dim objSendOutlookMail As clsSendOutlookMail

    Select Case strVersandart

        Case "SMTP"

            Set objSendSMTPMail = New clsSendSMTPMail

            With objSendSMTPMail

                .Sender = strAbsender

                .Recipient = strEmpfaenger

                .Subject = strBetreff

                .Body = strInhalt

                If .SendSMTPMail = True Then

                    MsgBox "Versand via SMTP erfolgreich!"

                End If

            End With

        Case "Outlook"

            Set objSendOutlookMail = New clsSendOutlookMail

            With objSendOutlookMail

                .Sender = strAbsender

                .Recipient = strEmpfaenger

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Das Factory-Pattern

Validieren mit Klasse

Modale Dialoge mal anders

Ereignisprozeduren implantieren

Objektorientiertes Programmieren mit Klassen

Effizientes Codieren

Ereignisse im Eigenbau

© 2003-2015 André Minhorst Alle Rechte vorbehalten.