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 

Pesquisa avançada
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Renaldo72
Aprendiz
Aprendiz


Registrado: Domingo, 19 de Dezembro de 2004
Mensagens: 128

MensagemEnviada: Qua Fev 07, 2018 9:38 am    Assunto: Pesquisa avançada Responder com Citação

Estou precisando mais uma vez da ajuda dos universitários. Estou utilizando essa rotina abaixo que me ensinaram, mas estou tendo dois problemas

ROTINA:

try
Screen.Cursor := crHourGlass;
DM1.IB_exec.Close;
DM1.IB_exec.SQL.Clear;
DM1.IB_exec.SQL.Add( ' SELECT PRO_PRODUTO, ' );
DM1.IB_exec.SQL.Add( ' (SELECT COUNT(BAR_QUANTIDADE) ' );
DM1.IB_exec.SQL.Add( ' FROM BAR B ' );
DM1.IB_exec.SQL.Add( ' WHERE B.BAR_CODPRODUTO = P.PRO_CODPRODUTO ' );
DM1.IB_exec.SQL.Add( ' AND B.BAR_DATA >= :P00 ' );
DM1.IB_exec.SQL.Add( ' AND B.BAR_DATA <P01>= :P02 ' );
DM1.IB_exec.SQL.Add( ' AND B.BAR_TIME <P03>= :P04) AS Qte_Vendida ' );
DM1.IB_exec.SQL.Add( ' FROM PRODUTO P ' );
DM1.IB_exec.SQL.Add( ' Order by 2 Desc ' );
DM1.IB_exec.Params[00].AsDate := DateTimePicker1.Date;
DM1.IB_exec.Params[01].AsDate := DateTimePicker2.Date;
DM1.IB_exec.Params[02].AsTime := D5.Time;
DM1.IB_exec.Params[03].AsTime := D6.Time;
DM1.IB_exec.Params[04].AsInteger := 1;
DM1.IB_exec.Open;
Screen.Cursor := crDefault;
except
Screen.Cursor := crDefault;
end;


PROBLEMAS:

1º - Não mostra os valores unitários e totais.
2º - Está demorando para montar a pesquisa.

Como faço para resolver esses problemas?

desde já agradeço

sds,

Renaldo
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Renaldo72
Aprendiz
Aprendiz


Registrado: Domingo, 19 de Dezembro de 2004
Mensagens: 128

MensagemEnviada: Sex Fev 09, 2018 12:11 pm    Assunto: Pesquisa avançada Responder com Citação

E ai ninguém de plantão?

sds,

Renaldo
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
anderbelluno
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011
Mensagens: 1029
Localização: Cianorte-PR

MensagemEnviada: Sáb Fev 10, 2018 7:28 am    Assunto: Responder com Citação

Amigo duas coisas

<P01>= :P02 ' ); Olha seus parametros

P00, mas vc passa DM1.IB_exec.Params[00].AsDate

depois olha <P01> = ...

ta da uma corrijidinha ai
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Renaldo72
Aprendiz
Aprendiz


Registrado: Domingo, 19 de Dezembro de 2004
Mensagens: 128

MensagemEnviada: Sex Fev 16, 2018 11:23 am    Assunto: Pesquisa avançada Responder com Citação

Ok anderbelluno, vou verificar obrigado.

sds,

Renaldo
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Renaldo72
Aprendiz
Aprendiz


Registrado: Domingo, 19 de Dezembro de 2004
Mensagens: 128

MensagemEnviada: Sex Fev 16, 2018 11:29 am    Assunto: Pesquisa avançada Responder com Citação

anderbelluno ta certo aqui. Deve ter sido na hora de copiar e colar aqui mas tirei os <

try
Screen.Cursor := crHourGlass;
DM1.IB_exec.Close;
DM1.IB_exec.SQL.Clear;
DM1.IB_exec.SQL.Add( ' SELECT PRO_PRODUTO, ' );
DM1.IB_exec.SQL.Add( ' (SELECT COUNT(BAR_QUANTIDADE) ' );
DM1.IB_exec.SQL.Add( ' FROM BAR B ' );
DM1.IB_exec.SQL.Add( ' WHERE B.BAR_CODPRODUTO = P.PRO_CODPRODUTO ' );
DM1.IB_exec.SQL.Add( ' AND B.BAR_DATA >= :P00 ' );
DM1.IB_exec.SQL.Add( ' AND B.BAR_DATA P01>= :P02 ' );
DM1.IB_exec.SQL.Add( ' AND B.BAR_TIME P03>= :P04) AS Qte_Vendida ' );
DM1.IB_exec.SQL.Add( ' FROM PRODUTO P ' );
DM1.IB_exec.SQL.Add( ' Order by 2 Desc ' );
DM1.IB_exec.Params[00].AsDate := DateTimePicker1.Date;
DM1.IB_exec.Params[01].AsDate := DateTimePicker2.Date;
DM1.IB_exec.Params[02].AsTime := D5.Time;
DM1.IB_exec.Params[03].AsTime := D6.Time;
DM1.IB_exec.Params[04].AsInteger := 1;
DM1.IB_exec.Open;
Screen.Cursor := crDefault;
except
Screen.Cursor := crDefault;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
anderbelluno
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011
Mensagens: 1029
Localização: Cianorte-PR

MensagemEnviada: Sex Fev 16, 2018 3:08 pm    Assunto: Responder com Citação

ainda tá errado pq vc diz P00 no sql e no parabyname vc diz 00

coloca P00 no parabyname tbm.
confere os nomes dos parâmetros.

vlw
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Renaldo72
Aprendiz
Aprendiz


Registrado: Domingo, 19 de Dezembro de 2004
Mensagens: 128

MensagemEnviada: Dom Fev 18, 2018 10:33 am    Assunto: Pesquisa avançada Responder com Citação

anderbelluno não estou entendendo onde você que chegar pois a consulta esta funcionando normalmente com exceção da lentidão quando tem muito dados. Qero incluir o valor individual e total da quantidade vendida.

sds,

Renaldo
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
anderbelluno
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011
Mensagens: 1029
Localização: Cianorte-PR

MensagemEnviada: Seg Fev 19, 2018 1:53 am    Assunto: Responder com Citação

Amigo. Não quero parecer chato.
Mas segundo ao que conheço, quando vc usa paramentros em sql os campos devem ser informados com o mesmo nome.

olha isso:
select * from tabela where campo = :P00
qry.parambyname('P00').asstring := 'valor';

esse seria o modo correto.
Não entendo como não gere uma aceção dizendo que não encontra o parâmetro informado no seu sql.
Mas como vc disse, funciona mas tá lento qual do tem muitos registros.

Procura sobre o Rest Dataware.
hj traz mediamente 50.000 registros em 17 segundos.
migrei e não me arrependo nenhum pouco, ao contrário to muito feliz.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
anderbelluno
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011
Mensagens: 1029
Localização: Cianorte-PR

MensagemEnviada: Seg Fev 19, 2018 2:11 am    Assunto: Responder com Citação

Amigo. Não quero parecer chato.
Mas segundo ao que conheço, quando vc usa paramentros em sql os campos devem ser informados com o mesmo nome.

olha isso:
select * from tabela where campo = :P00
qry.parambyname('P00').asstring := 'valor';

esse seria o modo correto.
Não entendo como não gere uma aceção dizendo que não encontra o parâmetro informado no seu sql.
Mas como vc disse, funciona mas tá lento qual do tem muitos registros.

Procura sobre o Rest Dataware.
hj traz mediamente 50.000 registros em 17 segundos.
migrei e não me arrependo nenhum pouco, ao contrário to muito feliz.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Fev 19, 2018 9:37 am    Assunto: Responder com Citação

anderbelluno escreveu:
Amigo. Não quero parecer chato.
Mas segundo ao que conheço, quando vc usa paramentros em sql os campos devem ser informados com o mesmo nome.

olha isso:
select * from tabela where campo = :P00
qry.parambyname('P00').asstring := 'valor';

esse seria o modo correto.
Não entendo como não gere uma aceção dizendo que não encontra o parâmetro informado no seu sql.
Mas como vc disse, funciona mas tá lento qual do tem muitos registros.

Procura sobre o Rest Dataware.
hj traz mediamente 50.000 registros em 17 segundos.
migrei e não me arrependo nenhum pouco, ao contrário to muito feliz.


No que se refere a parametrização a consulta está correta.

Existem 2 formas de alimentar os parâmetros:
    1- Por índice (Params[x]) = É a forma que o Renaldo72 está utilizando.
    2- Por Nome (ParamByName('nome')) = É a maneira que o anderbelluno está usando.

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
anderbelluno
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011
Mensagens: 1029
Localização: Cianorte-PR

MensagemEnviada: Ter Fev 20, 2018 10:34 am    Assunto: Responder com Citação

Ronaldo, peço desculpas pois não conhecia o metodo de passar o parâmetro pelo index como disse o natan.

natan vlw pela dica, pois é mais uma que eu não sabia.

Pergunta,
Chegou a testar o mesmo sql com o Rest Dataware??
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Renaldo72
Aprendiz
Aprendiz


Registrado: Domingo, 19 de Dezembro de 2004
Mensagens: 128

MensagemEnviada: Qui Fev 22, 2018 7:12 pm    Assunto: Pesquisa avançada Responder com Citação

Não conheço Rest Dataware mas se fosse possível queria uma solução da forma padrão, pois estou meio corrido para pesquisar, analisar e implantar no sistema. Tem como?

sds,

Renaldo
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lokasso
Aprendiz
Aprendiz


Registrado: Terça-Feira, 11 de Abril de 2017
Mensagens: 174

MensagemEnviada: Dom Abr 22, 2018 10:46 pm    Assunto: Responder com Citação

Renaldo72 você já tentou debugar em runto cursor <f4> para ver em qual linha ele fica mais lento?

Qual o banco que você está usando e qual a versão?

Qual o componente que você está usando para conexão ao banco?

O banco é local ou remoto?

Quanto tempo demora uma consulta?


Abraços
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Renaldo72
Aprendiz
Aprendiz


Registrado: Domingo, 19 de Dezembro de 2004
Mensagens: 128

MensagemEnviada: Sáb Mai 05, 2018 10:26 am    Assunto: Pesquisa Avançada Responder com Citação

lokasso, eu não fiz o debug em run a base de dados é o firebird 2.54 o componente uma ibquery o acesso é local a demora varia mas fica em torno de uns 1 minuto em alguns casos até 3 minutos.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Renaldo72
Aprendiz
Aprendiz


Registrado: Domingo, 19 de Dezembro de 2004
Mensagens: 128

MensagemEnviada: Qua Jun 06, 2018 7:41 pm    Assunto: Pesquisa Avançada Responder com Citação

Mas na verdade o meu maior problema está em não está conseguindo pegar a quantidade, os valores individuais e a soma de acordo a quantidade e a soma total, só consigo a quantidade de cada produto.


ROTINA:

try
Screen.Cursor := crHourGlass;
DM1.IB_exec.Close;
DM1.IB_exec.SQL.Clear;
DM1.IB_exec.SQL.Add( ' SELECT PRO_PRODUTO, ' );
DM1.IB_exec.SQL.Add( ' (SELECT COUNT(BAR_QUANTIDADE) ' );
DM1.IB_exec.SQL.Add( ' FROM BAR B ' );
DM1.IB_exec.SQL.Add( ' WHERE B.BAR_CODPRODUTO = P.PRO_CODPRODUTO ' );
DM1.IB_exec.SQL.Add( ' AND B.BAR_DATA >= :P00 ' );
DM1.IB_exec.SQL.Add( ' AND B.BAR_DATA <P01>= :P02 ' );
DM1.IB_exec.SQL.Add( ' AND B.BAR_TIME <P03>= :P04) AS Qte_Vendida ' );
DM1.IB_exec.SQL.Add( ' FROM PRODUTO P ' );
DM1.IB_exec.SQL.Add( ' Order by 2 Desc ' );
DM1.IB_exec.Params[00].AsDate := DateTimePicker1.Date;
DM1.IB_exec.Params[01].AsDate := DateTimePicker2.Date;
DM1.IB_exec.Params[02].AsTime := D5.Time;
DM1.IB_exec.Params[03].AsTime := D6.Time;
DM1.IB_exec.Params[04].AsInteger := 1;
DM1.IB_exec.Open;
Screen.Cursor := crDefault;
except
Screen.Cursor := crDefault;
end;


PROBLEMAS:

1º - Não mostra os valores unitários e totais.
2º - Está demorando para montar a pesquisa.

Como faço para resolver?
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
Ir à página 1, 2  Próximo
Página 1 de 2

 
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