Datensatz duplizieren

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.

Datensatz duplizieren

Manchmal möchten Sie einen neuen Datensatz auf Basis eines bereits vorhandenen Datensatzes anlegen – beispielsweise um diesen anschließend anzupassen. Dazu gibt es unter Access verschiedene Möglichkeiten – per Benutzeroberfläche oder auch per VBA. Wir schauen uns die Varianten an.

Beispieldatenbank

Für die Beispiele haben wir eine kleine Beispieldatenbank mit den Tabellen der Südsturm-Datenbank erstellt. Diese enthält ein Haupt- und ein Unterformular, wobei das Unterformular die Datensätze der Tabelle tblArtikel in der Datenblattansicht anzeigt. Damit und mit verschiedenen Schaltflächen im Hauptformular wollen wir die Möglichkeiten zum Duplizieren vorstellen (s. Bild 1).

Beispielformular dieses Beitrags

Bild 1: Beispielformular dieses Beitrags

Datensatz von Hand in der Datenblattansicht kopieren

Die einfachste Variante, einen Datensatz zu duplizieren, erfordert ein paar Mausklicks. Dazu markieren Sie den zu duplizierenden Datensatz per Mausklick auf den grauen Kasten links vom Datensatz, kopieren diesen per Strg + C oder Kontextmenübefehl, klicken dann auf den gleichen Bereich in der Zeile für einen neuen, leeren Datensatz und fügen den zu duplizierenden Datensatz dann per Strg + V oder den entsprechenden Kontextmenübefehl an dieser Stelle ein (s. Bild 2).

Datensatz von Hand in der Datenblattansicht kopieren

Bild 2: Datensatz von Hand in der Datenblattansicht kopieren

Diese Variante funktioniert einwandfrei (solange keine eindeutig indizierten Felder enthalten sind). Das einzige eindeutig indizierte Feld ist das Primärschüsselfeld, und dieses wird bei dieser Methode ganz einfach durch die Autowert-Funktion mit einem neuen Wert belegt.

Duplizieren mit Tastaturbefehlen

Die Aktionen der Benutzeroberfläche lassen sich in der Regel durch VBA-Befehle der Klasse DoCmd abbilden – oder durch den Aufruf der RunCommand-Methode mit einem ihrer zahlreichen Parameter. Die RunCommand-Methode ist dabei wiederum eine Methode der DoCmd-Klasse, aber auch des Application-Objekts. Sie können diese Anweisung daher auch ohne Voranstellen des entsprechenden Objekts einsetzen. Also legen wir eine Schaltfläche im Hauptformular an, welche den aktuell markierten Datensatz im Unterformular duplizieren soll. Den kompletten Ablauf steuern wir fast ausschließlich mit der RunCommand-Anweisung:

Private Sub cmdDuplizierenMitDoCmd_Click()
     Me!sfmArtikel.SetFocus
     RunCommand acCmdSelectRecord
     RunCommand acCmdCopy
     RunCommand acCmdRecordsGoToNew
     RunCommand acCmdSelectRecord
     RunCommand acCmdPaste
End Sub

Die einzige Ausnahme ist das Setzen des Fokus auf das Unterformular, denn sonst würde beispielsweise die Anweisung RunCommand acCmdSelectRecord auf das aktuelle Formular angewendet werden – und da wir soeben auf eine Schaltfläche im Hauptformular geklickt haben, wäre dies das Hauptformular.

Nach dem Verschieben des Fokus auf das Unterformular rufen wir nacheinander mehrmals die RunCommand-Anweisung auf und bilden damit genau die Schritte ab, die wir zuvor von Hand durchgeführt haben: Die Konstante acCmdSelectRecord markiert den kompletten Datensatz, acCmdCopy kopiert diesen, acCmdRecordsGoToNew verschiebt den Datensatzzeiger auf den leeren, neuen Datensatz, acCmdSelectRecord markiert diesen und acCmdPaste fügt den Datensatz aus der Zwischenablage dort ein. Die Lösung funktioniert grundsätzlich, aber vielleicht möchte Sie etwas mehr Kontrolle, indem Sie den Artikel unabhängig von der aktuell angezeigten Benutzeroberfläche duplizieren.

Datensatz kopieren ohne Formular

Wenn Sie den Datensatz per VBA kopieren wollen, können Sie theoretisch also beispielsweise eine INSERT INTO...SELECT-Anweisung verwenden (s. Listing 1). Zu Beispielzwecken integrieren wir diese wieder in das Formular, so kann der Benutzer den zu kopierenden Datensatz auswählen und der Datensatzzeiger soll anschließend direkt auf den neuen Datensatz verschoben werden. Die Prozedur liest zuerst den Primärschlüsselwert des aktuell im Unterformular markierten Datensatzes ein. Ist kein Datensatz markiert, erhält lngArtikelID den Wert 0. Ist lngArtikelID nicht 0, führt die Prozedur die in der If...Then-Bedingung enthaltenen Anweisungen aus. Hier ruft sie eine SQL-Anweisung auf, die den kompletten Datensatz selektiert und als neuen Datensatz in die Tabelle tblArtikel einfügt. Danach ermittelt sie den Primärschlüsselwert des zuletzt eingefügten Datensatzes und schreibt diesen wieder in die Variable lngArtikelID. Nach dem Aktualisieren des Unterformulars soll der Datensatzzeiger auf den neuen Datensatz verschoben werden.

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.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]