terça-feira, 22 de abril de 2008

TYPE CURSOR - Oracle & TADODataSet

Dando continuidade ao tema “Cursor Type” no Oracle, conforme o artigo anterior pretendo tratar da utilização do ADODataSet para executar uma procedure no Oracle, aqual retorna um cursor, tendo ainda como particularidade vários parâmetros de entrada.
Retomando o assunto, vejamos a procedure “CalculaMedia”:

procedure CalculaMedia(
  Nota1 in out NUMBER,
  Nota2 in NUMBER,
  Nota3 in NUMBER,
  Nota4 in NUMBER,
  ValorAprovacao IN NUMBER,
  Media out NUMBER,
  ZnCursor IN OUT ZNCursorType) is
begin
  Media := (Nota1 + Nota2 + Nota3 + Nota4)/ 4;
  IF (Media >=  ValorAprovacao) THEN
    ResultadoAprovacao := 'Aprovado';
  ELSE
    ResultadoAprovacao := 'Reprovado';
  END IF;
  open ZnCursor FOR
  SELECT  'Aluno Estação ZN: ' AS Nome,
      ResultadoAprovacao AS ResultadoZN
  FROM dual;

end CalculaMedia;


Construindo o Exemplo com ADODataSet para testar a procedure com mais de um parâmetro de entrada:
Crie uma nova pagina no PagControl1: Adicione um DBGrid, um DataSource, um ADODataSet, um Panel, quatro Edits, um BitBtn. Conforme ilustrado na imagem abaixo:



Configurações obrigatórias no ADODataSet:

  1. Conecte no ADOConnection.
  2. Altere a propriedade “CommandType” para “cmdStoredProc”.
  3. Na propriedade “CommandText” digite o nome da procedure: “[owner].my_pkg.calculamedia”
  4. Delete o parâmetro cujo tipo é ftInterface (referente ao cursor).
  5. Altere a propriedade “DataType” dos demais parâmtros de “ftBCD” para “ftFloat”.
  6. Altere a propriedade “EnableBCD” do ADOStoredProc para “False”.
  7. Garanta que o ADOConnection esteja desconectado e adicione os campos persistentes (Fields Editor – Botão direito sobre o ADODataSet).




Codificando o evento OnClick do BtMedia:

procedure TForm1.BtnMediaClick(Sender: TObject);
begin
  with ADODataSet1 do
  begin
   Parameters[0].value := StrtoFloat(Edit1.Text);
   Parameters[1].Value := StrToFloat(Edit2.Text);
   Parameters[2].Value := StrToFloat(Edit3.Text);
   Parameters[3].Value := StrtoFloat(Edit4.Text);
   Open;
  end;
end;


Na próxima ilustração estou executando o exemplo construido:



Nenhum comentário:

Postar um comentário

 
BlogBlogs.Com.Br