{"id":55000058,"date":"2011-10-01T00:00:00","date_gmt":"2020-01-24T15:57:47","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=58"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Aktionsabfragen_per_VBA_ausfuehren","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html","title":{"rendered":"Aktionsabfragen per VBA ausf&uuml;hren"},"content":{"rendered":"<p class='introduction'>Aktionsabfragen lassen sich bequem mit der Entwurfsansicht f&uuml;r Abfragen zusammenstellen. Sie k&ouml;nnen damit Daten an Tabellen anf&uuml;gen, bestehende Daten &auml;ndern oder l&ouml;schen und sogar gleich die passende Tabelle zum Einf&uuml;gen von Daten erstellen. Wie aber soll der Benutzer eine solche Abfrage aufrufen, ohne doppelt auf den entsprechenden Eintrag im Datenbankfenster oder im Navigationsbereich zu klicken Dieser Artikel zeigt, wie Sie dies realisieren.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele zu diesem Artikel finden Sie in der Datenbank <b>1105_AktionsabfragenPerVBA.mdb<\/b>.<\/p>\n<h2>Aktionsabfragen<\/h2>\n<p>Wenn Sie eine Aktionsabfrage erstellen, gehen Sie wie in Aktionsabfragen &#8211; Teil II: L&ouml;schabfragen oder Aktionsabfragen &#8211; Teil I: Anf&uuml;geabfragen beschrieben vor. Weitere Artikel zu Aktualisierungsabfragen oder Tabellenerstellungsabfragen folgen in sp&auml;teren Ausgaben.<\/p>\n<p>Das Resultat beim Erstellen einer Aktualisierungsabfrage mit der Abfrageentwurfsansicht ist eine gespeicherte Abfrage. Diese f&uuml;hren Sie per Doppelklick auf den entsprechenden Eintrag im Datenbankfenster oder im Navigationsbereich aus.<\/p>\n<p>Ein Beispiel hierf&uuml;r ist die L&ouml;schabfrage aus Bild 1. Sie ist unter dem Namen <b>qryArtikelLoeschen <\/b>gespeichert und bildet die Grundlage f&uuml;r das folgende Beispiel.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_58_524.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_58_524.png\" alt=\"Entwurfsansicht einer Abfrage zum L&ouml;schen des Artikels mit dem Wert 1 im Feld ArtikelID.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Entwurfsansicht einer Abfrage zum L&ouml;schen des Artikels mit dem Wert 1 im Feld ArtikelID.<\/p>\n<p>Die Abfrage l&ouml;scht genau einen Datensatz, und zwar den mit dem Wert <b>1 <\/b>im Feld <b>ArtikelID<\/b>. Das gilt nat&uuml;rlich nur, wenn ein solcher Datensatz &uuml;berhaupt vorhanden ist. Sonst bewirkt der Aufruf dieser Abfrage gar nichts.<\/p>\n<h2>Die Execute-Methode<\/h2>\n<p>Nun folgt der interessante Teil: Access bietet eine ganze Reihe von VBA-Objekten an, die wiederum praktische Methoden etwa f&uuml;r den Zugriff auf Daten offerieren. In unserem Fall geht es um das Objekt, dass die aktuelle Datenbank repr&auml;sentiert.<\/p>\n<p>Es hat den Datentyp <b>Database <\/b>und wird als Objektvariable deklariert. Das alles ist f&uuml;r Einsteiger vielleicht noch etwas unverst&auml;ndlich &#8211; das ist aber kein Problem. Manche Dinge kann man zu Beginn einfach als gegeben hinnehmen. In diesem Fall geht es um die folgenden Codezeilen:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>Database\r\n<span style=\"color:blue;\">Set<\/span> db = CurrentDb<\/pre>\n<p>Die erste Zeile deklariert <b>db <\/b>als Objektvariable des Typs <b>Database<\/b>, die zweite f&uuml;llt diese Variable mit dem Wert der Funktion <b>CurrentDb<\/b>. <b>CurrentDb <\/b>wiederum liefert einen Verweis auf die aktuelle Datenbank.<\/p>\n<p>Dank dieser beiden Zeilen k&ouml;nnen Sie nachfolgend &uuml;ber die Variable <b>db <\/b>bestimmte Aktionen mit der Datenbank durchf&uuml;hren.<\/p>\n<p>In unserem Fall soll eine Aktionsabfrage durchgef&uuml;hrt werden, genau genommen eine L&ouml;schabfrage.<\/p>\n<p>Der dazu ben&ouml;tigte Befehl des mit <b>db <\/b>referenzierten Objekts hei&szlig;t <b>Execute<\/b>. <b>Execute <\/b>erwartet als Parameter zumindest eine Variable oder Zeichenkette, die folgendes enth&auml;lt:<\/p>\n<ul>\n<li>den Namen der Aktionsabfrage, wie Sie ihn auch im Datenbankfenster oder im Navigationsbereich finden (hier also beispielsweise <b>qryArtikelLoeschen<\/b>)<\/li>\n<li>den SQL-Code der Aktionsabfrage (wie Sie diesen ermitteln, erfahren Sie gleich).<\/li>\n<\/ul>\n<p>Am einfachsten ist es nat&uuml;rlich, wenn Sie eine <b>DELETE<\/b>-Abfrage per Abfrageentwurf zusammenstellen und diese direkt per VBA aufrufen m&ouml;chten. Die n&ouml;tigen Anweisungen sehen dann so aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>EinfacherAufruf()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     db.Execute \"qryArtikelLoeschen\"\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wenn Sie das Beispiel nachvollziehen m&ouml;chten, legen Sie ein neues Standardmodul an und f&uuml;gen Sie den obigen Code dort ein (?[basics] VBA-Modul anlegen). <\/p>\n<p>Wenn Sie als Parameter der <b>Execute<\/b>-Methode einfach nur den Namen einer Aktionsabfrage angeben, wird diese einfach aufgerufen. Allerdings m&uuml;ssen bereits alle Einstellungen in der Abfrage selbst vorgenommen werden &#8211; zum Beispiel, ob alle Datens&auml;tze der Tabelle gel&ouml;scht werden sollen oder nur einer. Im obigen Beispiel wird die Abfrage <b>qryArtikelLoeschen <\/b>ausgel&ouml;st, was den Artikel mit dem Wert <b>1 <\/b>im Feld <b>ArtikelID <\/b>l&ouml;scht.<\/p>\n<p>Die Abfrage f&uuml;hren Sie beispielsweise aus, indem Sie  die Einf&uuml;gemarke irgendwo innerhalb der Prozedur platzieren und dann die Taste <b>F5 <\/b>bet&auml;tigen oder den Men&uuml;befehl <b>Ausf&uuml;hren|Sub\/Userform ausf&uuml;hren <\/b>aufrufen.<\/p>\n<p>F&uuml;r den Anfang pr&uuml;fen Sie nun per Sichtkontrolle, ob der Datensatz tats&auml;chlich gel&ouml;scht wurde &#8211; und zwar, indem Sie die Tabelle <b>tblArtikel <\/b>&ouml;ffnen und schauen, ob der Datensatz noch vorhanden ist.<\/p>\n<h2>Achtung: Keine R&uuml;ckfrage!<\/h2>\n<p>Die <b>Execute<\/b>-Anweisung f&uuml;hrt die angegebene Aktionsabfrage ohne R&uuml;ckfrage aus. Wenn Sie also etwa einen Artikel erst l&ouml;schen m&ouml;chten, wenn der Benutzer dem explizit zugestimmt hat, m&uuml;ssen Sie die <b>Execute<\/b>-Anweisung noch in eine <b>If&#8230;Then<\/b>-Bedingung einfassen, die das Ergebnis einer <b>MsgBox<\/b>-Funktion pr&uuml;ft. Dies kann etwas allgemein formuliert etwa so aussehen:<\/p>\n<pre><span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">MsgBox<\/span>(\"Datensatz l&ouml;schen\", vbYesNo) = vbYes<span style=\"color:blue;\"> Then<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     db.Execute \"qryArtikelLoeschen\"\r\n<span style=\"color:blue;\">End If<\/span><\/pre>\n<h2>Aktionsabfrage als SQL-Ausdruck angeben<\/h2>\n<p>Manchmal kann es hilfreich sein, die Aktionsabfrage nicht als Abfrage zu speichern, sondern direkt auszuf&uuml;hren. Das bedeutet, dass Sie der <b>Execute<\/b>-Anweisung nicht den Namen der gespeicherten Abfrage, sondern einen entsprechenden SQL-Ausdruck angeben.<\/p>\n<p>Fehlende SQL-Kenntnisse sind hier kein Problem: Access bietet die M&ouml;glichkeit,  Abfragen in der SQL-Ansicht anzuzeigen. Und aus dieser k&ouml;nnen Sie den gew&uuml;nschten SQL-Ausdruck einfach herauskopieren und in den VBA-Code einf&uuml;gen.<\/p>\n<p>Im Falle der Aktionsabfrage unseres Beispiels sieht das so aus:<\/p>\n<ul>\n<li>&ouml;ffnen Sie die Abfrage in der Entwurfsansicht.<\/li>\n<li>Klicken Sie mit der rechten Maustaste auf die Titelzeile und w&auml;hlen Sie den Eintrag <b>SQL-Ansicht <\/b>aus (siehe Bild 2).<\/li>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_58_529.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_58_529.png\" alt=\"SQL-Ansicht einer Abfrage aktivieren\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: SQL-Ansicht einer Abfrage aktivieren<\/p>\n<\/ul>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000058\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000058?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000058\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"29a9ab4ae1\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aktionsabfragen lassen sich bequem mit der Entwurfsansicht f&uuml;r Abfragen zusammenstellen. Sie k&ouml;nnen damit Daten an Tabellen anf&uuml;gen, bestehende Daten &auml;ndern oder l&ouml;schen und sogar gleich die passende Tabelle zum Einf&uuml;gen von Daten erstellen. Wie aber soll der Benutzer eine solche Abfrage aufrufen, ohne doppelt auf den entsprechenden Eintrag im Datenbankfenster oder im Navigationsbereich zu klicken Dieser Artikel zeigt, wie Sie dies realisieren.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662011,66052011,44000008],"tags":[],"class_list":["post-55000058","post","type-post","status-publish","format-standard","hentry","category-662011","category-66052011","category-Aktionsabfragen"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Aktionsabfragen per VBA ausf&uuml;hren - Access [basics]<\/title>\n<meta name=\"description\" content=\"Aktionsabfragen lassen sich bequem mit der Entwurfsansicht f\u00fcr Abfragen zusammenstellen. Sie k\u00f6nnen damit Daten an Tabellen anf\u00fcgen, bestehende Daten \u00e4ndern oder l\u00f6schen und sogar gleich die passende Tabelle zum Einf\u00fcgen von Daten erstellen. Wie aber soll der Benutzer eine solche Abfrage aufrufen, ohne doppelt auf den entsprechenden Eintrag im Datenbankfenster oder im Navigationsbereich zu klicken? Dieser Artikel zeigt, wie Sie dies realisieren.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Aktionsabfragen per VBA ausf&uuml;hren - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Aktionsabfragen lassen sich bequem mit der Entwurfsansicht f\u00fcr Abfragen zusammenstellen. Sie k\u00f6nnen damit Daten an Tabellen anf\u00fcgen, bestehende Daten \u00e4ndern oder l\u00f6schen und sogar gleich die passende Tabelle zum Einf\u00fcgen von Daten erstellen. Wie aber soll der Benutzer eine solche Abfrage aufrufen, ohne doppelt auf den entsprechenden Eintrag im Datenbankfenster oder im Navigationsbereich zu klicken? Dieser Artikel zeigt, wie Sie dies realisieren.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:57:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_58_524.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"11\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_58_524.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html\",\"name\":\"Aktionsabfragen per VBA ausf&uuml;hren - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:57:47+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Aktionsabfragen lassen sich bequem mit der Entwurfsansicht f\\u00fcr Abfragen zusammenstellen. Sie k\\u00f6nnen damit Daten an Tabellen anf\\u00fcgen, bestehende Daten \\u00e4ndern oder l\\u00f6schen und sogar gleich die passende Tabelle zum Einf\\u00fcgen von Daten erstellen. Wie aber soll der Benutzer eine solche Abfrage aufrufen, ohne doppelt auf den entsprechenden Eintrag im Datenbankfenster oder im Navigationsbereich zu klicken? Dieser Artikel zeigt, wie Sie dies realisieren.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Aktionsabfragen_per_VBA_ausfuehren.html\",\"name\":\"Aktionsabfragen per VBA ausf&uuml;hren\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000058"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000058\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}