folgendes aus dem Kopf, also nicht getestet.
Die Syntax könnte dann z.B. in etwa so sein (
MSSQL -
IB kein Plan):
SQL-Code:
DECLARE PROCEDURE SUMMIERE
( S0 int OUTPUT
, S1 int OUTPUT
, S2 int OUTPUT
, S3 int OUTPUT
)
AS
BEGIN
SELECT S0 = SUM(Feld1)
, S1 = SUM(Feld2)
, S2 = SUM(Feld3)
, S3 = SUM(Feld1)+SUM(Feld2)+SUM(Feld3)
FROM Tabelle
END
in Delphi:
Delphi-Quellcode:
function GetSummenFromDb(
var Sum1: Integer;
var Sum2: Integer;
var Sum3: Integer;
var Sum4: Integer;
Con : TADOConnection):Boolean;
var
arySumme := TADOQuery;
i : Integer;
begin
Result := True;
arySumme := TADOQuery.Create(
nil);
with arySumme
do try
Connection := Con;
SQL.Add('
EXECUTE SUMMIERE :S0,:S1,:S2,:S3');
for i := 0
to 3
do begin
Parameters.Add;
Parameters[i].
Name := '
S'+;
Parameters[i].DataType := ftInteger;
Parameters[i].Size := -1;
Parameters[i].Value := NULL;
end;
try
arySumme.ExecSQL;
S0 := Parameters[0].Value;
S1 := Parameters[1].Value;
S2 := Parameters[2].Value;
S3 := Parameters[3].Value;
except
Result := False;
end;
finally
FreeAndNil(arySumme);
end;
end;
Zum philosophischen Streit:
ich habe in meinem aktuellen Projekt auch SP's benutzt, wo es nur ging (selbst für einfache Abfragen), da ich in Delphi dann nur 'Execute Procedurename Parameterliste' als
SQL-Text zu verwenden brauche. Ändert sich was an der
DB-Struktur, brauche ich diese Änderungen nur in den SP's auf dem
DB-Server nachzuvollziehen, und muß den Client-Code nicht mehr anfassen - gerade bei komplexen
DB-Modellen ein Segen. Da
MSSQL auch
Query's aus SP's cached, denke ich, dass es kaum Performanceunterschiede geben sollte.
Gruß