SQL Proc
Zuletzt geändert: 28.02.2026 18:13

SQLPROC #

Das SQLPROC-Objekt ermöglicht die Ausführung von gespeicherten SQL-Prozeduren (Stored Procedures) mit vollem UI-Handling. Wenn bei der Ausführung Benutzereingaben erforderlich sind (z.B. Seriennummern beim Buchen eines Lieferscheins), werden diese automatisch abgefragt. Das Verhalten entspricht weitestgehend dem Aufruf des entsprechenden Menüpunkts.

Set proc = Client.CreateObject("SQLPROC")

Hinweis: Beim Erstellen des Objekts wird geprüft, ob der aktuelle Benutzer Berechtigungen auf die Prozedur hat. Ist dies nicht der Fall, wird ein Fehler ausgelöst.

Übersicht #

Eigenschaften #

EigenschaftTypBeschreibung
ProcNamestringName der Stored Procedure (mit dbo.-Präfix)
ReturnValueIntegerRückgabewert der Prozedur (nach Execute)
ErrorMsgstringFehlermeldung (nach fehlgeschlagenem Execute)
HideErrorsBooleanFehleranzeige unterdrücken, Fehler manuell behandeln
TitlestringDialogtitel bzw. Text bei längerer Wartezeit
ExtraErrorMsgstringZusätzliche Fehlermeldung, z.B. zum Debuggen

Methoden #

MethodeRückgabeBeschreibung
SetParamValues(Name, Wert)Parameter der Prozedur setzen
GetParamValues(Name)VariantParameterwert auslesen
ExecuteBooleanProzedur ausführen
RenderSqlstringSQL-Aufruf als Text erzeugen (zum Debuggen)
CreateCmdCommandADO-Command-Objekt für manuelle Ausführung erzeugen
ShowErrorUnterdrückten Fehler nachträglich anzeigen

Eigenschaften #

HideErrors #

Wenn True, wird bei einem Fehler kein Dialog angezeigt. Der Fehler muss dann manuell über ErrorMsg und ReturnValue ausgewertet werden. Bei Bedarf kann der Fehler nachträglich mit ShowError angezeigt werden.

ExtraErrorMsg #

Zusätzlicher Text, der bei einem Fehler mit ausgegeben wird. Nützlich zum Debuggen, um z.B. die übergebenen Parameter oder den Kontext zu dokumentieren.

Methoden #

SetParamValues / GetParamValues #

procedure SetParamValues(Name: string, Value: Variant)
function GetParamValues(Name: string): Variant

Setzt bzw. liest Parameter der Stored Procedure. Der Parametername muss mit @ beginnen, wie in SQL üblich.

Execute #

function Execute: Boolean

Führt die Stored Procedure aus. Gibt True bei Erfolg zurück. Falls Benutzereingaben erforderlich sind (z.B. Seriennummern), werden automatisch die entsprechenden Dialoge angezeigt.

Wichtig: Der Rückgabewert ist ein COM-Boolean. Vergleiche mit = True funktionieren nicht zuverlässig. Stattdessen immer If proc.Execute Then verwenden.

RenderSql #

function RenderSql: string

Erzeugt den SQL-Aufruf als lesbaren Text, ohne ihn auszuführen. Nützlich zum Debuggen, um die übergebenen Parameter zu kontrollieren.

' Beispielausgabe:
' EXEC ? = dbo.cn_afBuchen @af_id=1482

CreateCmd #

function CreateCmd: Command

Erzeugt ein ADO-Command-Objekt für die Prozedur, ohne sie auszuführen. Ermöglicht die manuelle Ausführung mit eigenem Fehlerhandling oder in einer eigenen Transaktion.

ShowError #

procedure ShowError

Zeigt einen zuvor unterdrückten Fehler nachträglich an. Nur sinnvoll, wenn HideErrors = True gesetzt wurde und Execute fehlgeschlagen ist.

Beispiele #

A. Stored Procedure ausführen #

Option Explicit

Dim proc
Set proc = Client.CreateObject("SQLPROC")

proc.ProcName = "dbo.cn_afBuchen"
proc.SetParamValues "@af_id", 1482

If proc.Execute Then
  ellib.ShowMessage "Erfolgreich gebucht! Rückgabewert: " & proc.ReturnValue
End If

Set proc = Nothing

B. Fehlerbehandlung mit HideErrors #

Option Explicit

Dim proc
Set proc = Client.CreateObject("SQLPROC")

proc.ProcName = "dbo.cn_afBuchen"
proc.SetParamValues "@af_id", 1482
proc.HideErrors = True

If proc.Execute Then
  ellib.ShowMessage "Auftrag gebucht!"
Else
  ' Fehler selbst behandeln
  If proc.ReturnValue = -1 Then
    ellib.ShowMessage "Auftrag kann nicht gebucht werden: " & proc.ErrorMsg
  Else
    ' Fehler doch anzeigen
    proc.ShowError
  End If
End If

Set proc = Nothing

C. SQL-Aufruf vorab prüfen (Debugging) #

Option Explicit

Dim proc
Set proc = Client.CreateObject("SQLPROC")

proc.ProcName = "dbo.cn_afBuchen"
proc.SetParamValues "@af_id", 1482
proc.ExtraErrorMsg = "Test mit Auftrag ID 1482"

' SQL anzeigen ohne auszuführen
ellib.ShowMessage proc.RenderSql

Set proc = Nothing

Siehe auch #