ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Pegar Resultado de Procedure SQL no Delphi

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
jescudeiro
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 2 de Abril de 2012
Mensagens: 261
Localização: ribeirao preto

MensagemEnviada: Ter Ago 20, 2019 9:55 am    Assunto: Pegar Resultado de Procedure SQL no Delphi Responder com Citação

Bom dia amigos,
Faço uma Procedure no SQLServer 2008 para incrementar o campo sequencia(Pk) da tabela vendas em definitivo. Pois, quando gero uma venda, busco o campo em uma tabela que só uso pra gerar sequencias temporárias.
A Procedure funciona certo, mas preciso saber no Delphi qual foi essa sequencia incrementada em definitivo para selecionar os dados no dbgrid.

Segue Procedure

ALTER PROCEDURE [dbo].[pIncrementaDefinitivo]
@CodVendaTemp int

AS
BEGIN

SET NOCOUNT ON;

DECLARE
@CodVendaPainel Int



SET @CodVendaPainel = (Select MAX(SequenciaPedidos+1) from PainelC)

PRINT '@CodVendaPainel 1- ' + Convert(Varchar,@CodVendaPainel)


WHILE @CodVendaPainel = (Select CodVenda from Vendas where CodVenda = @CodVendaPainel)
BEGIN
SET @CodVendaPainel = @CodVendaPainel + 1
END

PRINT '@CodVendaPainel 2- ' + Convert(Varchar,@CodVendaPainel)

UPDATE PainelC set SequenciaPedidos = @CodVendaPainel
UPDATE Vendas set CodVenda = @CodVendaPainel where CodVenda =@CodVendaTemp
UPDATE VendasItens set CodVenda = @CodVendaPainel where CodVenda =@CodVendaTemp
UPDATE vendasMaquinasLocadas set CodVenda = @CodVendaPainel where CodVenda =@CodVendaTemp
UPDATE VendasMecanico set CodVenda = @CodVendaPainel where CodVenda =@CodVendaTemp
;
WITH CTE_RN as
(
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY codvenda ORDER by QdadeDev) AS RN
FROM VendasItens where CodVenda = @CodVendaPainel
)
UPDATE CTE_RN
SET item = RN

/*
SELECT *FROM Vendas WHERE CodVenda = @CodVendaPainel
SELECT *FROM VendasItens WHERE CodVenda = @CodVendaPainel
SELECT *FROM VendasMecanico WHERE CodVenda = @CodVendaPainel
SELECT *FROM VendasMaquinasLocadas WHERE CodVenda = @CodVendaPainel
*/

SELECT @CodVendaPainel as Teste

END


Não consigo pegar esse último Select @CodVendaPainel as Teste

Muito obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Ago 20, 2019 11:53 am    Assunto: Responder com Citação

Bom dia,

Acho que você pode adicionar um parâmetro de saída (output) na procedure para capturar o valor retornado na aplicação.
Poderia até mesmo transformar essa variável CodVendaPainel nesse parâmetro de saída.

Espero que ajude


Editado pela última vez por imex em Seg Dez 04, 2023 11:56 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jescudeiro
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 2 de Abril de 2012
Mensagens: 261
Localização: ribeirao preto

MensagemEnviada: Ter Ago 20, 2019 12:00 pm    Assunto: Responder com Citação

Obrigado , Imex

Você diz declarar @CodVendaTemp int output

E como pego depois?
Tenho que usar o componente AdoDsStoreProc?

Hoje para executar procedures, gero uma TAdoQuery em tempo de execuçao

Query.Add('Exec pIncrementaDefinitivo @CodVendaTemp =:c');

Consigo buscar por desse forma?

Muito Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Ago 20, 2019 2:19 pm    Assunto: Responder com Citação

Não, seria mais ou menos o seguinte:

Código:
ALTER PROCEDURE [dbo].[pIncrementaDefinitivo]
  @CodVendaTemp int,
  @CodVendaPainel Int output

AS
BEGIN

SET NOCOUNT ON;

-- DECLARE @CodVendaPainel Int


Sobre o componente, acho que teria que usar a TADOStoredProc mesmo.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jescudeiro
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 2 de Abril de 2012
Mensagens: 261
Localização: ribeirao preto

MensagemEnviada: Ter Ago 20, 2019 8:26 pm    Assunto: Responder com Citação

Obrigado, mais uma vez pela ajuda.
Mas como consigo extrair esse valor para o Delphi.
Fiz conforme orientou.

ADOStoredProc1.Parameters.ParamByName('@CodVendaTemp').Value := DMX.CdsVendasN['CodVenda'];
ADOStoredProc1.Parameters.ParamByName('@CodVendaPainel').Value := DMX.CdsPainel['SequenciaPedidos'];

ADOStoredProc1.ExecProc;

Variavel := ADOStoredProc1.Parameters.ParamByName('@CodVendaPainel').Value;

nao consigo trazer o valor,

Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Ago 21, 2019 10:45 am    Assunto: Responder com Citação

Se não me engano o nome do parâmetro no ParamByName deve ser passado sem a @. Para confirmar experimente adicionar um TADOStoredProc no DataModule ou Form, configure as propriedades e depois abra a propriedade Parameters para ver como os nomes dos parâmetros são identificados.
E como o CodVendaPainel é um parâmetro de saída, a linha abaixo não deve ser utilizada:

Código:
ADOStoredProc1.Parameters.ParamByName('@CodVendaPainel').Value := DMX.CdsPainel['SequenciaPedidos'];


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB