Ajuda com stored procedure
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.
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 ?
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
Curtidas 0
Respostas
Rjun
22/04/2005
Sobe
GOSTEI 0
Rjun
22/04/2005
Sobe
GOSTEI 0
Ronaldo.cutu
22/04/2005
tente colocar esse codigo no evento after(depois) voce colocou no before (antes) qryClienteBeforePost
ok
Ronaldo
ok
Ronaldo
GOSTEI 0
Rjun
22/04/2005
Ainda não achei uma solução. Se alguem puder ajudar, ficaria muito grato.
GOSTEI 0
Ronaldo.cutu
22/04/2005
esse codigo é gerado pela stored procedure ou trigger
GOSTEI 0
Rjun
22/04/2005
O campo código é gerado automaticamente pelo SQL Server (IDENTITY). A operação de inserção de registro é feito por uma stored procedure.
GOSTEI 0
Ronaldo.cutu
22/04/2005
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
after[/b:987914d16e], tente e post aqui
at
Ronaldo
GOSTEI 0
Rjun
22/04/2005
Ja tentei no after post. Não acontece nada. A gravação no BD nem é feita.
GOSTEI 0
Ronaldo.cutu
22/04/2005
tente so a recuperação do codigo não todo seu envento
GOSTEI 0
Rjun
22/04/2005
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 :
E a stored procedure tem o seguinte código:
O banco é MSSQL. No Delphi 7 utilizo ADO pra acessar os dados.
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.
GOSTEI 0
Rjun
22/04/2005
up
GOSTEI 0
Rjun
22/04/2005
up
GOSTEI 0