[firebase-br] Procedure não atualiza

Nivaldo Martins nivaldomart em gmail.com
Qui Ago 19 11:35:43 -03 2010


Olá Rlinus

Se você utiliza a versão 2.1 do firebird consulte este artigo

http://www.firebase.com.br/fb/artigo.php?id=2001

<http://www.firebase.com.br/fb/artigo.php?id=2001>e lá procure sobre select
retornando valores

Isso vai resolver seu problema

Sds,

Nivaldo Martins
Neo Tecnologia Ltda
Lauro de Freitas - BA

Em 19 de agosto de 2010 10:45, Rlinus <rmsrlinus em gmail.com> escreveu:

>  Olá a todos,
> Eu tinha uma procedure na minha tabela de pedido, essa procedure era só
> para o metodo insert, porém eu pensei, se tiver a necessidade de alterar um
> pedido essa procedure não vai servir.. pq ela vai adicionar um novo em vez
> de atualiza-lo..
>
> Sendo assim criei uma procedure de insert/update, só que na minha procedure
> eu preciso do retorno da chave primaria... acho que do jeito que fiz está
> certo vou postar o código...
>
> só que neste caso eu não sei como trata-la no delphi... vou postar o código
> de como estava tratando a outra procedure de insert...
>
> Ajudem ai pessoal...
>
> Código da procedure de insert/update:
>
> SET TERM ^ ;
>
> CREATE OR ALTER PROCEDURE PEDIDO_IU (
>    ped_cod integer,
>    func_cod integer,
>    ped_data date,
>    ped_total numeric(15,2),
>    forn_cod integer)
> returns (
>    pedcod integer)
> as
> begin
>  if (exists(select ped_cod from pedido where (ped_cod = :ped_cod))) then
>    update pedido
>    set func_cod = :func_cod,
>        ped_data = :ped_data,
>        ped_total = :ped_total,
>        forn_cod = :forn_cod
>    where (ped_cod = :ped_cod);
>  else
>    insert into pedido (
>        ped_cod,
>        func_cod,
>        ped_data,
>        ped_total,
>        forn_cod)
>    values (
>        NEXT VALUE FOR SEQ_PEDIDO_ID,
>        :func_cod,
>        :ped_data,
>        :ped_total,
>        :forn_cod)
>        RETURNING PED_COD INTO :PEDCOD;
> end^
>
> SET TERM ; ^
>
> GRANT SELECT,INSERT,UPDATE ON PEDIDO TO PROCEDURE PEDIDO_IU;
>
> GRANT EXECUTE ON PROCEDURE PEDIDO_IU TO SYSDBA;
>
>
> codigo de como é tratado no delphi:
>
> procedure TDMPrincipal.InsertPedido;
> var
>  idPed: Integer;
> begin
>  // verifica se escolheu produtos
>  if cdsPedidoItem.IsEmpty then
>  raise Exception.Create('É necessário escolher os produtos!');
>
>
>    idPed:= 0;
>    Start;
>  // Adiciona o pedido
>  try
>    with spPedido do
>    begin
>      Params[0].AsInteger:= cdsPedidoFUNC_COD.AsInteger;
>      Params[1].AsDate:= cdsPedidoPED_DATA.AsDateTime;
>      Params[2].AsBCD:= cdsPedidoPED_TOTAL.AsCurrency;
>      Params[3].AsInteger:= cdsPedidoFORN_COD.AsInteger;
>      ExecProc;
>      Commit;
>      idPed:= Params[4].AsInteger;
>    end;
>  Except
>    Rollback;
>  end;
>
>  // Adiciona os items
>  try
>    Start;
>    cdsPedidoItem.First;
>    while not cdsPedidoItem.Eof do
>    begin
>      with spPedidoItem do
>      begin
>        Params[0].AsInteger:= idPed;
>        Params[1].AsInteger:= cdsPedidoItemPROD_COD.AsInteger;
>        Params[2].AsInteger:= cdsPedidoItemQUANTIDADE.AsInteger;
>        Params[3].AsBCD:= cdsPedidoItemVALOR.AsCurrency;
>        ExecProc;
>      end;
>      cdsPedidoItem.Next;
>    end;
>    Commit;
>  Except
>    DeletePedido(idPed);
>    Rollback;
>  end;
> end;
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista