{"id":6241,"date":"2024-06-20T11:05:13","date_gmt":"2024-06-20T09:05:13","guid":{"rendered":"http:\/\/www.ramses.de\/?p=6241"},"modified":"2024-06-20T11:41:46","modified_gmt":"2024-06-20T09:41:46","slug":"faq-access-abgeschnittene-memofelder-2","status":"publish","type":"post","link":"https:\/\/www.ramses.de\/?p=6241","title":{"rendered":"FAQ Access &#8211; Stored Procedures"},"content":{"rendered":"<div>\n<h1>Access Abfragen &#8211; Stored Procedures<\/h1>\n<p>Der Original Artikel befindet sich auf der Seite des Minhorst Verlages, die Zeitschrift kann ich nur allen empfehlen die mit Access arbeiten<\/p>\n<p>&#8222;https:\/\/access-im-unternehmen.de\/SQL_Server_Von_der_Abfrage_zur_Stored_Procedure\/&#8220;<\/p>\n<p>Dieses Beispiel hier ist nur eine k\u00fcrze Variante, abgepasst f\u00fcr meine Zwecke.<\/p>\n<\/div>\n<div>\n<h2><strong>Problem <\/strong><\/h2>\n<p>Komplexe Abfragen dauern im Access meist sehr lange, erst recht, wenn wir Informationen per VBA selektieren. Das liegt daran, das der Server alle Daten an das Access \u00fcbermittelt und der PC die Auswertung \u00fcbernimmt.<\/p>\n<p>Wenn wir einen SQL Server im Hintergrund haben, k\u00f6nnen wir mit einer gespeicherten Procedure arbeiten. Die Daten werden dann vom SQL Server ermittelt und nur die selektierten Daten werden an das Access \u00fcbertragen<\/p>\n<h2><strong>L\u00f6sung <\/strong><\/h2>\n<h3>Erstellen einer Musterabfrage<\/h3>\n<p>Wir erstellen eine Abfrage mit den ben\u00f6tigten Kriterien und kopieren des SQL String in die Zwischenablage.<\/p>\n<p><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP01-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6242\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP01-1-1024x125.jpg\" alt=\"SQL String\" width=\"900\" height=\"110\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP01-1-1024x125.jpg 1024w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP01-1-300x37.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP01-1-768x94.jpg 768w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP01-1.jpg 1066w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/p>\n<h3>Anlegen der Stored Procedure<\/h3>\n<p>Auf dem SQL Server legen wir nun die Stored Procedur an, in dem wir im Kontextmen\u00fc den entsprechenen Punkt ausw\u00e4hlen.<\/p>\n<p><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP02.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6243\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP02.jpg\" alt=\"Stored Predure\" width=\"539\" height=\"441\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP02.jpg 539w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP02-300x245.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP02-308x252.jpg 308w\" sizes=\"auto, (max-width: 539px) 100vw, 539px\" \/><\/a><\/p>\n<p>Im Ergebnis bekommen wir ein Muster zum Anlegen der gespeicherten Procedur. Das ist der Code zum Anlagen, die Procedur an sich bekommen wir nie zu sehen.<\/p>\n<p><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP03.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6244\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP03.jpg\" alt=\"\" width=\"708\" height=\"632\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP03.jpg 708w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP03-300x268.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP03-63x55.jpg 63w\" sizes=\"auto, (max-width: 708px) 100vw, 708px\" \/><\/a><\/p>\n<h3>Anpassen der Stored Procedure<\/h3>\n<p>Im n\u00e4chsten Schritt werfen wir die gr\u00fcnen Kommentare raus und entfernen den Beispielcode<\/p>\n<p><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP04-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6245\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP04-1.jpg\" alt=\"\" width=\"286\" height=\"248\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP04-1.jpg 286w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP04-1-63x55.jpg 63w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP04-1-150x131.jpg 150w\" sizes=\"auto, (max-width: 286px) 100vw, 286px\" \/><\/a><\/p>\n<p>Nun f\u00fcgen wir den SQL String aus dem Access zwischen das BEGINN und das END in die gespeicherte Procedur<\/p>\n<p><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP05.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6246\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP05-1024x274.jpg\" alt=\"\" width=\"900\" height=\"241\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP05-1024x274.jpg 1024w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP05-300x80.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP05-768x206.jpg 768w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP05.jpg 1248w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/p>\n<\/div>\n<div>Den Namen der gespeicherten Procedur tragen wir hinter das Create Procedure ein<\/div>\n<div><\/div>\n<div><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP06.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6247\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP06-1024x255.jpg\" alt=\"\" width=\"900\" height=\"224\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP06-1024x255.jpg 1024w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP06-300x75.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP06-768x191.jpg 768w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP06.jpg 1247w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/div>\n<div><\/div>\n<div>In unserem Beispiel sind zwei Datumsangaben als Selektionskriterium enthalten. Dieses Von und Bis Datum definieren wir als \u00dcbergabevariable vom Typ Datum und ersetzen in der SELECT Anweisung die festen Datumsangaben durch die beiden neuen Variablen.<\/div>\n<div><\/div>\n<div><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP07-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6248\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP07-1-1024x247.jpg\" alt=\"\" width=\"900\" height=\"217\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP07-1-1024x247.jpg 1024w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP07-1-300x72.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP07-1-768x185.jpg 768w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP07-1.jpg 1250w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/div>\n<div><\/div>\n<h3>Erstellen der Gespeicherten Procedur<\/h3>\n<p>Zum Erstellen der Procedur nutzen wir die Taste F5 oder den Button Ausf\u00fchren, in der Folge ist die Gespeicherte Procedur in der Liste enthalten<\/p>\n<p><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP08-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6251\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP08-1.jpg\" alt=\"\" width=\"904\" height=\"722\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP08-1.jpg 904w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP08-1-300x240.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP08-1-768x613.jpg 768w\" sizes=\"auto, (max-width: 904px) 100vw, 904px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>Ver\u00e4ndern der gespeicherten Procedur<\/h3>\n<p>Um die gespeicherte Procedur zu \u00e4ndern m\u00fcssen wir aus dem CREATE PROCEDUR ein ALTER PROCEDUR machen<\/p>\n<div><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP09-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6252\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP09-1-1024x275.jpg\" alt=\"\" width=\"900\" height=\"242\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP09-1-1024x275.jpg 1024w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP09-1-300x80.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP09-1-768x206.jpg 768w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP09-1.jpg 1260w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/div>\n<div><\/div>\n<h3>Intelli Sence Cache Aktualisieren<\/h3>\n<p>Im Screenshot kann man sehen, das der Name ESMLISTE als Fehler bem\u00e4ngelt wird, hier ist der SQl Server etwas langsam.<\/p>\n<p>Dann ist m\u00f6glicherweise der IntelliSense-Cache noch nicht aktualisiert. Das k\u00f6nnen wir auf zwei Arten nachholen:<\/p>\n<ul>\n<li>Tastenkombination <b>Strg + Umschalt + R <\/b>dr\u00fccken<\/li>\n<li>Men\u00fcbefehl <b>Bearbeiten|IntelliSense|Lokalen Cache aktualisieren <\/b>bet\u00e4tigen<\/li>\n<\/ul>\n<h3>Die gespeicherte Procedure von Access aus nutzen<\/h3>\n<p>Wir erzeugen nun im Access eine neue Abfrge und nehmen den Abfragetyp Pass-Through<\/p>\n<p>Dem Befehl EXEC folgt der Name der gespeicherten Procedur und die \u00dcbergabe der vereinbarten Parameter, dem Von und dem Bis Datum<\/p>\n<p><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP10.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6253\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP10.jpg\" alt=\"\" width=\"802\" height=\"389\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP10.jpg 802w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP10-300x146.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP10-768x373.jpg 768w\" sizes=\"auto, (max-width: 802px) 100vw, 802px\" \/><\/a><\/p>\n<p>Nun m\u00fcssen wir noch die ODBC Verbindung der Abfrage in die Eigenschaften der Abfrage eintragen. Die k\u00f6nnen wir aus einer eingebundenen Tabelle kopieren und werfen am Ende den Hinweis auf die Tabelle raus.<\/p>\n<p><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP11.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6254\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP11.jpg\" alt=\"\" width=\"936\" height=\"169\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP11.jpg 936w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP11-300x54.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP11-768x139.jpg 768w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/a><\/p>\n<p>Nun k\u00f6nnen wir die Abfrage \u00f6ffnen und als Datensatzquelle in ein Formular packen<\/p>\n<p><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP12.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6255\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP12-1024x657.jpg\" alt=\"\" width=\"900\" height=\"577\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP12-1024x657.jpg 1024w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP12-300x192.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP12-768x492.jpg 768w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP12.jpg 1115w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/p>\n<h3>Anpassen der \u00dcbergabevariablen<\/h3>\n<p>Im SQL der Abfrage steht nun bei den \u00dcbergabevariablen ein festes Datum drin. Mittels einer kleinen, hier nur schematisch dargestellten Sub passen wir den SQL String und die ODBC Daten der Abfrage an und \u00f6ffnen das Formular.<\/p>\n<p>Nat\u00fcrlich w\u00fcrden wir in der Praxis die beiden Datumsangaben per \u00dcbergabevariable nutzen und den ODBC Krams in eine GLOBAL CONST laden<\/p>\n<p><a href=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP13-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6258\" src=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP13-1-1024x605.jpg\" alt=\"\" width=\"900\" height=\"532\" srcset=\"https:\/\/www.ramses.de\/wp-content\/uploads\/SP13-1-1024x605.jpg 1024w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP13-1-300x177.jpg 300w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP13-1-768x453.jpg 768w, https:\/\/www.ramses.de\/wp-content\/uploads\/SP13-1.jpg 1111w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Access Abfragen &#8211; Stored Procedures Der Original Artikel befindet sich auf der Seite des Minhorst Verlages, die Zeitschrift kann ich nur allen empfehlen die mit &#8230; <a title=\"FAQ Access &#8211; Stored Procedures\" class=\"read-more\" href=\"https:\/\/www.ramses.de\/?p=6241\" aria-label=\"Mehr Informationen \u00fcber FAQ Access &#8211; Stored Procedures\">Weiterlesen &#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[47,43],"tags":[117,98],"class_list":["post-6241","post","type-post","status-publish","format-standard","hentry","category-access","category-faq","tag-abfragen","tag-access"],"_links":{"self":[{"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/posts\/6241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ramses.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6241"}],"version-history":[{"count":4,"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/posts\/6241\/revisions"}],"predecessor-version":[{"id":6259,"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/posts\/6241\/revisions\/6259"}],"wp:attachment":[{"href":"https:\/\/www.ramses.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ramses.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ramses.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}