Announcement

Collapse
No announcement yet.

Mit VBA Stored Procedure Rückgabewert auslesen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mit VBA Stored Procedure Rückgabewert auslesen?

    Hallo,

    ich möchte gerne per VBA in einem Access Projekt den Rückgabewert einer Stored Procedure abfragen und entsprechend reagieren.

    Die Stored Procedure löscht keinen oder einen Datensatz und gibt die Anzahl (0 bzw. 1) der gelöschten Datensätze zurück:

    <pre>
    ..
    DECLARE @Ergebnis Integer
    ..
    SET @Ergebnis = @@rowcount
    RETURN
    </pre>

    In Access mache ich dann folgendes:

    <pre>
    Dim SQLQuery As String
    SQLQuery = "EXECUTE sp_deletePerson " & PersID

    Dim DBConn As ADODB.Connection
    Set DBConn = CurrentProject.Connection

    Dim RS As ADODB.Recordset
    Set RS = New ADODB.Recordset

    RS.Open SQLQuery, DBConn
    </pre>

    Nun würde ich gerne abfragen ob ein Datensatz gelöscht wurde oder nicht was ich so versucht habe:

    <pre>
    Dim Antwort As Integer
    Antwort = RS!Ergebnis
    </pre>

    Das funktioniert wohl deshalb nicht weil der Rückgabewert kein Recordset sondern ein Integer-Wert ist. Nur finde ich nirgens ein Beispiel wie ich diesen Wert per VBA abfragen kann. Von einer anderen Stored Procedure aus ist das kein Problem.

    Danke für Hinweise oder ein lehrreiches Beispiel :-)

    Reiko

  • #2
    Hallo,

    der Rückgabewert einer Stored Procedure wird als erster Eintrag (0) in der <b>Parameters</b>-Kollektion des Command-Objekts zurückgeliefert. Das folgende VBA-Beispiel stammt aus der <i>Microsoft Codebibliothek</i>-Datenbank, die zusammen mit <i>Microsoft Office XP Developer</i> ausgeliefert wird:
    <pre>
    Sub TestParameter()
    <br>
    'Public Sub testParameter
    'Zweck:
    'Dieses Codebeispiel zeigt Folgendes:
    '1. Erstellen einer gespeicherten Prozedur, die Eingabeparameter verwendet
    '2. Erstellen der Parameter und Auslösen der gespeicherten Prozedur
    '3. Anzeigen des Ergebnisses und Löschen der gespeicherten Prozedur
    <br>
    <br>
    Dim Conn As ADODB.Connection
    Dim Param As ADODB.Parameter
    Dim Com As ADODB.Command
    <br>
    Dim strConn As String
    <br>
    ' Verbindungszeichenfolge einer Variablen zuweisen
    <br>
    strConn = "SERVER=(local);" & _
    "User Id=sa;Password=;DATABASE=pubs"
    <br>
    ' Connection-Objekt erstellen
    <br>
    Set Conn = New ADODB.Connection
    <br>
    ' Verbindungszeichenfolge und Provider zuweisen, dann die Verbindung öffnen
    <br>
    Conn.ConnectionString = strConn
    Conn.Provider = "SQLOLEDB"
    Conn.Open strConn
    <br>
    'Neues Befehlsobjekt erstellen
    Set Com = New ADODB.Command
    <br>
    'Mit Code laden, der eine neue gespeicherte Prozedur in PUBS erstellt
    Com.CommandText = "Create Procedure sp_ReturnsOutput @authid " _
    & "varchar(11),@result Varchar(20) OUTPUT As Select @result " _
    & "= (Select au_fname from authors Where Au_id = @authid)"
    <br>
    'Auslösen zum Erstellen einer neuen gespeicherten Prozedur
    Com.ActiveConnection = Conn
    Com.Execute
    <br>
    'Nun sollen zwei Parameter erstellt werden: einer für Eingabe, einer für Ausgabe.
    'Eingabeparameter erstellen
    Set Param = Com.CreateParameter("AuId", adVarChar, adParamInput, 11)
    Param.Value = "172-32-1176"
    Com.Parameters.Append Param
    <br>
    'Rückgabeparameter erstellen
    Set Param = Com.CreateParameter("Return", adVarChar, _
    adParamReturnValue, 20)
    Com.Parameters.Append Param
    <br>
    'ANMERKUNG: Beim Erstellen von Parametern müssen Sie die Größe
    'des Parameters sowie den Typ des Wertes einbeziehen, mit dem Sie arbeiten.
    'Befehlsobjekt als SQL-Zeichenfolge laden
    <br>
    Com.CommandText = "sp_ReturnsOutput"
    Com.CommandType = adCmdStoredProc
    <br>
    'Auslösen
    Com.Execute
    <br>
    'Ergebnisse anzeigen
    MsgBox "Der Vorname des Autors mit " & _
    Com.Parameters(0).Value & " ist " & Com.Parameters(1).Value
    <br>
    'Cleanup durch Löschen von gespeicherter Prozedur
    Com.CommandText = "Drop Procedure Sp_ReturnsOutput"
    Com.CommandType = adCmdText
    Com.Execute
    Conn.Close
    <br>
    End Sub
    </pre&gt

    Comment

    Working...
    X