Fórum Ajuda com stored procedure #278444

22/04/2005

0

SQL Server 2000 + ADO

Estou fazendo a inclusão de registros via stored procedure. Consigo fazer a inclusão mas não consigo mostrar o código gerado. Tenho uma tela de cadastro, onde o usuário preenche todos os campos, menos o código. Depois que o post é dado, ele teria a stored procedure retorna o código mas ele não é mostrado na DBEdit.

procedure TdtmPrincipal.qryClienteBeforePost(DataSet: TDataSet);
begin
  if dtsCliente.State in [dsInsert] then
  begin
    AjustaParametrosSTP(stpInsereCliente, qryCliente);

    stpInsereCliente.ExecProc;

    if stpInsereCliente.Parameters.ParamByName(´@RETURN_VALUE´).Value <> 0 then
    begin
       MessageDlg(stpInsereCliente.Parameters.ParamByName(´@MsgErro´).Value, mtInformation, mbOKCancel, 0);
       Abort;
    end
    else
    begin
      qryCliente.FieldByName(´Codigo´).ReadOnly := False;
      qryCliente.FieldByName(´Codigo´).Value := stpInsereCliente.Parameters.ParamByName(´@IdCliente´).Value;
      qryCliente.FieldByName(´Credito´).Value := stpInsereCliente.Parameters.ParamByName(´@Credito´).Value;
      qryCliente.FieldByName(´Bonus´).Value := stpInsereCliente.Parameters.ParamByName(´@Bonus´).Value;
      qryCliente.FieldByName(´Data_Cadastro´).Value := stpInsereCliente.Parameters.ParamByName(´@Data_Cadastro´).Value;
      qryCliente.FieldByName(´Codigo´).ReadOnly := True;
    end;
  end;
end;


Esse é o trecho de código onde eu faço a inserção. Todos os campos de retorno são mostrados, exceto o Codigo.

O que pode estar errado ?


Rjun

Rjun

Responder

Posts

22/04/2005

Rjun

Sobe


Responder

Gostei + 0

25/04/2005

Rjun

Sobe


Responder

Gostei + 0

26/04/2005

Ronaldo.cutu

tente colocar esse codigo no evento after(depois) voce colocou no before (antes) qryClienteBeforePost

ok

Ronaldo


Responder

Gostei + 0

21/05/2005

Rjun

Ainda não achei uma solução. Se alguem puder ajudar, ficaria muito grato.


Responder

Gostei + 0

21/05/2005

Ronaldo.cutu

esse codigo é gerado pela stored procedure ou trigger


Responder

Gostei + 0

23/05/2005

Rjun

O campo código é gerado automaticamente pelo SQL Server (IDENTITY). A operação de inserção de registro é feito por uma stored procedure.


Responder

Gostei + 0

23/05/2005

Ronaldo.cutu

eu trabalho com Firebird e ele só gera o codigo automatico depois que grava no banco, por isso que te falei para recuperar o codigo no [b:987914d16e]evento
after[/b:987914d16e], tente e post aqui

at

Ronaldo


Responder

Gostei + 0

23/05/2005

Rjun

Ja tentei no after post. Não acontece nada. A gravação no BD nem é feita.


Responder

Gostei + 0

23/05/2005

Ronaldo.cutu

tente so a recuperação do codigo não todo seu envento


Responder

Gostei + 0

23/05/2005

Rjun

Acontece que no AfterPost a query não esta mais no modo de edição. Ai não tem como eu atualizar a query.

Se alguem puder fazer um teste, seria mais ou menos assim.

Uma tabela simples, com codigo e nome. Sendo o codigo um inteiro auto incrementavel.

Uma query para exibir os dados (Select Codigo, Nome From Tabela), com a propriedade LockType setada para ltBacthOptimistic.

No evento before post da query, fica o seguinte codigo :

  stpInsere.Parameters.ParamByName(´@Nome´).Value := qryCidade.FieldByName(´Nome´).Value;
  stpInsere.ExecProc;

  qryCidade.FieldByName(´Codigo´).ReadOnly := false;
  qryCidade.FieldByName(´Codigo´).Value :=  stpInsere.Parameters.ParamByName(´@ID´).Value;
  qryCidade.FieldByName(´Codigo´).ReadOnly := true;


E a stored procedure tem o seguinte código:

create procedure InsereCidade @Nome varchar(50),
                                              @ID   int OUTPUT
as
  insert into Cidade (Nome) values (@Nome)
  set @ID = @@IDENTITY
  return(0)
go


O banco é MSSQL. No Delphi 7 utilizo ADO pra acessar os dados.


Responder

Gostei + 0

23/05/2005

Rjun

up


Responder

Gostei + 0

24/05/2005

Rjun

up


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar