Duvida com Bof e Eof em um Dataset

12/07/2004

0

Ola pessoal.
Tenho uma duvida e gostaria de saber se podem em ajudar. As propriedades Bof e Eof indicam se o ponteiro está posicionado no inicio ou no fim de um Dataset, respectivamente, correto?
Tenho observado varios exemplos aqui no forum que indicam o uso da seguinte estrutura de laço para testar todos os registros de uma query:
        QUERY.First;
        while not QUERY.Eof do
        begin
           // FAÇA ALGUMA COISA
           QUERY.Next;
        end;

Minha duvida é a seguinte: se Eof indica que o ponteiro está sobre o ultimo registro, o laço não deveria testar o ultimo registro, pois se o ponteiro esta no ultimo registro, Eof é igual a True o que invalida a entrada no laço.
Gostaria de saber um modo correto de fazer um laço com essa funcionalidade.
Agradeço antecipadamente.


Flaviosan

Flaviosan

Responder

Posts

12/07/2004

Paulo_amorim

Olá

O Eof não para no último registro, mas sim no EOF, que eh o terminador (como um [i:992df9f41e]/0[/i:992df9f41e] da vida...) Assim, ele testa de fato o último registro

Mas ainda assim me deixou curioso...então eu fiz um programa teste, e ele pegou o último registro também. Cá vai o código

     try
        Query1.Close;
        Query1.Open;
     except
           Exit;
     end;

     Query1.First;
     while not Query1.Eof do
     begin
          if UpperCase(Query1.FieldByName(´DEF´).AsString) = UpperCase(Edit1.Text) then
          begin
               ShowMessage(´pegou´);
               Exit;
          end;
          Query1.Next;
     end;
     ShowMessage(´nem pegou´);


Espero que ajude
Até+


Responder

12/07/2004

Tnaires

Olá Flávio
O Bof posiciona o DataSet [b:fe7416e411]antes[/b:fe7416e411] do primeiro registro, e o Eof posiciona [b:fe7416e411]depois[/b:fe7416e411] do último registro. Ou seja: Bof fica antes do First, e Eof fica depois do Last:
DataSet
--------
Bof - Início de arquivo
First
...
...
Last
Eof - Fim de arquivo



Responder

12/07/2004

Cabelo

Caro Colega..

Na verdade, o while trabalha da seguinte forma :

Penúltimo registro;
Último Registro;
EOF;

O Eof, não é ponteirado como último registro, mas como se fosse o próximo a partir do último..

se é que deu pra entender, só será True, quando passar pelo último registro..

mas se quiser pode usar assim..

for v_i := 0 to QUERY.RecordClount - 1 do
begin
//Faça o que quiser
end;

assim tem a mesma funcionalidade..

espero ter ajudado..

sem mais

Cabelo


Responder

12/07/2004

Flaviosan

Caros colegas, obrigado pela sua atenção.
Tambem fiz uns testes e constatei que o eof só recebe true apos voce dar um next no ultimo registro. Pra postar minha duvida duvida me baseei no help do delphi. Acho que é tanta coisa pra eles da borland documentar, que deve ter havido um equivoco quanto a essa propriedade. :roll:
Muito obrigado.


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar