 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
ftpadua Novato

Registrado: Terça-Feira, 17 de Agosto de 2004 Mensagens: 32
|
Enviada: Ter Jul 28, 2009 2:24 pm Assunto: Problema com Consulta SQL |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Jul 28, 2009 2:45 pm Assunto: |
|
|
qual o erro? |
|
Voltar ao Topo |
|
 |
ftpadua Novato

Registrado: Terça-Feira, 17 de Agosto de 2004 Mensagens: 32
|
Enviada: Ter Jul 28, 2009 2:54 pm Assunto: |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Jul 28, 2009 3:01 pm Assunto: |
|
|
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 |
|
 |
Lehapan Experiente

Registrado: Quarta-Feira, 16 de Junho de 2004 Mensagens: 401 Localização: Caxias do Sul - RS
|
Enviada: Ter Jul 28, 2009 3:22 pm Assunto: |
|
|
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 |
|
 |
ftpadua Novato

Registrado: Terça-Feira, 17 de Agosto de 2004 Mensagens: 32
|
Enviada: Ter Jul 28, 2009 3:36 pm Assunto: |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Jul 28, 2009 3:46 pm Assunto: |
|
|
mude pra prepara a consulta fora do loop igual sujeri e veja se melhora |
|
Voltar ao Topo |
|
 |
ftpadua Novato

Registrado: Terça-Feira, 17 de Agosto de 2004 Mensagens: 32
|
Enviada: Ter Jul 28, 2009 3:49 pm Assunto: |
|
|
como q funciona este prepara? |
|
Voltar ao Topo |
|
 |
Lehapan Experiente

Registrado: Quarta-Feira, 16 de Junho de 2004 Mensagens: 401 Localização: Caxias do Sul - RS
|
Enviada: Ter Jul 28, 2009 3:51 pm Assunto: |
|
|
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 |
|
 |
ftpadua Novato

Registrado: Terça-Feira, 17 de Agosto de 2004 Mensagens: 32
|
Enviada: Ter Jul 28, 2009 3:52 pm Assunto: |
|
|
QueryPlanoCOD_CONTA.Value é a chave primária da tabela |
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Jul 28, 2009 4:18 pm Assunto: |
|
|
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 |
|
 |
ftpadua Novato

Registrado: Terça-Feira, 17 de Agosto de 2004 Mensagens: 32
|
Enviada: Ter Jul 28, 2009 4:29 pm Assunto: |
|
|
o código está identico a este. |
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Jul 28, 2009 4:41 pm Assunto: |
|
|
tem certeza? |
|
Voltar ao Topo |
|
 |
ftpadua Novato

Registrado: Terça-Feira, 17 de Agosto de 2004 Mensagens: 32
|
Enviada: Ter Jul 28, 2009 4:43 pm Assunto: |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Jul 28, 2009 4:48 pm Assunto: |
|
|
agora tá |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|