[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