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 

Problema com Consulta SQL

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


Registrado: Terça-Feira, 17 de Agosto de 2004
Mensagens: 32

MensagemEnviada: Ter Jul 28, 2009 2:24 pm    Assunto: Problema com Consulta SQL Responder com Citação

Bom galera, estou com um problema em uma consulta, na emissão do livro razão de Contabilidade.
Ela funciona direitinho com uma pequena quantidade de dados, mais quando tenho q pegar uma quantidade grande de dados, da a impressão q a memória nao da conta.

Segue abaixo o codigo


Código:

      // Filtra o intervalo das contas do plano de contas.
      // SOMENTE MOSTRA NO PLANO DE CONTAS AS CONTAS COM O NIVEL 5
      try
         QueryPlano.Close;
         QueryPlano.SQL.Clear;
         QueryPlano.SQL.Add('Select COD_CONTA, NIV_CONTA, REDUZIDO, DSC_CONTA, TIP_CONTA, S_anter_01, S_anter_02, S_anter_03, S_anter_04, S_anter_05, S_anter_06, S_anter_07, S_anter_08, S_anter_09, S_anter_10, S_anter_11, S_anter_12  from plano ');
         QueryPlano.SQL.Add('where (COD_CONTA >= :Conta1 and COD_CONTA <= :conta2) and (NIV_CONTA= :nivel)');
         QueryPlano.ParamByName('Conta1').asString:= edit1.Text;
         QueryPlano.ParamByName('Conta2').asString:= edit2.Text;
         QueryPlano.ParamByName('nivel').asString:= IntToStr(5);
         QueryPlano.Open;
      except
         ShowMessage('Problema na consulta do Plano de Contas. ');
         Exit;
      end;


   while not QueryPlano.Eof do
   begin
         // FILTRA OS LANCAMENTOS DE DEBITO OU CREDITO COM A CONTA Q ESTA NO PLANO DE CONTAS
         // FILTRA ENTRE DATAS
         try
            QryLANCTO.Close;
            qryLancto.SQL.Clear;
            qryLancto.SQL.Add('Select DAT_LANCTO, NUM_LOTE, NUM_DOCTO, CTA_CREDIT, CTA_DEBITO, VAL_LANCTO, COD_HISTOR, DSC_HISTOR from LANCTO');
            qryLancto.SQL.Add('where (CTA_DEBITO = :Conta or CTA_CREDIT = :Conta) and (DAT_LANCTO between :Data1 and :Data2)');
            qryLancto.ParamByName('Conta').asString:= QueryPlanoCOD_CONTA.Value;
            qryLancto.ParamByName('Data1').AsDate := StrToDate(Data_ini.Text);
            qryLancto.ParamByName('Data2').AsDate := StrToDate(Data_fin.Text);
            qryLancto.SQL.Add('Order By Dat_lancto');
            QryLANCTO.Open;
         except
            ShowMessage('Problema na consulta do lançamento. ');
            Exit;
         end;
   end;



o q pode estar acontecendo?

Desde já agradeço a atençao de todos.
Obrigado
FErnando
msn: feraprim@hotmail.com
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Jul 28, 2009 2:45 pm    Assunto: Responder com Citação

qual o erro?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ftpadua
Novato
Novato


Registrado: Terça-Feira, 17 de Agosto de 2004
Mensagens: 32

MensagemEnviada: Ter Jul 28, 2009 2:54 pm    Assunto: Responder com Citação

Ele executa uns 50% certo, gerando a consulta normal no arquivo temporario, mais quando vai aumentando o volume de dados ele sai do programa.

dá impressão q a memória estoura, mais ja tentei em outro micro e da o mesmo erro.
será q é porque estou fazendo uma consulta usando outra consulta anterior?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Jul 28, 2009 3:01 pm    Assunto: Responder com Citação

outra coisa

Código:

qryLancto.SQL.Clear;
            qryLancto.SQL.Add('Select DAT_LANCTO, NUM_LOTE, NUM_DOCTO, CTA_CREDIT, CTA_DEBITO, VAL_LANCTO, COD_HISTOR, DSC_HISTOR from LANCTO');
            qryLancto.SQL.Add('where (CTA_DEBITO = :Conta or CTA_CREDIT = :Conta) and (DAT_LANCTO between :Data1 and :Data2)');
            qryLancto.ParamByName('Conta').asString:= QueryPlanoCOD_CONTA.Value;
            qryLancto.ParamByName('Data1').AsDate := StrToDate(Data_ini.Text);
            qryLancto.ParamByName('Data2').AsDate := StrToDate(Data_fin.Text);
            qryLancto.SQL.Add('Order By Dat_lancto');
            QryLANCTO.Open;



pq vc monta ela td hora?


deveria ser:

Código:
   QryLANCTO.Close;
   qryLancto.SQL.Clear;
   qryLancto.SQL.Add('Select DAT_LANCTO, NUM_LOTE, NUM_DOCTO, CTA_CREDIT, CTA_DEBITO, VAL_LANCTO, COD_HISTOR, DSC_HISTOR from LANCTO');
   qryLancto.SQL.Add('where (CTA_DEBITO = :Conta or CTA_CREDIT = :Conta) and (DAT_LANCTO between :Data1 and :Data2)');
   qryLancto.SQL.Add('Order By Dat_lancto');


 while not QueryPlano.Eof do
   begin
         // FILTRA OS LANCAMENTOS DE DEBITO OU CREDITO COM A CONTA Q ESTA NO PLANO DE CONTAS
         // FILTRA ENTRE DATAS
         try
            QryLANCTO.Close;
            qryLancto.ParamByName('Conta').asString:= QueryPlanoCOD_CONTA.Value;
            qryLancto.ParamByName('Data1').AsDate := StrToDate(Data_ini.Text);
            qryLancto.ParamByName('Data2').AsDate := StrToDate(Data_fin.Text);
            QryLANCTO.Open;
         except
            ShowMessage('Problema na consulta do lançamento. ');
            Exit;
         end;
   end;


poderia até chamar um Prepareantes de entrar no loop, mas a maioria dos compos ja tratam isso hoje em dia.



agora

Citação:

except
ShowMessage('Problema na consulta do lançamento. ');
Exit;
end;



detesto isso. se acontecer um erro vc vai ter q adivinhar qual. simplesmente pq ignorou ele.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Lehapan
Experiente
Experiente


Registrado: Quarta-Feira, 16 de Junho de 2004
Mensagens: 401
Localização: Caxias do Sul - RS

MensagemEnviada: Ter Jul 28, 2009 3:22 pm    Assunto: Responder com Citação

Código:

while not QueryPlano.Eof do
   begin
         // FILTRA OS LANCAMENTOS DE DEBITO OU CREDITO COM A CONTA Q ESTA NO PLANO DE CONTAS
         // FILTRA ENTRE DATAS
         try
            QryLANCTO.Close;
            qryLancto.SQL.Clear;
            qryLancto.SQL.Add('Select DAT_LANCTO, NUM_LOTE, NUM_DOCTO, CTA_CREDIT, CTA_DEBITO, VAL_LANCTO, COD_HISTOR, DSC_HISTOR from LANCTO');
            qryLancto.SQL.Add('where (CTA_DEBITO = :Conta or CTA_CREDIT = :Conta) and (DAT_LANCTO between :Data1 and :Data2)');
            qryLancto.ParamByName('Conta').asString:= QueryPlanoCOD_CONTA.Value;
            qryLancto.ParamByName('Data1').AsDate := StrToDate(Data_ini.Text);
            qryLancto.ParamByName('Data2').AsDate := StrToDate(Data_fin.Text);
            qryLancto.SQL.Add('Order By Dat_lancto');
            QryLANCTO.Open;
         except
            ShowMessage('Problema na consulta do lançamento. ');
            Exit;
         end;


         { Deve ser pego o próximo registro, pois senão fica lendo INFINITAMENTE o mesmo registro}
         QueryPlano.Next;



   end;


Espero ter ajudado
_________________
Wilson Lehapan Junior, vulgo Paulista...!!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ftpadua
Novato
Novato


Registrado: Terça-Feira, 17 de Agosto de 2004
Mensagens: 32

MensagemEnviada: Ter Jul 28, 2009 3:36 pm    Assunto: Responder com Citação

infelizmente nao deu certo ainda, continua no mesmo erro.

o interessante q esta funcionando com poucos registros, agora quando tem muitos lancamentos, aí ele da erro.

agora ta dando o erro 'INVALID PARAMETER'

executando direto do delphi7 aparece a seguinte mensagem: PROJECT SISCONTABILIDADE.EXE RAISED EXCEPTION CASS EDBENGINEERROR WITH MESSAGE 'INVALID PARAMETER'.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Jul 28, 2009 3:46 pm    Assunto: Responder com Citação

mude pra prepara a consulta fora do loop igual sujeri e veja se melhora
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ftpadua
Novato
Novato


Registrado: Terça-Feira, 17 de Agosto de 2004
Mensagens: 32

MensagemEnviada: Ter Jul 28, 2009 3:49 pm    Assunto: Responder com Citação

como q funciona este prepara?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Lehapan
Experiente
Experiente


Registrado: Quarta-Feira, 16 de Junho de 2004
Mensagens: 401
Localização: Caxias do Sul - RS

MensagemEnviada: Ter Jul 28, 2009 3:51 pm    Assunto: Responder com Citação

verifique se em algum momento o QueryPlanoCOD_CONTA.Value está retornando com o valor VAZIO ou NULL.
_________________
Wilson Lehapan Junior, vulgo Paulista...!!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ftpadua
Novato
Novato


Registrado: Terça-Feira, 17 de Agosto de 2004
Mensagens: 32

MensagemEnviada: Ter Jul 28, 2009 3:52 pm    Assunto: Responder com Citação

QueryPlanoCOD_CONTA.Value é a chave primária da tabela
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Jul 28, 2009 4:18 pm    Assunto: Responder com Citação

porra!!!


é só colocar do jeito q postei.


Código:

  QryLANCTO.Close;
   qryLancto.SQL.Clear;
   qryLancto.SQL.Add('Select DAT_LANCTO, NUM_LOTE, NUM_DOCTO, CTA_CREDIT, CTA_DEBITO, VAL_LANCTO, COD_HISTOR, DSC_HISTOR from LANCTO');
   qryLancto.SQL.Add('where (CTA_DEBITO = :Conta or CTA_CREDIT = :Conta) and (DAT_LANCTO between :Data1 and :Data2)');
   qryLancto.SQL.Add('Order By Dat_lancto');


 while not QueryPlano.Eof do
   begin
         // FILTRA OS LANCAMENTOS DE DEBITO OU CREDITO COM A CONTA Q ESTA NO PLANO DE CONTAS
         // FILTRA ENTRE DATAS
         try
            QryLANCTO.Close;
            qryLancto.ParamByName('Conta').asString:= QueryPlanoCOD_CONTA.Value;
            qryLancto.ParamByName('Data1').AsDate := StrToDate(Data_ini.Text);
            qryLancto.ParamByName('Data2').AsDate := StrToDate(Data_fin.Text);
            QryLANCTO.Open;
         except
            ShowMessage('Problema na consulta do lançamento. ');
            raise;//Exit;// ver o erro de verdade
         end;
   end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ftpadua
Novato
Novato


Registrado: Terça-Feira, 17 de Agosto de 2004
Mensagens: 32

MensagemEnviada: Ter Jul 28, 2009 4:29 pm    Assunto: Responder com Citação

o código está identico a este.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Jul 28, 2009 4:41 pm    Assunto: Responder com Citação

tem certeza?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ftpadua
Novato
Novato


Registrado: Terça-Feira, 17 de Agosto de 2004
Mensagens: 32

MensagemEnviada: Ter Jul 28, 2009 4:43 pm    Assunto: Responder com Citação

absoluta

Código:

      QryLANCTO.Close;
      qryLancto.SQL.Clear;
      qryLancto.SQL.Add('Select DAT_LANCTO, NUM_LOTE, NUM_DOCTO, CTA_CREDIT, CTA_DEBITO, VAL_LANCTO, COD_HISTOR, DSC_HISTOR from LANCTO');
      qryLancto.SQL.Add('where (CTA_DEBITO = :Conta or CTA_CREDIT = :Conta) and (DAT_LANCTO between :Data1 and :Data2)');
      qryLancto.SQL.Add('Order By Dat_lancto');


        while not QueryPlano.Eof do
      begin
         // ZERA OS SALDOS INICIAIS
         saldo  := 0;      sd_debito := 0;    sd_credito:= 0;
         saldoinicial := 0;

         progress2.Position := progress2.Position + 1;

         // FILTRA OS LANCAMENTOS DE DEBITO OU CREDITO COM A CONTA Q ESTA NO PLANO DE CONTAS
         // FILTRA ENTRE DATAS
         // DATA MODIFICAÇÃO..:  04/06/2009
         try
            QryLANCTO.Close;
            qryLancto.ParamByName('Conta').asString:= QueryPlanoCOD_CONTA.Value;
            qryLancto.ParamByName('Data1').AsDate := StrToDate(Data_ini.Text);
            qryLancto.ParamByName('Data2').AsDate := StrToDate(Data_fin.Text);
            QryLANCTO.Open;
         except
            ShowMessage('Problema na consulta do lançamento... ');
            raise; //Exit;
         end;


Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Jul 28, 2009 4:48 pm    Assunto: Responder com Citação

agora tá
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