Duvida com Bof e Eof em um Dataset
12/07/2004
0
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
Posts
12/07/2004
Paulo_amorim
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é+
12/07/2004
Tnaires
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
12/07/2004
Cabelo
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
12/07/2004
Flaviosan
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.
Clique aqui para fazer login e interagir na Comunidade :)