Datensatzvorlage per Mausklick

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Datensatzvorlage per Mausklick

Im Beitrag »Dynamische Standardwerte« haben wir uns angesehen, wie Sie bestimmte Werte als Standardwerte für neue Datensätze nutzen können. Dabei haben wir immer die zuletzt angegebenen Werte in einer Tabelle gespeichert und diese beim Anlegen eines neuen Datensatzes als Standardwerte vorgegeben. Etwas mehr Flexibilität erhalten Sie noch, wenn Sie selbst festlegen können, welche Daten als Standardwerte für folgende Datensätze genutzt werden sollen. Sprich: Uns fehlt noch die Möglichkeit, einen Wert eines beliebigen Datensatzes als Standardwerts zu nutzen. Außerdem wollen wir noch komplette Datensätze als Vorlage für neue Datensätze nutzen können. Wie dies gelingt, erfahren Sie im vorliegenden Beitrag.

Kompletten Datensatz als Vorlage speichern

Im Beitrag Dynamische Standardwerte (www.access-im-unternehmen.de/1052) haben wir ein Formular mit einer Funktion ausgestattet, die immer die Daten des zuletzt geänderten oder neu angelegten Datensatzes als Standardwerte zu speichern (siehe auch das Formular frmArtikel_Standardwerttabelle in der Beispieldatenbank).

Nun wollen wir in einem weiteren Formular zeigen, wie Sie es dem Benutzer überlassen können, den Datensatz festzulegen, dessen Werte als Standardwerte gespeichert werden sollen. Dazu fügen wir einer Kopie des Formulars frmArtikel_Standardwerttabelle, das wir hier unter dem Namen frmArtikel_Standarddatensatz gespeichert haben, eine Schaltfläche namens cmdDatensatzAlsStandard mit der Beschriftung wie in Bild 1 hinzu.

Schaltfläche zum Speichern des Datensatzes als Standard

Bild 1: Schaltfläche zum Speichern des Datensatzes als Standard

Dieser Schaltfläche hinterlegen wir für die Ereigniseigenschaft Beim Klicken die Ereignisprozedur aus Listing 1. Diese Prozedur ruft für jedes Steuerelement, dessen Standardwert wir speichern möchten (also alle außer dem Primärschlüsselfeld), je einmal die Prozedur StandardwertSpeichern auf, die wir im oben genannten Artikel vorgestellt haben. Dabei übergibt sie einen Verweis auf das aufrufende Formular, den Namen des Steuerelements sowie einen Verweis auf den aktuellen Inhalt des Steuerelements an die Prozedur.

Private Sub cmdDatensatzAlsStandard_Click()
     StandardwertSpeichern Me.Name, "txtArtikelname", Nz(Me!txtArtikelname)
     StandardwertSpeichern Me.Name, "cboKategorieID", Nz(Me!cboKategorieID)
     StandardwertSpeichern Me.Name, "cboLieferantID", Nz(Me!cboLieferantID)
     StandardwertSpeichern Me.Name, "txtLiefereinheit", Nz(Me!txtLiefereinheit)
     StandardwertSpeichern Me.Name, "txtEinzelpreis", Nz(Me!txtEinzelpreis)
     StandardwertSpeichern Me.Name, "txtLagerbestand", Nz(Me!txtLagerbestand)
     StandardwertSpeichern Me.Name, "txtBestellteEinheiten", Nz(Me!txtBestellteEinheiten)
     StandardwertSpeichern Me.Name, "txtMindestbestand", Nz(Me!txtMindestbestand)
     StandardwertSpeichern Me.Name, "chkAuslaufartikel", Nz(Me!chkAuslaufartikel)
     StandardwertSpeichern Me.Name, "txtAufgenommenAm", Nz(Me!txtAufgenommenAm)
End Sub

Listing 1: Diese Prozedur wird beim Anklicken der Schaltfläche Datensatz als Standard ausgelöst.

Wenn Sie nun auf die Schaltfläche klicken, werden die Daten des aktuellen Datensatzes in der Tabelle tblStandardwerte gespeichert (s. Bild 2).

Kompletter gespeicherter Datensatz in der Tabelle tblStandardwerte

Bild 2: Kompletter gespeicherter Datensatz in der Tabelle tblStandardwerte

Nun benötigen wir noch einen Mechanismus, der diesen Datensatz beim Anzeigen eines neuen Datensatzes automatisch als Standardwert vorgibt. Dazu brauchen wir das Rad nicht neu zu erfinden – die entsprechenden Ereignisprozeduren werden durch die Ereignisse Beim Anzeigen und Beim Entladen des Formulars ausgelöst und wurden bereits im oben genannten Beitrag vorgestellt. Die Prozedur Form_Current ruft im Falle eines neuen Datensatzes die Prozedur StandardwerteSetzen auf und übergibt eine Referenz auf das aktuelle Formular. Die Prozedur Form_Unload wird beim Entladen des Formulars ausgelöst und führt ihre Anweisungen ebenfalls nur aus, wenn aktuell ein neuer Datensatz angezeigt wird. Sie fragt dann, ob der neu angelegte Datensatz, der bis dahin noch nicht bearbeitet wurde, gespeichert oder verworfen werden soll. Dies nur zur Sicherheit, falls der Benutzer glaubt, der ausschließlich mit Standardwerten (und somit noch nicht in der Tabelle gespeicherte) gefüllte Datensatz würde automatisch gespeichert.

Standardwerte per Schleife

Bislang ist es noch etwas mühselig, immer alle als Standardwert zu verwendenden Felder wie in den beiden Beispielen des oben genannten Beitrags entweder per Code einzeln zu speichern oder diese zuerst mit einer Marke zu versehen. Zumal man ja vielleicht ohnehin meist eher alle Felder außer dem Primärschlüsselfeld als Standardwerte vorgeben möchte.

Also haben wir noch ein weiteres Formular namens frmArtikel_StandardwertePerSchleife angelegt, in dem wir beim Anklicken der Schaltfläche cmdDatensatzAlsStandard eine Prozedur aufrufen, die automatisch alle Steuerelemente durchläuft und für alle einen Standardwert in der Tabelle tblStandardwerte hinterlegt, die nicht Primärschlüsselwert der zugrunde liegenden Datenherkunft sind.

Hier legen wir für die Ereignisprozedur, die durch das Anklicken der Schaltfläche cmdDatensatzAlsStandard ausgelöst wird, die folgende Anweisung an:

Private Sub cmdDatensatzAlsStandard_Click()
     StandardwerteSpeichernAusserPK Me
End Sub

Die dort aufgerufene Prozedur StandardwerteSpeichernAusserPK finden Sie in Listing 2. Die Prozedur erwartet wieder einen Verweis auf das zu untersuchende Formular als Parameter. Die Prozedur speichert einen Verweis auf das in der Recordset-Eigenschaft des Formulars enthaltene Objekt in der Variablen rst. Dann durchläuft es alle Steuerelemente der Controls-Auflistung des Formulars und schreibt das aktuelle Steuerelement jeweils in die Variable ctl. Nun fügt sie der Variablen strControlsource eine leere Zeichenkette hinzu. Warum das? Weil die Prozedur nachfolgend versucht, diese mit dem Inhalt der Eigenschaft ControlSource des aktuellen Steuerelements aus ctl zu füllen. Warum dies nur ein Versuch ist? Weil wir ja alle Steuerelemente durchlaufen, also beispielsweise auch Bezeichnungsfelder oder Schaltflächen, die ja üblicherweise nicht nur keinen Steuerelementinhalt haben, sondern denen auch die entsprechende Eigenschaft fehlt. Und wenn wir auf die Eigenschaft ControlSource beziehungsweise Steuerelement zugreifen und diese nicht vorhanden ist, löst dies einen Fehler aus.

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.