Fórum While não esta pegando todos os registros ! #263709
29/12/2004
0
Estou fazendo uma rotina para baixar uns documentos onde são mostradas no grid vias Query (bde, paradox) . O cliente vai clicando via checkbox só que por algum motivo ele não esta pegando todos os arquivos marcados.
Veja como estou fazendo:
frmbaixa.qryduplicata.First;
while not frmbaixa.qryduplicata.Eof do
begin
if frmbaixa.qryduplicatabaixa.Value = true then
begin
frmbaixa.qryduplicata.Edit;
frmbaixa.qryduplicataDataliq.Value := date;
frmbaixa.qryduplicataValorpag.Value := frmbaixa.qryduplicataValordup.Value;
frmbaixa.qryduplicataLiq.Value := true;
frmbaixa.qryduplicata.Post;
inc(contador);
end;
frmbaixa.qryduplicata.Next;
end;
Se alguém puder me ajudar agradeço
Hugo Fabrício
Hugofab
Curtir tópico
+ 0Posts
29/12/2004
Dopi
o campo acima tb faz parte da Query certo ? Quando vc marca / desmarca o campo seria necessário estar em modo de ediçao e efetuar um Post... isso está ocorrendo ?
Gostei + 0
29/12/2004
Araujojunior
Hugo, quando você criou esta condição, ele trabalhar com todos os registros que o campo baixa seja verdadeiro, se o registro estiver false ou em branco ele nao vai entrar no laço. :wink:
Gostei + 0
29/12/2004
Hugofab
Sim este campo faz parte da query, e estou dando um post na tabela. O estranho é que tenho um button onde uso para totalizar os registros marcados e na totalização ele faz correto. Somente na hora que vou baixar e que ele não pega todos os registros marcados.
A condição para mostrar os registros na query e ele estar em aberto. Quando baixo ele jogando true no campo liquida, executando o filtro na hora, pois marquei requestlive para true, se deixar false não aceita editar a query
Veja a query:
Select * from duplicata WHERE ((Liq IS NULL) OR (Liq = FALSE))
Tenho uma rotina desta parecida só que com Clientdataset e firebird funciona.
Gostei + 0
29/12/2004
Dopi
if frmbaixa.qryduplicatabaixa.Value = true then
para
if frmbaixa.qryduplicatabaixa.AsBoolean = true then
Gostei + 0
29/12/2004
Euclides
Sim este campo faz parte da query, e estou dando um post na tabela. O estranho é que tenho um button onde uso para totalizar os registros marcados e na totalização ele faz correto. Somente na hora que vou baixar e que ele não pega todos os registros marcados.
A condição para mostrar os registros na query e ele estar em aberto. Quando baixo ele jogando true no campo liquida, executando o filtro na hora, pois marquei requestlive para true, se deixar false não aceita editar a query
Veja a query:
Select * from duplicata WHERE ((Liq IS NULL) OR (Liq = FALSE))
Tenho uma rotina desta parecida só que com Clientdataset e firebird funciona.
Opa Hugo tudo bom ????
Me desculpe se não irei te ajudar porém em uma aplicação que fiz tive o mesmo problema porém foi com a rotina de filtro pois quando um registro era atualizado ele passava a não obedecer mais o filtro assim ele já caia para o próximo registro automaticamente e eu fazia next novamente assim ele sempre efetuava a metade dos registros que tinha ........ num sei se te ajudei muito mas caso não te ajudei uma pergunta : ele esta aceitando metade dos registro depois se voce rodar de novo ele pega metade da metade ????
Abraços
Gostei + 0
29/12/2004
Hugofab
O problema é este mesmo sempre pega a metade dos registros, não tinha prestando atenção, mas fiz algumas verificações e foi isto que aconteceu.
Como você resolveu?
Hugo Fabrício
Gostei + 0
29/12/2004
Euclides
O problema é este mesmo sempre pega a metade dos registros, não tinha prestando atenção, mas fiz algumas verificações e foi isto que aconteceu.
Como você resolveu?
Hugo Fabrício
Olá Hugo,
Então realmente voce esta com o mesmo problemaque eu estava ....... bom para sanar seu problema pode haver vários metodos porém acho que o mais simples é realmente alterar seu código para :
frmbaixa.qryduplicata.First;
while not frmbaixa.qryduplicata.Eof do
begin
if frmbaixa.qryduplicatabaixa.Value = true then
begin
frmbaixa.qryduplicata.Edit;
frmbaixa.qryduplicataDataliq.Value := date;
frmbaixa.qryduplicataValorpag.Value := frmbaixa.qryduplicataValordup.Value;
frmbaixa.qryduplicataLiq.Value := true;
frmbaixa.qryduplicata.Post;
inc(contador);
end
else
frmbaixa.qryduplicata.Next;
end;
Apenas colocando um ELSE ou seja quando voce tiver que atualizar, o próprio post já estará fazendo o next pois o resultado não obedecerá mais a query e assim cairá para o seguinte registro e quando não for atualizar você simplesmente pula para o próximo registro.
Espero ter lhe ajudado .......
Altere e poste pra gente como foi .....
abraços
Euclides
Gostei + 0