602SQL-Úplná dokumentace Index  

TSQL602StoredProc

Delphi / Kylix

Zjednodušená deklarace třídy:

type TSQL602StoredProc = class(TComponent)
published
  property Connection   : TSQL602Connection;	
  property ProcName     : string;	
  property ResultName   : string;	
  property Params       : TParams;	
  property DataSet      : TDataSet;	
  property Options      : TSQL602SSOptions;	
  property Detached     : Boolean;	
  
  property AfterExecute : TNotifyEvent;    // událost
  
public
  property Result       : TParam;		

  procedure CheckParams; virtual; 
  procedure ClearAllParams;
  procedure SetParam(Name : string; Value : Integer; pType : TParamType = ptInput); overload;
  procedure SetParam(Name : string; Value : string; pType : TParamType = ptInput);  overload;
  procedure SetParam(Name : string; Value : string; Size : Integer; pType : TParamType); overload;
  procedure SetParam(Name : string; vType : TFieldType; var Value; Size : Integer; 
            pType : TParamType = ptInput); overload;	
  procedure Execute; virtual;
  function  ParamByName(const ParamName : string) : TParam;	
  
end;


Popis

Komponenta slouží ke spouštění uložené procedury nebo funkce (souhrnně rutiny). Vlastnost Params umožňuje specifikovat vstupní i výstupní parametry procedury a vlastnost Result výsledek funkce (umožňuje, propojit provedení rutiny s proměnnými v Delphi). Metodou CheckParams se zanalyzuje SQL příkaz a vytvoří se kolekce parametrů Params automaticky (pouze bez hodnot). Je-li specifikována vlastnost DataSet, budou se jako hodnoty parametrů (vstupní i výstupní) brát hodnoty stejně pojmenovaných sloupců v aktuálním záznamu.
Při prvním zavolání metody Execute se procedura přeloží a připraví a pak je možné ji provádět opakovaně s menší režií serveru, třeba i s různými hodnotami parametrů.

Unit

SQL602

Vlastnosti komponenty

Connection : TSQL602Connection

Spojení na server pomocí TSQL602Connection. Změna této vlastnosti nebo deaktivace spojení s SQL serverem vyvolá reset komponenty.

ProcName : string

Jméno uložené procedury, změna této vlastnosti vyvolá reset komponenty.

Params : TParams

Seznam parametrů uložené procedury obsahující proměnné parametry. Specifikuje jména, datové typy (ft...), typy parametrů (pt...) a hodnoty argumentů. Je-li ve vlastnosti Options nastaven příznak ssoAutoParams, naplní se po změně vlastnosti ProcName vlastnost Params seznamem jmen a typů parametrů uložené procedury automaticky, stejně jako při zavolání metody CheckParams. Ručně lze seznam plnit také pomocí metod SetParam.

DataSet : TDataSet

Hodnoty parametrů mohou být dány hodnotami sloupců v aktuálním záznamu datasetu, který specifikuje vlastnost DataSet. Viz popis u TSQL602Statement.

ResultName : string

Jméno parametru, který představuje výstupní hodnotu uložené SQL funkce. Implicitně je pro výstupní hodnotu použito jméno __Result__ (je potřeba např. v Tparam pro tento parametr).

Result : TParam

Parametr, který představuje výsledek uložené SQL funkce.

Detached : Boolean

Je-li tato vlastnost nastavena, bude se procedura provádět na SQL serveru v samostatném vlákně (odpovídá CALL DETACHED ...). Je-li takto volána funkce, výsledek se nezapíše do Result a bude ztracen. Je-li takto volána procedura, výstupní parametry budou ztraceny.

Options : TSQL602SSOptions

V současné verzi může být hodnotou vlastnosti Options pouze příznak:
ssoAutoParams Po změně vlastnosti ProcName se automaticky zaktualizuje seznam Params a vyplní se jména, typy a délky všech parametrů. Zjištění typů parametrů vyžaduje komunikaci s SQL serverem, při pomalém síťovém spojení může nastavení tohoto příznaku nepatrně zdržovat provedení příkazu.



Metody komponenty

procedure SetParam(Name : string; Value : Integer; pType : TParamType = ptInput);

Pro vytvoření parametru odpovídajícímu 602sql typu INT

procedure SetParam(Name : string; Value : string; pType : TParamType = ptInput);

Pro vytvoření vstupního parametru odpovídajícímu 602sql typu CHAR(N)

procedure SetParam(Name : string; Value : string; Size : Integer; pType : TParamType);

Pro vytvoření výstupního parametru odpovídajícímu 602sql typu CHAR(N)

procedure SetParam(Name : string; vType : TFieldType; var Value; Size : Integer; pType : TParamType = ptInput);

Pro ostatní případy. Metody nastavují vlastnosti jednotlivých parametrů:

Name Jméno parametru
Value Hodnota parametru
vType Libovolný typ hodnoty ftFloat, ftDate, ftMemo, ftBlob aj. v případě, že nemůžete použít jednodušší předchozí varianty.
Size Délka řetězce - povinné pouze u výstupních parametrů pro 602sql typy CHAR(N) nebo BINARY(N), u vstupních parametrů pro 602sql typy proměnné délky (CLOB, BLOB), u výstupních parametrů těchto typů proměné délky není nutné uvádět
pType Typ parametru ptInput pro vstupní parametr, ptOutput pro výstupní parametr, ptInputOutput pro INOUT parametr nebo ptResult pro výsledek funkce

procedure CheckParams;

Metoda provede analýzu hlavičky uložené procedury z vlastnosti ProcName a vytvoří a naplní seznam Params jmény, typy a délkami parametrů. V případě funkce vytvoří i parametr jména ResultName pro výsledek funkce. Je třeba poté doplnit pouze vlastnost parametru Value u vstupních parametrů resp. číst u parametrů výstupních..

procedure ClearAllParams;

Nastaví hodnotu všech parametrů ze seznamu Params na nil.

function ParamByName(const ParamName : string) : TParam;

Metoda vrací popis parametru zadaného jména.

procedure Execute; virtual;

Metoda spouští vlastní provedení uložené procedury nebo funkce.



Události komponenty

procedure AfterExecute(Sender : TObject);

Událost je vyvolána po úspěšném provedení uložené procedury. Argumentem je komponenta TSQL602StoredProc, která událost vyvolala.



Příklad

Na serveru je uložená SQL funkce GetBool, která má vstupní parametr cislo typu Integer a vrací Boolean.

  ...
  with SQL602StoredProc1 do begin
    ProcName := 'GetBool';  // jméno rutiny 
    ResultName := 'result'; // jméno parametru obsahujícího výsledek funkce
// 1.varianta vytvoření seznamu parametrů
    CheckParams;            // vytvoří seznam parametrů
    ParamByName('cislo').Value := 2; // hodnota vstupního parametru
{ 2.varianta
    SetParam('cislo',2);
    SetParam('result',ftBoolean,res,0,ptOutput);
}
    Execute;
    ShowMessage(ParamByName('result').Value);
  end;