{"id":55000503,"date":"2026-06-01T00:00:00","date_gmt":"2026-07-28T14:55:21","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=503"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"ADODB_Gespeicherte_Prozeduren_ausfuehren","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/","title":{"rendered":"ADODB: Gespeicherte Prozeduren ausf&uuml;hren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/73cee4569cd043e8bdce631d3f563b14\" width=\"1\" height=\"1\" alt=\"\"><b>Recordsets sind zentrale Bestandteile beim Zugriff auf Daten mit ADODB. Sie bieten umfangreiche Funktionen zur Navigation, Bearbeitung, Filterung und Analyse von Daten. In diesem Artikel zeigen wir eine vollst&auml;ndige &Uuml;bersicht aller Eigenschaften und Methoden des Recordset-Objekts und erl&auml;utern diese jeweils ausf&uuml;hrlich mit praktischen Beispielen. Besonderes Augenmerk legen wir auf die Ereignisse eines Recordsetes. Im Gegensatz zum DAO-Recordset bietet das ADODB-Recordset n&auml;mlich die M&ouml;glichkeit, auf verschiedene Ereignisse zu reagieren &#8211; beispielsweise auf &Auml;nderungen im Datensatz.<\/b><\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels findest Du in der Beispieldatenbank <b>ADODB_GespeicherteProzedurenAusfuehren.accdb<\/b>.<\/p>\n<h2>Anwendungszweck f&uuml;r die vorgestellten Beispiele<\/h2>\n<p>Die einfachste M&ouml;glichkeit, Daten aus Tabellen einer SQL Server-Datenbank in Access anzuzeigen und zu bearbeiten ist die Verwendung von Tabellenverkn&uuml;pfungen per ODBC.<\/p>\n<p>Diese kann man einfach als Datensatzquelle von Formularen, Berichten oder Steuerelementen angeben &#8211; genau wie bei herk&ouml;mmlichen Access-Tabellen.<\/p>\n<p>Manchmal ist jedoch eine ungebundene Darstellung gew&uuml;nscht, beispielsweise weil man aus Sicherheitsgr&uuml;nden keine Tabellenverkn&uuml;pfungen im Frontend verf&uuml;gbar machen m&ouml;chte, weil diese einfach ausgelesen werden k&ouml;nnen.<\/p>\n<p>F&uuml;r diesen Fall bietet es sich an, die Daten auf SQL Server-Seite per gespeicherter Prozedur bereitzustellen und diese per ADODB-Recordset in Formularen und Steuerelementen anzuzeigen.<\/p>\n<p>F&uuml;r die Anzeige etwa der Daten eines Mitarbeiters k&ouml;nnte man ein solches Recordset mit ADODB per Zugriff auf eine entsprechende gespeicherte Prozedur  f&uuml;llen und die Daten der einzelnen Felder in ungebundenen Steuerelementen anzeigen.<\/p>\n<p>M&ouml;chte man diese wieder speichern, verwendet man eine entsprechende gespeicherte Prozedur, welche die per Parameter &uuml;bergebenen Daten &uuml;ber eine <b>UPDATE<\/b>-Anweisung in der Tabelle im SQL Server speichert.<\/p>\n<p>Das Gleiche gilt f&uuml;r neu angelegte Datens&auml;tze, wobei man hier eine <b>INSERT INTO<\/b>-Anweisung nutzt. Und mit <b>DELETE <\/b>k&ouml;nnen wir einen angegebenen Datensatz auch wieder l&ouml;schen.<\/p>\n<p>Die nachfolgenden Beispiele zeigen, wie die gespeicherten Prozeduren aufgebaut sein m&uuml;ssen und wie wir diese per VBA und ADODB nutzen k&ouml;nnen.<\/p>\n<h2>Beispieldatenbank auf dem SQL Server anlegen<\/h2>\n<p>Um die Beispiele dieses Artikels auszuprobieren, ben&ouml;tigst Du eine SQL-Server-Datenbank mit einigen Tabellen und den entsprechenden gespeicherten Prozeduren. Im Modul <b>mdlSQLServerDB<\/b> findest Du den Code, den Du im SQL Server Management Studio ausf&uuml;hren kannst, um die Tabellen mit Beispieldaten und die gespeicherten Prozeduren anlegen kannst.<\/p>\n<p>Dazu gehst Du wie folgt vor:<\/p>\n<ul>\n<li>Lege im SQL Server eine neue Datenbank namens <b>Test_GespeicherteProzeduren <\/b>an.<\/li>\n<li>&Ouml;ffne eine neue Abfrage im Kontext dieser Datenbank.<\/li>\n<li>Gehe in das Modul <b>mdlSQLServerDB <\/b>und entferne die Kommentarzeichen &#8211; am einfachsten durch Markieren des Inhalts und Auswahl des Kontextmen&uuml;-Eintrags Auskommentierung des Blocks aufheben (sollte dieser nicht sichtbar sein, blende mit <b>Ansicht|Symbolleisten|Bearbeiten <\/b>die entsprechende Symbolleiste ein).<\/li>\n<li>Kopiere den Code in das Abfragefenster im SQL Server Management Studio.<\/li>\n<li>F&uuml;hre den Code mit <b>F5 <\/b>aus. Dies legt alle ben&ouml;tigten Objekte in der Datenbank an (siehe Bild 1).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_503_001.png\" alt=\"Die SQL Server-Datenbank mit den angelegten Objekten\" width=\"649,627\" height=\"563,385\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Die SQL Server-Datenbank mit den angelegten Objekten<\/span><\/b><\/p>\n<\/ul>\n<p>Das Datenmodell ist schnell erkl&auml;rt: Die Tabelle <b>tblMitarbeiter <\/b>ist die Haupttabelle.<\/p>\n<p>Sie ist &uuml;ber das Feld <b>AbteilungID <\/b>mit der Tabelle <b>tblAbteilungen <\/b>verkn&uuml;pft.<\/p>\n<h2>Definieren von Konstanten f&uuml;r Server und Datenbank<\/h2>\n<p>Da wir in allen VBA-Prozeduren auf den gleichen Server und die gleiche Datenbank zugreifen wollen, definieren wir diese als Konstanten:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>Const cStrServer<span style=\"color:blue;\"> As String<\/span> = \"amvDesktop2023\"\r\n<span style=\"color:blue;\">Public <\/span>Const cStrDatabase<span style=\"color:blue;\"> As String<\/span> = \"Test_GespeicherteProzeduren\"<\/pre>\n<p>Diese m&uuml;ssen an die jeweiligen Gegebenheiten angepasst werden.<\/p>\n<h2>Aufbau der gespeicherten Prozeduren<\/h2>\n<p>Es gibt vier verschiedene Arten von gespeicherten Prozeduren:<\/p>\n<ul>\n<li>zum Ermitteln der Daten einer Tabelle,<\/li>\n<li>zum Anlegen eines Datensatzes,<\/li>\n<li>zum Bearbeiten eines Datensatzes und<\/li>\n<li>zum L&ouml;schen eines Datensatzes.<\/li>\n<\/ul>\n<h2>Gespeicherte Prozedur zum Ermitteln der Daten einer Tabelle<\/h2>\n<p>In diesem Beispiel wollen wir direkt mit einer gespeicherten Prozedur einsteigen, mit der wir einen oder alle Eintr&auml;ge der Tabelle <b>tblMitarbeiter <\/b>ermitteln. Die gespeicherte Prozedur hei&szlig;t <b>spMitarbeiterSelectNachMitarbeiterID<\/b> und ist in Listing 1 abgebildet.<\/p>\n<pre>CREATE PROCEDURE [dbo].[spMitarbeiterSelectNachMitarbeiterID]\r\n    @MitarbeiterID INT = NULL\r\nAS\r\nSET NOCOUNT ON\r\nSELECT  MitarbeiterID,\r\n        Vorname,\r\n        Nachname,\r\n        Email,\r\n        Eintrittsdatum,\r\n        Gehalt,\r\n        ErstelltVon,\r\n        ErstelltAm\r\nFROM    tblMitarbeiter  \r\nWHERE   (@MitarbeiterID IS NULL OR MitarbeiterID = @MitarbeiterID)\r\nORDER BY Nachname, Vorname<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Gespeicherte Prozedur zum Ermitteln von Mitarbeitern<\/span><\/b><\/p>\n<p>Sie nimmt den Parameter <b>@MitarbeiterID <\/b>entgegen und wertet diesen in der <b>WHERE<\/b>-Klausel aus.<\/p>\n<p>Hier verwenden wir einen Trick, um sicherzustellen, dass die gespeicherte Prozedur auf zwei Arten arbeitet:<\/p>\n<ul>\n<li>erstens um alle Datens&auml;tze der Tabelle zur&uuml;ckzugeben, wenn kein Parameter &uuml;bergeben wurde und<\/li>\n<li>zweitens, um nur den Datensatz mit dem per Parameter &uuml;bergebenen Wert zu ermitteln.<\/li>\n<\/ul>\n<p>Wie k&ouml;nnen wir das in einer gespeicherten Prozedur ber&uuml;cksichtigen? Indem wir den Parameter <b>@MitarbeiterID <\/b>als optionalen Parameter definieren, der als Standardwert <b>NULL <\/b>erh&auml;lt.<\/p>\n<p>Diesen werten wir in der <b>WHERE<\/b>-Klausel so aus, dass wir pr&uuml;fen, ob entweder <b>@MitarbeiterID <\/b>gleich <b>NULL <\/b>ist oder der Wert des Feldes <b>MitarbeiterID <\/b>gleich <b>@MitarbeiterID <\/b>ist.<\/p>\n<p>Wird kein Parameter &uuml;bergeben, trifft f&uuml;r jeden Datensatz die Bedingung <b>@MitarbeiterID IS NULL <\/b>zu und alle Datens&auml;tze zur&uuml;ckgegeben. Ist <b>@MitarbeiterID <\/b>nicht <b>NULL<\/b>, wird nur der Datensatz zur&uuml;ckgegeben, dessen Wert im Feld <b>MitarbeiterID <\/b>dem Wert aus <b>@MitarbeiterID <\/b>entspricht.<\/p>\n<h2>Aufruf der SELECT-Prozedur per VBA<\/h2>\n<p>Um die gespeicherte Prozedur <b>spMitarbeiterSelectNachMitarbeiterID<\/b> per ADODB aufzurufen, sieht der Code wie in Listing 2 aus. Zun&auml;chst wird eine Verbindung zur SQL-Server-Datenbank aufgebaut, indem ein neues <b>ADODB.Connection<\/b>-Objekt erstellt und mit dem Verbindungsstring ge&ouml;ffnet wird.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Beispiel_Select()\r\n    <span style=\"color:blue;\">Dim <\/span>cnn<span style=\"color:blue;\"> As <\/span>ADODB.Connection\r\n    <span style=\"color:blue;\">Dim <\/span>cmd<span style=\"color:blue;\"> As <\/span>ADODB.Command\r\n    <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>ADODB.Recordset\r\n    <span style=\"color:blue;\">Dim <\/span>strConnection<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> cnn = <span style=\"color:blue;\">New<\/span> ADODB.Connection\r\n    strConnection = \"Provider=SQLOLEDB;Data Source=\" & cStrServer _\r\n        & \";Initial Catalog=\" & cStrDatabase & \";Integrated Security=SSPI;\"\r\n    cnn.Open strConnection\r\n    <span style=\"color:blue;\">Set<\/span> cmd = <span style=\"color:blue;\">New<\/span> ADODB.Command\r\n    cmd.ActiveConnection = cnn\r\n    cmd.CommandText = \"spMitarbeiterSelectNachMitarbeiterID\"\r\n    cmd.CommandType = adCmdStoredProc\r\n    <span style=\"color:blue;\">Set<\/span> rst = <span style=\"color:blue;\">New<\/span> ADODB.Recordset\r\n    rst.CursorLocation = adUseClient\r\n    rst.Open cmd, , adOpenStatic, adLockOptimistic\r\n    <span style=\"color:blue;\">Debug.Print<\/span> \"Datens&auml;tze: \" & rst.RecordCount\r\n    <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n        <span style=\"color:blue;\">Debug.Print<\/span> rst!Nachname\r\n        rst.Move<span style=\"color:blue;\">Next<\/span>\r\n    <span style=\"color:blue;\">Loop<\/span>\r\n    rst.Close\r\n    cnn.Close\r\n    <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n    <span style=\"color:blue;\">Set<\/span> cmd = Nothing\r\n    <span style=\"color:blue;\">Set<\/span> cnn = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Aufruf der gespeicherten Prozedur zum Ermitteln aller Mitarbeiter<\/span><\/b><\/p>\n<p>Anschlie&szlig;end wird ein <b>ADODB.Command<\/b>-Objekt erstellt, dem die Verbindung, der Name der gespeicherten Prozedur sowie der Befehlstyp <b>adCmdStoredProc<\/b> zugewiesen werden. Der Befehlstyp teilt ADODB mit, dass es sich um eine gespeicherte Prozedur handelt und nicht etwa um eine direkte SQL-Anweisung.<\/p>\n<p>Danach wird ein <b>ADODB.Recordset<\/b>-Objekt erstellt. Die Eigenschaft <b>CursorLocation<\/b> wird auf <b>adUseClient<\/b> gesetzt, was bedeutet, dass die Daten vollst&auml;ndig auf den Client &uuml;bertragen werden &#8211; dies ist notwendig, damit die Eigenschaft <b>RecordCount<\/b> die korrekte Anzahl der Datens&auml;tze liefert. Mit <b>adOpenStatic<\/b> und <b>adLockOptimistic<\/b> wird das Recordset schlie&szlig;lich ge&ouml;ffnet.<\/p>\n<p>Anschlie&szlig;end kann die Anzahl der zur&uuml;ckgegebenen Datens&auml;tze &uuml;ber <b>RecordCount<\/b> ausgegeben und die Datens&auml;tze in einer Schleife durchlaufen werden.<\/p>\n<p>Am Ende werden Recordset und Verbindung sauber geschlossen und die Objektvariablen auf <b>Nothing<\/b> gesetzt, um den Speicher freizugeben.<\/p>\n<h2>Aufruf der SELECT-Prozedur mit Parameter<\/h2>\n<p>Die Prozedur <b>Beispiel_Select_NachMitarbeiterID<\/b> in Listing 3 zeigt, wie der Aufruf mit einem konkreten Parameter funktioniert.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Beispiel_Select_NachMitarbeiterID()\r\n    <span style=\"color:blue;\">Dim <\/span>cnn<span style=\"color:blue;\"> As <\/span>ADODB.Connection\r\n    <span style=\"color:blue;\">Dim <\/span>cmd<span style=\"color:blue;\"> As <\/span>ADODB.Command\r\n    <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>ADODB.Recordset\r\n    <span style=\"color:blue;\">Dim <\/span>prm<span style=\"color:blue;\"> As <\/span>ADODB.Parameter\r\n    <span style=\"color:blue;\">Dim <\/span>strConnection<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngMitarbeiterID<span style=\"color:blue;\"> As Long<\/span>\r\n    lngMitarbeiterID = 1\r\n    <span style=\"color:blue;\">Set<\/span> cnn = <span style=\"color:blue;\">New<\/span> ADODB.Connection\r\n    strConnection = \"Provider=SQLOLEDB;Data Source=\" & cStrServer & \";Initial Catalog=\" & cStrDatabase _\r\n        & \";Integrated Security=SSPI;\"    \r\n    cnn.Open strConnection\r\n    <span style=\"color:blue;\">Set<\/span> cmd = <span style=\"color:blue;\">New<\/span> ADODB.Command\r\n    cmd.ActiveConnection = cnn\r\n    cmd.CommandText = \"spMitarbeiterSelectNachMitarbeiterID\"\r\n    cmd.CommandType = adCmdStoredProc\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@MitarbeiterID\", adInteger, adParamInput, _\r\n        4, lngMitarbeiterID)\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> rst = <span style=\"color:blue;\">New<\/span> ADODB.Recordset\r\n    rst.CursorLocation = adUseClient\r\n    rst.Open cmd, , adOpenStatic, adLockOptimistic\r\n    <span style=\"color:blue;\">Debug.Print<\/span> \"Datens&auml;tze: \" & rst.RecordCount\r\n    <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n        <span style=\"color:blue;\">Debug.Print<\/span> rst!Nachname\r\n        rst.Move<span style=\"color:blue;\">Next<\/span>\r\n    <span style=\"color:blue;\">Loop<\/span>\r\n    rst.Close\r\n    cnn.Close\r\n    <span style=\"color:blue;\">Set<\/span> rst = Nothing\r\n    <span style=\"color:blue;\">Set<\/span> cmd = Nothing\r\n    <span style=\"color:blue;\">Set<\/span> cnn = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Aufruf der gespeicherten Prozedur zum Ermitteln eines Mitarbeiters<\/span><\/b><\/p>\n<p>Der Aufbau ist identisch mit dem vorherigen Beispiel &#8211; Verbindung &ouml;ffnen, <b>Command<\/b>-Objekt konfigurieren &#8211; mit einem wesentlichen Unterschied:<\/p>\n<p>Vor dem &Ouml;ffnen des Recordsets wird der Parameter <b>@MitarbeiterID<\/b> mit dem gew&uuml;nschten Wert &uuml;bergeben, um nach diesem zu filtern.<\/p>\n<p>In diesem Beispiel ist das der Wert <b>1<\/b>, der in der Variablen <b>lngMitarbeiterID<\/b> gespeichert ist.<\/p>\n<p>Um einen Parameter zu &uuml;bergeben, deklarieren wir zuvor eine Variable namens <b>prm <\/b>mit dem Datentyp <b>Parameter<\/b>. Den Parameter erstellen wir mit der Funktion <b>CreateParameter<\/b>. Dieser &uuml;bergeben wir die folgenden Parameter:<\/p>\n<ul>\n<li>Name des Parameters, wie er in der gespeicherten Prozedur benannt wurde, hier <b>@MitarbeiterID<\/b><\/li>\n<li>Datentyp des Parameters wie er in der gespeicherten Prozeduren verwendet wird, hier <b>adInteger<\/b><\/li>\n<li>Angabe, ob es sich um einen Eingabe- oder Ausgabeparameter oder beides handelt, hier <b>adParamInput <\/b>f&uuml;r einen Eingabeparameter<\/li>\n<li>Angabe der Gr&ouml;&szlig;e des Wertes in Bytes, hier <b>4 <\/b>f&uuml;r <b>adInteger<\/b><\/li>\n<li>zu &uuml;bergebender Wert, hier die Mitarbeiter-ID<\/li>\n<\/ul>\n<p>Da die gespeicherte Prozedur den Parameter als optional mit dem Standardwert <b>NULL <\/b>definiert hat, liefert sie ohne Parameter alle Datens&auml;tze der Tabelle zur&uuml;ck. Wird hingegen ein konkreter Wert &uuml;bergeben, schr&auml;nkt die <b>WHERE<\/b>-Klausel das Ergebnis auf genau den Datensatz mit der entsprechenden <b>MitarbeiterID<\/b> ein. Das Recordset enth&auml;lt in diesem Fall also genau einen Datensatz, sofern ein Mitarbeiter mit dieser ID existiert.<\/p>\n<p>Wie im vorherigen Beispiel wird wieder die Anzahl der zur&uuml;ckgelieferten Datens&auml;tze ausgegeben. Au&szlig;erdem geben wir den Nachnamen aller Datens&auml;tze aus.<\/p>\n<p>Die hier statisch gehaltene Prozedur <b>Beispiel_Select_NachMitarbeiterID <\/b>k&ouml;nnen wir nun beispielsweise in eine Funktion umwandeln, der wir die Mitarbeiter-ID des zu ermittelnden Datensatzes &uuml;bergeben und die das Recordset mit dem Ergebnis als Funktionswert zur&uuml;ckliefert.<\/p>\n<h2>Gespeicherte Prozedur zum Hinzuf&uuml;gen eines Mitarbeiters<\/h2>\n<p>Damit kommen wir zu den gespeicherten Prozeduren zum Manipulieren der vorhandenen Daten und wir starten mit dem Hinzuf&uuml;gen eines Datensatzes.<\/p>\n<p>Die gespeicherte Prozedur <b>spMitarbeiterInsert <\/b>legt einen neuen Mitarbeiter in der Tabelle <b>tblMitarbeiter <\/b>an. In der Anweisung zum Erstellen dieser Prozedur aus Listing 4 definieren wir zun&auml;chst alle Parameter, mit denen wir die Daten f&uuml;r den neuen Datensatz &uuml;bergeben wollen.<\/p>\n<pre>CREATE PROCEDURE [dbo].[spMitarbeiterInsert]\r\n    @AbteilungID    INT,\r\n    @Vorname        NVARCHAR(100),\r\n    @Nachname       NVARCHAR(100),\r\n    @Email          NVARCHAR(255)   = NULL,\r\n    @Eintrittsdatum DATE            = NULL,\r\n    @Gehalt         DECIMAL(10,2)   = NULL,\r\n    @IDNEW          INT             = -1 OUTPUT\r\nAS\r\nSET NOCOUNT ON\r\nINSERT INTO tblMitarbeiter (AbteilungID, Vorname, Nachname, Email, \r\n    Eintrittsdatum, Gehalt)\r\nVALUES (@AbteilungID, @Vorname, @Nachname, @Email, @Eintrittsdatum, @Gehalt)\r\nSET @IDNEW = SCOPE_IDENTITY()<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Gespeicherte Prozedur zum Hinzuf&uuml;gen eines Mitarbeiters<\/span><\/b><\/p>\n<p>Die Parameter werden jeweils nach dem Namen des Zielfeldes mit f&uuml;hrendem @-Zeichen benannt, also etwa <b>@AbteilungID<\/b>, <b>@Vorname <\/b>oder <b>@Nachname<\/b>.<\/p>\n<p>Au&szlig;erdem geben wir jeweils den Datentyp so an, wie er auch in der Definition der Tabelle f&uuml;r die jeweiligen Felder angegeben ist.<\/p>\n<p>F&uuml;r Felder, die den Wert <b>NULL <\/b>enthalten d&uuml;rfen, definieren wir optionale Parameter. Das geschieht wieder durch Angabe eines Standardwertes f&uuml;r diese Parameter, in diesem Fall <b>NULL<\/b>.<\/p>\n<p>Neben den Eingangsparametern definieren wir noch einen Ausgangsparameter, den wir explizit mit dem Schl&uuml;sselwort <b>OUTPUT <\/b>versehen. Dieser soll die ID des neu angelegten Datensatzes zur&uuml;ckliefern und hei&szlig;t <b>@IDNEW<\/b>.<\/p>\n<p>Wichtig ist, dass wir vor der <b>INSERT INTO<\/b>-Anweisung die Anweisung <b>SET NOCOUNT ON <\/b>setzen.<\/p>\n<p><b>SET NOCOUNT ON <\/b>unterdr&uuml;ckt die Statusmeldungen, die SQL Server nach jedem <b>INSERT<\/b>, <b>UPDATE <\/b>oder <b>DELETE <\/b>zur&uuml;ckgibt &#8211; also Meldungen wie <b>X Zeilen betroffen<\/b>.<\/p>\n<p>Ohne <b>SET NOCOUNT ON <\/b>wird diese Meldung nach dem <b>INSERT <\/b>zuerst an den Client gesendet, noch bevor der <b>OUTPUT<\/b>-Parameter zur&uuml;ckgegeben wird. ADODB interpretiert diese Statusmeldung als zus&auml;tzliches Resultset, wodurch der <b>OUTPUT<\/b>-Parameter <b>@IDNEW <\/b>eventuell nicht mehr korrekt ausgelesen wird und beispielsweise auf seinem Standardwert (hier <b>-1<\/b>) verbleibt.<\/p>\n<p>Mit <b>SET NOCOUNT ON <\/b>entf&auml;llt diese zus&auml;tzliche Meldung. Es wird nur noch das eigentliche Ergebnis zur&uuml;ckgegeben, sodass ADODB den <b>OUTPUT<\/b>-Parameter zuverl&auml;ssig und korrekt auslesen kann.<\/p>\n<p>Danach folgt die eigentliche <b>INSERT INTO<\/b>-Anweisung zum Hinzuf&uuml;gen des Datensatzes. Diese kann im Gegensatz beispielsweise zu einer mit <b>CurrentDb.Execute <\/b>in Access aufgerufenen Anweisung im <b>VALUES<\/b>-Abschnitt einfach mit den Parametern best&uuml;ckt werden &#8211; wir brauche uns keine Gedanken um Anf&uuml;hrungszeichen f&uuml;r Zeichenketten et cetera zu machen:<\/p>\n<pre>INSERT INTO tblMitarbeiter (AbteilungID, Vorname, Nachname, Email, Eintrittsdatum, Gehalt)\r\nVALUES (@AbteilungID, @Vorname, @Nachname, @Email, @Eintrittsdatum, @Gehalt)<\/pre>\n<p>Schlie&szlig;lich ermitteln wir mit <b>SCOPE_IDENTITY <\/b>den Wert des zuletzt hinzugef&uuml;gten <b>IDENTITY<\/b>-Wertes, also den Wert des Prim&auml;rschl&uuml;sselfeldes des hinzugef&uuml;gten Datensatzes, und weisen diesen dem R&uuml;ckgabeparameter <b>@IDNEW <\/b>zu:<\/p>\n<pre>SET @IDNEW = SCOPE_IDENTITY()<\/pre>\n<h2>VBA-Prozedur zum Anlegen eines neuen Datensatzes<\/h2>\n<p>Die Prozedur <b>Beispiel_Insert_Mitarbeiter <\/b>aus Listing 5 zeigt, wie wir die gespeicherte Prozedur <b>spMitarbeiterInsert <\/b>von Access aus aufrufen k&ouml;nnen. Hier bauen wir wie in den vorherigen Beispielen die Verbindung auf und erstellen ein <b>Command<\/b>-Objekt, dem wir als <b>CommandText <\/b>den Namen der gespeicherten Prozedur und als <b>CommandType <\/b>wieder <b>adCmdStoredProc <\/b>zuweisen.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Beispiel_Insert_Mitarbeiter()\r\n    <span style=\"color:blue;\">Dim <\/span>cnn<span style=\"color:blue;\"> As <\/span>ADODB.Connection, cmd<span style=\"color:blue;\"> As <\/span>ADODB.Command, prm<span style=\"color:blue;\"> As <\/span>ADODB.Parameter\r\n    <span style=\"color:blue;\">Dim <\/span>strConnection<span style=\"color:blue;\"> As String<\/span>, lngNewID<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> cnn = <span style=\"color:blue;\">New<\/span> ADODB.Connection\r\n    strConnection = \"Provider=SQLOLEDB;Data Source=\" & cStrServer & \";Initial Catalog=\" & cStrDatabase _\r\n        & \";Integrated Security=SSPI;\"\r\n    cnn.Open strConnection\r\n    <span style=\"color:blue;\">Set<\/span> cmd = <span style=\"color:blue;\">New<\/span> ADODB.Command\r\n    cmd.ActiveConnection = cnn\r\n    cmd.CommandText = \"spMitarbeiterInsert\"\r\n    cmd.CommandType = adCmdStoredProc\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@AbteilungID\", adInteger, adParamInput, 4, 1)\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@Vorname\", adVarWChar, adParamInput, 100, \"Max\")\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@Nachname\", adVarWChar, adParamInput, 100, \"Mustermann\")\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@Email\", adVarWChar, adParamInput, 255, \"m.mustermann@firma.de\")\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@Eintrittsdatum\", adDate, adParamInput, 8, #1\/1\/2025#)\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@Gehalt\", adDecimal, adParamInput)\r\n    prm.Precision = 18\r\n    prm.NumericScale = 2\r\n    prm.Value = 4500\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@IDNEW\", adInteger, adParamOutput, 4)\r\n    cmd.Parameters.Append prm\r\n    cmd.Execute\r\n    lngNewID = CLng(cmd.Parameters(\"@IDNEW\").Value)\r\n    <span style=\"color:blue;\">Debug.Print<\/span> \"Neue MitarbeiterID: \" & lngNewID\r\n    cnn.Close\r\n    <span style=\"color:blue;\">Set<\/span> cmd = Nothing\r\n    <span style=\"color:blue;\">Set<\/span> cnn = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Anlegen eines neuen Datensatzes per VBA und ADODB<\/span><\/b><\/p>\n<p>Dann folgen einige Parameter, mit denen wir die Werte f&uuml;r den neu zu erstellenden Datensatz &uuml;bergeben. Die ersten sind Eingabeparameter f&uuml;r die Felder <b>AbteilungID<\/b>, <b>Vorname<\/b>, <b>Nachname<\/b>, <b>Email<\/b>, <b>Eintrittsdatum <\/b>und <b>Gehalt<\/b>.<\/p>\n<p>Diese sind weitgehend &auml;hnlich aufgebaut und enthalten den Parameternamen, den Datentyp, die Angabe, dass es sich um einen Eingabeparameter handelt sowie die Feldgr&ouml;&szlig;e und den anzulegenden Wert.<\/p>\n<p>Etwas anders gehen wir beim Parameter <b>@Gehalt <\/b>vor. Hier wird der Parameter zun&auml;chst nur mit Name, Typ und Richtung erstellt.<\/p>\n<p>Die Gr&ouml;&szlig;enangabe entf&auml;llt, da sie bei <b>adDecimal <\/b>keine Rolle spielt und stattdessen durch <b>Precision <\/b>und <b>NumericScale <\/b>ersetzt wird.<\/p>\n<ul>\n<li><b>prm.Precision = 18<\/b>: legt die Gesamtanzahl der signifikanten Stellen fest, also wie viele Ziffern der Wert insgesamt haben darf &#8211; links und rechts des Kommas zusammen. <b>18 <\/b>ist ein praxiserprobter Standardwert der gut zu <b>DECIMAL(10,2) <\/b>auf dem SQL Server passt.<\/li>\n<li><b>prm.NumericScale = 2<\/b>: legt fest, wie viele Stellen davon rechts des Kommas stehen, also die Nachkommastellen. Bei <b>DECIMAL(10,2) <\/b>sind das <b>2<\/b>, was Cent-genauen Geldbetr&auml;gen entspricht.<\/li>\n<li><b>prm.Value = 4500<\/b>: der eigentliche Wert.<\/li>\n<li><b>cmd.Parameters.Append prm<\/b>: erst wenn der Parameter vollst&auml;ndig konfiguriert ist &#8211; also Name, Typ, Richtung, Precision, NumericScale und Value alle gesetzt sind &#8211; wird er an das <b>Command<\/b>-Objekt angeh&auml;ngt. Das <b>Append <\/b>ist der Moment, an dem ADODB den Parameter validiert, und dort kommt ein Fehler, wenn <b>Precision <\/b>oder <b>NumericScale <\/b>fehlen.<\/li>\n<\/ul>\n<p>Schlie&szlig;lich definieren wir den Parameter f&uuml;r den R&uuml;ckgabewert der gespeicherten Prozedur und rufen diese mit der <b>Execute<\/b>-Methode des <b>Command<\/b>-Objekts auf &#8211; im Gegensatz zu den vorherigen Beispielen, wo wir das <b>Command<\/b>-Objekt als Parameter der <b>Open<\/b>-Methode eines <b>Recordset<\/b>-Objekts verwendet haben.<\/p>\n<p>Nach der Ausf&uuml;hrung k&ouml;nnen wir den Wert des Parameters <b>@IDNEW <\/b>&uuml;ber die <b>Value<\/b>-Eigenschaft auslesen und in die Variable <b>lngNewID <\/b>schreiben, den wir anschlie&szlig;end im Direktbereich ausgeben.<\/p>\n<p>Auch diese Prozedur k&ouml;nnen wir je nach Anwendungszweck in eine Funktion &uuml;berf&uuml;hren, der wir die Werte f&uuml;r den neuen Datensatz per Parameter &uuml;bergeben und die den Wert des Prim&auml;rschl&uuml;sselfeldes des neuen Datensatzes zur&uuml;ckgibt.<\/p>\n<h2>Gespeicherte Prozedur zum Aktualisieren eines Datensatzes<\/h2>\n<p>Die gespeicherte Prozedur zum Aktualisieren eines Datensatzes namens <b>spMitarbeiterUpdate<\/b> sehen wir in Listing 6.<\/p>\n<pre>ALTER PROCEDURE [dbo].[spMitarbeiterUpdate]\r\n    @MitarbeiterID  INT,\r\n    @AbteilungID    INT,\r\n    @Vorname        NVARCHAR(100),\r\n    @Nachname       NVARCHAR(100),\r\n    @Email          NVARCHAR(255)   = NULL,\r\n    @Eintrittsdatum DATE            = NULL,\r\n    @Gehalt         DECIMAL(10,2)   = NULL,\r\n    @RowsAffected   INT             = 0 OUTPUT\r\nAS\r\nSET NOCOUNT ON\r\nUPDATE tblMitarbeiter\r\nSET    AbteilungID    = @AbteilungID,\r\n       Vorname        = @Vorname,\r\n       Nachname       = @Nachname,\r\n       Email          = @Email,\r\n       Eintrittsdatum = @Eintrittsdatum,\r\n       Gehalt         = @Gehalt\r\nWHERE  MitarbeiterID  = @MitarbeiterID\r\nSET @RowsAffected = @@ROWCOUNT<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Gespeicherte Prozedur zum Aktualisieren eines Mitarbeiters<\/span><\/b><\/p>\n<p>Sie enth&auml;lt jeweils einen Parameter f&uuml;r jedes Feld der zu aktualisierenden Tabelle, wobei die gleichen Felder wie beim Anlegen eines neuen Datensatzes als optionale Parameter festgelegt werden.<\/p>\n<p>Zus&auml;tzlich &uuml;bergeben wir mit <b>@MitarbeiterID <\/b>auch den Wert des Prim&auml;rschl&uuml;sselfeldes des zu aktualisierenden Datensatzes.<\/p>\n<p>Und schlie&szlig;lich definieren wir mit <b>@RowsAffected <\/b>einen Parameter, mit dem wir die Anzahl der ge&auml;nderten Datens&auml;tze zur&uuml;ckgeben, damit wir in der aufrufenden Prozedur pr&uuml;fen k&ouml;nnen, ob der Vorgang erfolgreich war.<\/p>\n<p>In der <b>UPDATE<\/b>-Anweisung aktualisieren wir alle Felder au&szlig;er <b>MitarbeiterID <\/b>mit den in den Parametern angegebenen Werten. Den Parameter <b>@MitarbeiterID <\/b>verwenden wir als Vergleichswert im Kriterium in der <b>WHERE<\/b>-Bedingung.<\/p>\n<p>Am Ende stellen wir den R&uuml;ckgabewert auf die Anzahl der von der <b>UPDATE<\/b>-Abfrage betroffenen Datens&auml;tze ein:<\/p>\n<pre>SET @RowsAffected = @@ROWCOUNT<\/pre>\n<h2>VBA-Prozedur zum Aktualisieren eines Datensatzes<\/h2>\n<p>Die Prozedur <b>Beispiel_Update_Mitarbeiter<\/b> aus Listing 7 zeigt, wie wir die gespeicherte Prozedur <b>spMitarbeiterUpdate<\/b> aufrufen k&ouml;nnen.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Beispiel_Update_Mitarbeiter()\r\n    <span style=\"color:blue;\">Dim <\/span>cnn<span style=\"color:blue;\"> As <\/span>ADODB.Connection\r\n    <span style=\"color:blue;\">Dim <\/span>cmd<span style=\"color:blue;\"> As <\/span>ADODB.Command\r\n    <span style=\"color:blue;\">Dim <\/span>prm<span style=\"color:blue;\"> As <\/span>ADODB.Parameter\r\n    <span style=\"color:blue;\">Dim <\/span>strConnection<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> cnn = <span style=\"color:blue;\">New<\/span> ADODB.Connection\r\n    strConnection = \"Provider=SQLOLEDB;Data Source=\" & cStrServer & \";Initial Catalog=\" & cStrDatabase _\r\n        & \";Integrated Security=SSPI;\"\r\n    cnn.Open strConnection\r\n    <span style=\"color:blue;\">Set<\/span> cmd = <span style=\"color:blue;\">New<\/span> ADODB.Command\r\n    cmd.ActiveConnection = cnn\r\n    cmd.CommandText = \"spMitarbeiterUpdate\"\r\n    cmd.CommandType = adCmdStoredProc\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@MitarbeiterID\", adInteger, adParamInput, 4, 1)\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@AbteilungID\", adInteger, adParamInput, 4, 2)\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@Vorname\", adVarWChar, adParamInput, 100, \"Maximilian\")\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@Nachname\", adVarWChar, adParamInput, 100, \"Mustermann\")\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@Email\", adVarWChar, adParamInput, 255, \"max.mustermann@firma.de\")\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@Eintrittsdatum\", adDate, adParamInput, 8, #1\/1\/2025#)\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@Gehalt\", adDecimal, adParamInput)\r\n    prm.Value = 5000\r\n    prm.Precision = 18\r\n    prm.NumericScale = 2\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@RowsAffected\", adInteger, adParamOutput, 4)\r\n    cmd.Parameters.Append prm\r\n    cmd.Execute\r\n    <span style=\"color:blue;\">Debug.Print<\/span> \"Aktualisierte Datensaetze: \" & cmd.Parameters(\"@RowsAffected\").Value\r\n    cnn.Close\r\n    <span style=\"color:blue;\">Set<\/span> cmd = Nothing\r\n    <span style=\"color:blue;\">Set<\/span> cnn = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 7: Aktualisieren eines neuen Datensatzes per VBA und ADODB<\/span><\/b><\/p>\n<p>Die Prozedur ist &auml;hnlich aufgebaut wie die zum Anlegen eines neuen Datensatzes. Allerdings &uuml;bergibt sie den Wert f&uuml;r das Feld <b>MitarbeiterID<\/b>, anstatt diesen f&uuml;r den neu angelegten Datensatz zur&uuml;ckgeben zu lassen. Au&szlig;erdem &uuml;bergibt sie einen R&uuml;ckgabeparameter namens <b>@RowsAffected<\/b>, mit dem wir die Anzahl der betroffenen Datens&auml;tze ermitteln.<\/p>\n<p>Nach dem Ausf&uuml;hren des <b>Command<\/b>-Objekts mit Execute ermittelt sie den Wert des R&uuml;ckgabeparameters <b>@RowsAffected <\/b>und gibt den Wert im Direktbereich aus.<\/p>\n<h2>Gespeicherte Prozedur zum L&ouml;schen eines Datensatzes<\/h2>\n<p>Die gespeicherte Prozedur namens <b>spMitarbeiterDelete<\/b> finden wir in Listing 8. Diese verwendet lediglich zwei Parameter:<\/p>\n<pre>CREATE PROCEDURE [dbo].[spMitarbeiterDelete]\r\n    @MitarbeiterID  INT,\r\n    @RowsAffected   INT = 0 OUTPUT\r\nAS\r\nSET NOCOUNT ON\r\nDELETE FROM tblMitarbeiter\r\nWHERE MitarbeiterID = @MitarbeiterID\r\nSET @RowsAffected = @@ROWCOUNT<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 8: Gespeicherte Prozedur zum L&ouml;schen eines Mitarbeiters<\/span><\/b><\/p>\n<ul>\n<li><b>@MitarbeiterID<\/b>: ID des zu l&ouml;schenden Datensatzes<\/li>\n<li><b>@RowsAffected<\/b>: Anzahl der gel&ouml;schten Datens&auml;tze<\/li>\n<\/ul>\n<p>Sie l&ouml;scht mit der <b>DELETE<\/b>-Anweisung den Datensatz, der im Feld <b>MitarbeiterID <\/b>den Wert aus <b>@MitarbeiterID <\/b>enth&auml;lt. Anschlie&szlig;end stellt sie den R&uuml;ckgabeparameter <b>@RowsAffected <\/b>auf die Anzahl der von der Abfrage betroffenen Datens&auml;tze ein.<\/p>\n<h2>VBA-Prozedur zum L&ouml;schen eines Datensatzes<\/h2>\n<p>Die entsprechende VBA-Prozedur namens <b>Beispiel_Delete_Mitarbeiter <\/b>sehen wir in Listing 9. Sie erstellt die beiden in der gespeicherten Prozedur definierten Parameter und weist dem Parameter <b>@MitarbeiterID <\/b>die ID des zu l&ouml;schenden Mitarbeiters zu.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Beispiel_Delete_Mitarbeiter()\r\n    <span style=\"color:blue;\">Dim <\/span>cnn<span style=\"color:blue;\"> As <\/span>ADODB.Connection\r\n    <span style=\"color:blue;\">Dim <\/span>cmd<span style=\"color:blue;\"> As <\/span>ADODB.Command\r\n    <span style=\"color:blue;\">Dim <\/span>prm<span style=\"color:blue;\"> As <\/span>ADODB.Parameter\r\n    <span style=\"color:blue;\">Dim <\/span>strConnection<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> cnn = <span style=\"color:blue;\">New<\/span> ADODB.Connection\r\n    strConnection = \"Provider=SQLOLEDB;Data Source=\" & cStrServer & \";Initial Catalog=\" & cStrDatabase _\r\n        & \";Integrated Security=SSPI;\"\r\n    cnn.Open strConnection\r\n    <span style=\"color:blue;\">Set<\/span> cmd = <span style=\"color:blue;\">New<\/span> ADODB.Command\r\n    cmd.ActiveConnection = cnn\r\n    cmd.CommandText = \"spMitarbeiterDelete\"\r\n    cmd.CommandType = adCmdStoredProc\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@MitarbeiterID\", adInteger, adParamInput, 4, 18)\r\n    cmd.Parameters.Append prm\r\n    <span style=\"color:blue;\">Set<\/span> prm = cmd.CreateParameter(\"@RowsAffected\", adInteger, adParamOutput, 4)\r\n    cmd.Parameters.Append prm\r\n    cmd.Execute\r\n    <span style=\"color:blue;\">Debug.Print<\/span> \"Geloeschte Datensaetze: \" & cmd.Parameters(\"@RowsAffected\").Value\r\n    cnn.Close\r\n    <span style=\"color:blue;\">Set<\/span> cmd = Nothing\r\n    <span style=\"color:blue;\">Set<\/span> cnn = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 9: L&ouml;schen eines neuen Datensatzes per VBA und ADODB<\/span><\/b><\/p>\n<p>Dann f&uuml;hrt sie das <b>Command<\/b>-Objekt mit <b>Execute <\/b>aus und liest anschlie&szlig;end die Anzahl der betroffenen Datens&auml;tze aus dem Parameter <b>@RowsAffected <\/b>aus.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Die hier vorgestellten gespeicherten Prozeduren und Beispielprozeduren zum Aufruf dieser Prozeduren zeigen, wie wir grunds&auml;tzlich per ADODB auf Daten im SQL Server zugreifen und diese manipulieren k&ouml;nnen.<\/p>\n<p>Wenn wir damit nicht nur die Daten der Mitarbeitertabelle lesen und bearbeiten wollen, wird der Umfang des Codes schnell sehr umfangreich: Wir m&uuml;ssten die gespeicherten Prozeduren und die jeweiligen VBA-Prozeduren f&uuml;r jede einzelne Tabelle erstellen.<\/p>\n<p>Wir k&ouml;nnen dies nur auf der Access-Seite vereinfachen, die gespeicherten Prozeduren m&uuml;sste man f&uuml;r jede Tabelle individuell anlegen. Auch dies lie&szlig;e sich jedoch mit einer VBA-Prozedure vereinfachen. Diese m&uuml;sste die Tabellendefinition einer Tabelle analysieren und die gespeicherten Prozeduren erstellen.<\/p>\n<p>Auf der Access-Seite k&ouml;nnen wir allgemeine Funktionen schreiben, um ein Recordset auf Basis einer Tabelle abzurufen sowie neue Datens&auml;tze anzulegen und bestehende zu &auml;ndern oder zu l&ouml;schen.<\/p>\n<p>Wie das gelingt, zeigen wir in einem weiteren Artikel namens <b>ADODB: Gespeicherte Prozeduren einfach aufrufen <\/b>(<b>www.vbentwickler.de\/ 505<\/b>).<\/p>\n<p>Hier optimieren wir auch noch weitere Elemente f&uuml;r eine bessere Wiederverwendung und Vereinfachung des Codes: Wir erstellen zum Beispiel eine eigene Funktion, mit der wir die Verbindungszeichenfolge ermitteln, damit wir diese im Falle einer &Auml;nderung nur an einer Stelle anpassen m&uuml;ssen.<\/p>\n<p>Au&szlig;erdem zeigen wir, wie wir schnell per VBA den Code erstellen k&ouml;nnen, um die gespeicherten Prozeduren f&uuml;r bestimmte Tabellen aufrufen zu k&ouml;nnen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>ADODB_GespeicherteProzedurenAusfuehren.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/203100FC-C3D9-4A8C-AE3B-0E286D5AA9C1\/vbe_503.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recordsets sind zentrale Bestandteile beim Zugriff auf Daten mit ADODB. Sie bieten umfangreiche Funktionen zur Navigation, Bearbeitung, Filterung und Analyse von Daten. In diesem Artikel zeigen wir eine vollst&auml;ndige &Uuml;bersicht aller Eigenschaften und Methoden des Recordset-Objekts und erl&auml;utern diese jeweils ausf&uuml;hrlich mit praktischen Beispielen. Besonderes Augenmerk legen wir auf die Ereignisse eines Recordsetes. Im Gegensatz zum DAO-Recordset bietet das ADODB-Recordset n&auml;mlich die M&ouml;glichkeit, auf verschiedene Ereignisse zu reagieren &#8211; beispielsweise auf &Auml;nderungen im Datensatz.<\/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":[662026,66032026,44000008],"tags":[],"yst_prominent_words":[],"class_list":["post-55000503","post","type-post","status-publish","format-standard","hentry","category-662026","category-66032026","category-Datenzugriffstechnik"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Recordsets sind zentrale Bestandteile beim Zugriff auf Daten mit ADODB. Sie bieten umfangreiche Funktionen zur Navigation, Bearbeitung, Filterung und Analyse von Daten. In diesem Artikel zeigen wir eine vollst\u00e4ndige \u00dcbersicht aller Eigenschaften und Methoden des Recordset-Objekts und erl\u00e4utern diese jeweils ausf\u00fchrlich mit praktischen Beispielen. Besonderes Augenmerk legen wir auf die Ereignisse eines Recordsetes. Im Gegensatz zum DAO-Recordset bietet das ADODB-Recordset n\u00e4mlich die M\u00f6glichkeit, auf verschiedene Ereignisse zu reagieren - beispielsweise auf \u00c4nderungen im Datensatz.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Andr\u00e9 Minhorst\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"ADODB: Gespeicherte Prozeduren ausf\u00fchren - Visual Basic Entwickler\" \/>\n\t\t<meta property=\"og:description\" content=\"Recordsets sind zentrale Bestandteile beim Zugriff auf Daten mit ADODB. Sie bieten umfangreiche Funktionen zur Navigation, Bearbeitung, Filterung und Analyse von Daten. In diesem Artikel zeigen wir eine vollst\u00e4ndige \u00dcbersicht aller Eigenschaften und Methoden des Recordset-Objekts und erl\u00e4utern diese jeweils ausf\u00fchrlich mit praktischen Beispielen. Besonderes Augenmerk legen wir auf die Ereignisse eines Recordsetes. Im Gegensatz zum DAO-Recordset bietet das ADODB-Recordset n\u00e4mlich die M\u00f6glichkeit, auf verschiedene Ereignisse zu reagieren - beispielsweise auf \u00c4nderungen im Datensatz.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-07-28T14:55:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"-001-11-30T00:00:00+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"ADODB: Gespeicherte Prozeduren ausf\u00fchren - Visual Basic Entwickler\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Recordsets sind zentrale Bestandteile beim Zugriff auf Daten mit ADODB. Sie bieten umfangreiche Funktionen zur Navigation, Bearbeitung, Filterung und Analyse von Daten. In diesem Artikel zeigen wir eine vollst\u00e4ndige \u00dcbersicht aller Eigenschaften und Methoden des Recordset-Objekts und erl\u00e4utern diese jeweils ausf\u00fchrlich mit praktischen Beispielen. Besonderes Augenmerk legen wir auf die Ereignisse eines Recordsetes. Im Gegensatz zum DAO-Recordset bietet das ADODB-Recordset n\u00e4mlich die M\u00f6glichkeit, auf verschiedene Ereignisse zu reagieren - beispielsweise auf \u00c4nderungen im Datensatz.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#blogposting\",\"name\":\"ADODB: Gespeicherte Prozeduren ausf\\u00fchren - Visual Basic Entwickler\",\"headline\":\"ADODB: Gespeicherte Prozeduren ausf&uuml;hren\",\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/73cee4569cd043e8bdce631d3f563b14\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#articleImage\"},\"datePublished\":\"2026-06-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"inLanguage\":\"de-DE\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#webpage\"},\"articleSection\":\"2026, 3\\\/2026, Datenzugriffstechnik\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vbentwickler.de\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/#listItem\",\"name\":\"2026\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/#listItem\",\"position\":2,\"name\":\"2026\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/3\\\/2026\\\/#listItem\",\"name\":\"3\\\/2026\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/3\\\/2026\\\/#listItem\",\"position\":3,\"name\":\"3\\\/2026\",\"item\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/3\\\/2026\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#listItem\",\"name\":\"ADODB: Gespeicherte Prozeduren ausf&uuml;hren\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/#listItem\",\"name\":\"2026\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#listItem\",\"position\":4,\"name\":\"ADODB: Gespeicherte Prozeduren ausf&uuml;hren\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/category\\\/2026\\\/3\\\/2026\\\/#listItem\",\"name\":\"3\\\/2026\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/cropped-header_vbe-1.png\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#organizationLogo\",\"width\":664,\"height\":225},\"image\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Andr\\u00e9 Minhorst\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#webpage\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/\",\"name\":\"ADODB: Gespeicherte Prozeduren ausf\\u00fchren - Visual Basic Entwickler\",\"description\":\"Recordsets sind zentrale Bestandteile beim Zugriff auf Daten mit ADODB. Sie bieten umfangreiche Funktionen zur Navigation, Bearbeitung, Filterung und Analyse von Daten. In diesem Artikel zeigen wir eine vollst\\u00e4ndige \\u00dcbersicht aller Eigenschaften und Methoden des Recordset-Objekts und erl\\u00e4utern diese jeweils ausf\\u00fchrlich mit praktischen Beispielen. Besonderes Augenmerk legen wir auf die Ereignisse eines Recordsetes. Im Gegensatz zum DAO-Recordset bietet das ADODB-Recordset n\\u00e4mlich die M\\u00f6glichkeit, auf verschiedene Ereignisse zu reagieren - beispielsweise auf \\u00c4nderungen im Datensatz.\",\"inLanguage\":\"de-DE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/ADODB_Gespeicherte_Prozeduren_ausfuehren\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/author\\\/andreminhorst-com\\\/#author\"},\"datePublished\":\"2026-06-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#website\",\"url\":\"https:\\\/\\\/vbentwickler.de\\\/\",\"name\":\"Datenbankentwickler\",\"description\":\"Das Magazin f\\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.\",\"inLanguage\":\"de-DE\",\"publisher\":{\"@id\":\"https:\\\/\\\/vbentwickler.de\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"ADODB: Gespeicherte Prozeduren ausf\u00fchren - Visual Basic Entwickler","description":"Recordsets sind zentrale Bestandteile beim Zugriff auf Daten mit ADODB. Sie bieten umfangreiche Funktionen zur Navigation, Bearbeitung, Filterung und Analyse von Daten. In diesem Artikel zeigen wir eine vollst\u00e4ndige \u00dcbersicht aller Eigenschaften und Methoden des Recordset-Objekts und erl\u00e4utern diese jeweils ausf\u00fchrlich mit praktischen Beispielen. Besonderes Augenmerk legen wir auf die Ereignisse eines Recordsetes. Im Gegensatz zum DAO-Recordset bietet das ADODB-Recordset n\u00e4mlich die M\u00f6glichkeit, auf verschiedene Ereignisse zu reagieren - beispielsweise auf \u00c4nderungen im Datensatz.","canonical_url":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#blogposting","name":"ADODB: Gespeicherte Prozeduren ausf\u00fchren - Visual Basic Entwickler","headline":"ADODB: Gespeicherte Prozeduren ausf&uuml;hren","author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"},"image":{"@type":"ImageObject","url":"http:\/\/vg08.met.vgwort.de\/na\/73cee4569cd043e8bdce631d3f563b14","@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#articleImage"},"datePublished":"2026-06-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00","inLanguage":"de-DE","mainEntityOfPage":{"@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#webpage"},"isPartOf":{"@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#webpage"},"articleSection":"2026, 3\/2026, Datenzugriffstechnik"},{"@type":"BreadcrumbList","@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/vbentwickler.de#listItem","position":1,"name":"Home","item":"https:\/\/vbentwickler.de","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/#listItem","name":"2026"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/#listItem","position":2,"name":"2026","item":"https:\/\/vbentwickler.de\/category\/2026\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/3\/2026\/#listItem","name":"3\/2026"},"previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/3\/2026\/#listItem","position":3,"name":"3\/2026","item":"https:\/\/vbentwickler.de\/category\/2026\/3\/2026\/","nextItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#listItem","name":"ADODB: Gespeicherte Prozeduren ausf&uuml;hren"},"previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/#listItem","name":"2026"}},{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#listItem","position":4,"name":"ADODB: Gespeicherte Prozeduren ausf&uuml;hren","previousItem":{"@type":"ListItem","@id":"https:\/\/vbentwickler.de\/category\/2026\/3\/2026\/#listItem","name":"3\/2026"}}]},{"@type":"Organization","@id":"https:\/\/vbentwickler.de\/#organization","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","url":"https:\/\/vbentwickler.de\/","logo":{"@type":"ImageObject","url":"https:\/\/vbentwickler.de\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#organizationLogo","width":664,"height":225},"image":{"@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author","url":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","width":96,"height":96,"caption":"Andr\u00e9 Minhorst"}},{"@type":"WebPage","@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#webpage","url":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/","name":"ADODB: Gespeicherte Prozeduren ausf\u00fchren - Visual Basic Entwickler","description":"Recordsets sind zentrale Bestandteile beim Zugriff auf Daten mit ADODB. Sie bieten umfangreiche Funktionen zur Navigation, Bearbeitung, Filterung und Analyse von Daten. In diesem Artikel zeigen wir eine vollst\u00e4ndige \u00dcbersicht aller Eigenschaften und Methoden des Recordset-Objekts und erl\u00e4utern diese jeweils ausf\u00fchrlich mit praktischen Beispielen. Besonderes Augenmerk legen wir auf die Ereignisse eines Recordsetes. Im Gegensatz zum DAO-Recordset bietet das ADODB-Recordset n\u00e4mlich die M\u00f6glichkeit, auf verschiedene Ereignisse zu reagieren - beispielsweise auf \u00c4nderungen im Datensatz.","inLanguage":"de-DE","isPartOf":{"@id":"https:\/\/vbentwickler.de\/#website"},"breadcrumb":{"@id":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/#breadcrumblist"},"author":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"creator":{"@id":"https:\/\/vbentwickler.de\/author\/andreminhorst-com\/#author"},"datePublished":"2026-06-01T00:00:00+00:00","dateModified":"-0001-11-30T00:00:00+00:00"},{"@type":"WebSite","@id":"https:\/\/vbentwickler.de\/#website","url":"https:\/\/vbentwickler.de\/","name":"Datenbankentwickler","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","inLanguage":"de-DE","publisher":{"@id":"https:\/\/vbentwickler.de\/#organization"}}]},"og:locale":"de_DE","og:site_name":"Visual Basic Entwickler - Das Magazin f\u00fcr Datenbankentwickler auf Basis von Visual Studio und Co.","og:type":"article","og:title":"ADODB: Gespeicherte Prozeduren ausf\u00fchren - Visual Basic Entwickler","og:description":"Recordsets sind zentrale Bestandteile beim Zugriff auf Daten mit ADODB. Sie bieten umfangreiche Funktionen zur Navigation, Bearbeitung, Filterung und Analyse von Daten. In diesem Artikel zeigen wir eine vollst\u00e4ndige \u00dcbersicht aller Eigenschaften und Methoden des Recordset-Objekts und erl\u00e4utern diese jeweils ausf\u00fchrlich mit praktischen Beispielen. Besonderes Augenmerk legen wir auf die Ereignisse eines Recordsetes. Im Gegensatz zum DAO-Recordset bietet das ADODB-Recordset n\u00e4mlich die M\u00f6glichkeit, auf verschiedene Ereignisse zu reagieren - beispielsweise auf \u00c4nderungen im Datensatz.","og:url":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/","og:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","og:image:secure_url":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png","article:published_time":"2026-07-28T14:55:21+00:00","article:modified_time":"-001-11-30T00:00:00+00:00","twitter:card":"summary_large_image","twitter:title":"ADODB: Gespeicherte Prozeduren ausf\u00fchren - Visual Basic Entwickler","twitter:description":"Recordsets sind zentrale Bestandteile beim Zugriff auf Daten mit ADODB. Sie bieten umfangreiche Funktionen zur Navigation, Bearbeitung, Filterung und Analyse von Daten. In diesem Artikel zeigen wir eine vollst\u00e4ndige \u00dcbersicht aller Eigenschaften und Methoden des Recordset-Objekts und erl\u00e4utern diese jeweils ausf\u00fchrlich mit praktischen Beispielen. Besonderes Augenmerk legen wir auf die Ereignisse eines Recordsetes. Im Gegensatz zum DAO-Recordset bietet das ADODB-Recordset n\u00e4mlich die M\u00f6glichkeit, auf verschiedene Ereignisse zu reagieren - beispielsweise auf \u00c4nderungen im Datensatz.","twitter:image":"https:\/\/datenbankentwickler.net\/wp-content\/uploads\/2022\/08\/cropped-header_vbe-1.png"},"aioseo_meta_data":{"post_id":"55000503","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2026-07-28 12:58:34","updated":"2026-07-28 12:58:34","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/category\/2026\/\" title=\"2026\">2026<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/vbentwickler.de\/category\/2026\/3\/2026\/\" title=\"3\/2026\">3\/2026<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tADODB: Gespeicherte Prozeduren ausf\u00fchren\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/vbentwickler.de"},{"label":"2026","link":"https:\/\/vbentwickler.de\/category\/2026\/"},{"label":"3\/2026","link":"https:\/\/vbentwickler.de\/category\/2026\/3\/2026\/"},{"label":"ADODB: Gespeicherte Prozeduren ausf&uuml;hren","link":"https:\/\/vbentwickler.de\/ADODB_Gespeicherte_Prozeduren_ausfuehren\/"}],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000503","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000503"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000503\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000503"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}