git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.SDAC@2 6f543ec7-021b-7e4c-98c9-62eafc7fb9a8
134 lines
4.0 KiB
ObjectPascal
134 lines
4.0 KiB
ObjectPascal
{
|
|
Insert - example of using SP with return Identity value as result of executing
|
|
Update - example of using SP with return arbitrary value as result of executing
|
|
Delete - example of using SP with return arbitrary value as parameter
|
|
}
|
|
|
|
unit StoredProcUpdates;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
Db, MemDS, DBAccess, Grids, DBGrids, StdCtrls,
|
|
ActnList, ExtCtrls, DBCtrls, MSAccess, SdacVcl,
|
|
Buttons, DemoFrame, SdacDemoForm;
|
|
|
|
type
|
|
TStoredProcUpdatesFrame = class(TDemoFrame)
|
|
MSQuery: TMSQuery;
|
|
DataSource: TDataSource;
|
|
Panel1: TPanel;
|
|
DBGrid1: TDBGrid;
|
|
Panel2: TPanel;
|
|
DBNavigator1: TDBNavigator;
|
|
btClose: TSpeedButton;
|
|
btOpen: TSpeedButton;
|
|
procedure btOpenClick(Sender: TObject);
|
|
procedure btCloseClick(Sender: TObject);
|
|
procedure MSQueryBeforeUpdateExecute(Sender: TCustomMSDataSet;
|
|
StatementTypes: TStatementTypes; Params: TMSParams);
|
|
procedure MSQueryAfterUpdateExecute(Sender: TCustomMSDataSet;
|
|
StatementTypes: TStatementTypes; Params: TMSParams);
|
|
private
|
|
{ Private declarations }
|
|
public
|
|
// Demo management
|
|
procedure Initialize; override;
|
|
procedure SetDebug(Value: boolean); override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$IFDEF CLR}
|
|
{$R *.nfm}
|
|
{$ENDIF}
|
|
{$IFDEF WIN32}
|
|
{$R *.dfm}
|
|
{$ENDIF}
|
|
|
|
{$IFDEF CLR}
|
|
uses
|
|
Variants;
|
|
{$ENDIF}
|
|
|
|
procedure TStoredProcUpdatesFrame.btOpenClick(Sender: TObject);
|
|
begin
|
|
MSQuery.Open;
|
|
end;
|
|
|
|
procedure TStoredProcUpdatesFrame.btCloseClick(Sender: TObject);
|
|
begin
|
|
MSQuery.Close;
|
|
end;
|
|
|
|
procedure TStoredProcUpdatesFrame.MSQueryBeforeUpdateExecute(Sender: TCustomMSDataSet;
|
|
StatementTypes: TStatementTypes; Params: TMSParams);
|
|
begin
|
|
if stInsert in StatementTypes then begin
|
|
Params.ParamByName('EMPNO').ParamType := ptResult;
|
|
// Params.ParamByName('RETURN_VALUE').DataType was setted equal to Sender.FieldByName('EMPNO').FieldType
|
|
end;
|
|
|
|
if stUpdate in StatementTypes then begin
|
|
Params.ParamByName('RETURN_VALUE').ParamType := ptResult;
|
|
Params.ParamByName('RETURN_VALUE').DataType := ftInteger; // Field 'RETURN_VALUE' does not present in Sender, so we need to set DataType manually
|
|
|
|
Params.ParamByName('EMPINFO').ParamType := ptOutput;
|
|
Params.ParamByName('EMPINFO').DataType := ftWideString; // Field 'EMPINFO' does not present in Sender, so we need to set DataType manually
|
|
end;
|
|
|
|
if stDelete in StatementTypes then begin
|
|
Params.ParamByName('Result').ParamType := ptOutput;
|
|
Params.ParamByName('Result').DataType := ftInteger; // Field 'Result' does not present in Sender, so we need to set DataType manually
|
|
end;
|
|
end;
|
|
|
|
procedure TStoredProcUpdatesFrame.MSQueryAfterUpdateExecute(Sender: TCustomMSDataSet;
|
|
StatementTypes: TStatementTypes; Params: TMSParams);
|
|
var
|
|
EMPNO, ReturnedEMPNO: integer;
|
|
begin
|
|
if stInsert in StatementTypes then begin
|
|
EMPNO := Integer(Params.ParamByName('EMPNO').Value);
|
|
Sender.FieldByName('EMPNO').ReadOnly := False;
|
|
try
|
|
Sender.FieldByName('EMPNO').NewValue := EMPNO;
|
|
finally
|
|
Sender.FieldByName('EMPNO').ReadOnly := True;
|
|
end;
|
|
end;
|
|
|
|
if stUpdate in StatementTypes then begin
|
|
EMPNO := Sender.FieldByName('EMPNO').AsInteger;
|
|
ReturnedEMPNO := Integer(Params.ParamByName('RETURN_VALUE').Value);
|
|
|
|
if EMPNO <> ReturnedEMPNO then
|
|
raise Exception.Create('Error on Update occured!');
|
|
|
|
Caption := String(Params.ParamByName('EMPINFO').Value);
|
|
end;
|
|
|
|
if stDelete in StatementTypes then begin
|
|
EMPNO := Params.ParamByName('EMPNO').AsInteger;
|
|
ReturnedEMPNO := Integer(Params.ParamByName('Result').Value);
|
|
|
|
if EMPNO + 2 {see StoredProc SDAC_DeleteEmployees} <> ReturnedEMPNO then
|
|
raise Exception.Create('Error on Delete occured!');
|
|
end;
|
|
end;
|
|
|
|
// Demo management
|
|
procedure TStoredProcUpdatesFrame.Initialize;
|
|
begin
|
|
inherited;
|
|
MSQuery.Connection := Connection as TMSConnection;
|
|
end;
|
|
|
|
procedure TStoredProcUpdatesFrame.SetDebug(Value: boolean);
|
|
begin
|
|
MSQuery.Debug := Value;
|
|
end;
|
|
|
|
end.
|