ZEOS + procedura skladowana

0

czy ktos z Was mial kiedys problem z odbieraniem parametrow z procedury skladowanej?

klade na formularzu 2 komponenty (TZConnection i TZStoredProc)
ustawiam
TZConnection: sciezke do bazy, protokol, uzytkownika, haslo, connected -> true
TZStoredProcedure: polaczenie, procedure w bazie i parametry.

po uruchomieniu progrmu wykonuje jeszcze:

procedure TForm1.Button1Click(Sender: TObject);
begin
  ZStoredProc1.ParamByName('A').AsInteger := 2;
  ZStoredProc1.ParamByName('B').AsInteger := 3;
  ZStoredProc1.ExecProc;
  ShowMessage(IntToStr(ZStoredProc1.ParamByName('WYNIK').asinteger));
end; 

no i wszystko gra.

jednak chce tego uzyc w konsolowym programie wiec musze zrezygnowac z ObjectInspectora
i wszystko pisze recznie:

procedure TForm1.Button2Click(Sender: TObject);
var connection: TZConnection;
    storedProc: TZStoredProc;
begin

  Connection := TZConnection.Create(nil);
  Connection.Database := 'C:\Bazy\WAM.ib';
  Connection.Protocol := 'firebird-2.1';
  connection.Password := '###';
  connection.User     := '***';
  Connection.Connect;
  showmessage('polaczono');

  StoredProc := TZStoredProc.Create(nil);
  StoredProc.Connection := Connection;
  StoredProc.StoredProcName := 'MNOZENIE';
  StoredProc.Params.Clear;

  with TParam.Create(StoredProc.Params,ptInput) do begin
    DataType  := ftInteger;
    Name := 'A';
    NumericScale:=0;
    Precision := 0;
    Size:= 0;
  end;

  with TParam.Create(StoredProc.Params,ptInput) do begin
    Name := 'B';
    DataType  := ftInteger;
    NumericScale:=0;
    Precision := 0;
    Size:= 0;
  end;

  with TParam.Create(StoredProc.Params,ptOutput) do begin
    Name := 'WYNIK';
    DataType  := ftInteger;
    NumericScale:=0;
    Precision := 0;
    Size:= 0;
  end;

  StoredProc.ParamByName('A').AsInteger:=7;
  StoredProc.ParamByName('B').AsInteger:=3;

  StoredProc.ExecProc;
  showmessage('Wynik procedury: '+inttostr(StoredProc.ParamByName('WYNIK').AsInteger));
  Connection.Disconnect;
  storedProc.free;
  connection.free;
end;   

to po wykonaniu tej procedury (w delphi)
na serwerze bazy danych zachodza zmiany takie jak powinny ale w parametrze WYNIK
mam wartosc 0 (ZERO). Czy ktos wie dlaczego tak sie dzieje??????????????????????????

0

phi... zajzalem do definicji formularza (*.dfm) na ktorym byl utworzony komponent ZStoredProc wraz z parametrami, i tam zobaczylem ze parametr WYNIK jest przed parametrami A i B.

Nastepnie zmienilem kolejnosc tworzenia parametrow (A,B,WYNIK -> WYNIK,A,B) i zaczelo dzialac...
Nie widze w tym sensu ale skoro dziala to jestem zadowolony.

Jesli ktos ma jakies logiczne wytlumaczenie tego zjawiaska to chetnie sie z nim zapoznam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1