Execute SQL
Zuletzt geändert: 11.06.2023 21:46

ExecuteSQL (Pascalscript) #

Beschreibung #

Diese Funktion führt einen beliebigen SQL-Befehl bezogen auf die aktuelle Datenbank (Mandanten) aus. Damit der selbe Befehl nicht mehrfach vom Berichtsgenerator aufgerufen wird, sollte dieser in das Hauptereignis des Berichts unter BeforePrint eingetragen werden.

Syntax #

function ExecuteSQL(var Report:TppReport;const Statement:String; var Affected:Integer; var ResultMsg:String ): boolean;

Argumente #

Das Objekt Report muss stets angegeben werden und lautet immer Report. Es ist das Objekt des aktuellen Berichts. Der auszuführende SQL-Befehl wird in der String-Konstanten Statement angegeben. Die Anzahl der betroffenen Zeilen werden im Integerwert Affected zurück übergeben. Im String ResultMsg wird bei einem Select-Befehl das erste Feld des ersten Datensatzes der Ergebnismenge übermittelt. Hierdurch ist es möglich einen Wert vom SQL-Server abzurufen. Tritt ein Fehler auf, so enthält ResultMsg den Fehlertext. Das Ergebnis von ExecuteSQL ist True, wenn die Funktion fehlerfrei ausgeführt werden konnte. Hat der SQL-Server einen Fehler entdeckt, so ist das Funktionsergebnis False und der Fehlertext wird in ResultMsg übermittelt.

Beispiel #

var
  ResultMsg : String;
  Statement : String;
  Affected : Integer;
begin
  Statement:='UPDATE Artikel SET EkNetto=0.0';
  if ExecuteSQL(Report, Statement, Affected, 
    ResultMsg)=False then
  begin
    ShowMessage('Folgender Fehler ist aufgetreten: '+
       ResultMsg);
  end else
  begin
    ShowMessage('Es sind '+IntToStr(Affected)+
    ' Datensätze betroffen.');
  end;
end;

Regeln zum Nachvollziehen des Scripts finden Sie hier.

In diesem Beispiel werden alle EK-Preise im Artikelstamm auf den Betragswert 0.00 gesetzt. Wenn kein Fehler auftritt, wird in Affected die Anzahl der betroffenen Datensätze zurückgeliefert. Im Fehlerfall wird der Fehlertext, der in ResultMsg übergeben wird, angezeigt.

Wird anstatt eines UPDATE-Befehls ein SELECT-Befehl verwendet, so ist zu beachten, dass nur das erste Feld als Ergebnis in ResultMsg zurückgeliefert wird. Werden mehrere Datensätze zurückgeliefert, so wird nur der erste Datensatz berücksichtigt.

ShowMessage zeigt: Es sind 18 Datensätze betroffen.

Die Anzahl Datensätze hängt natürlich von der Anzahl Ihrer Artikeldaten ab.