[Lazarus-es] Como posicionar un dataset en el primer registro

Jesus R. jesusrmx en gmail.com
Mar Abr 18 23:57:55 CEST 2017


Para posicionarlo en el primer registro es con dataset.first; para
posicionarlo en el último: dataset.last;

Efectivamente, no siempre cuando el BOF=true significa que estas
posicionado en el primer registro, pero esto solo es cierto cuando el
dataset esta vacio. En todos los otros casos si BOF=true, entonces también
estas posicionado en el primer registro. Igualmente, si EOF=true significa
o que estas posicionado en el último registro o el dataset esta vacio. De
esto se puede concluir que is BOF=true y EOF=true entonces el dataset esta
vacio. Pero esto es mejor comprobarlo con dataset.IsEmpty.

Ahora bien, cuando estas navegando por el dataset usando dataset.next y
dataset.prior en realidad no se sabe si estas en BOF o EOF sino hasta que
lo has intentado, esto es: si estas en el segundo registro y haces
dataset.prior, llegaras al primer registro sin embar BOF será false por que
el dataset aun no sabe que no hay mas registros previos. Lo mismo sucede
con dataset.next y EOF. El caso de dataset.first y dataset.last es un poco
diferente, por que ademas de posicionarte en el primer y último registro
respectivamente el dataset ya sabe que no hay mas registros previos ni
siguientes también respectivamente por eso cuando usas dataset.first
BOF=true y con dataset.last EOF=true.

Espero no haberte confundido mas :)

Saludos.

Jesus Reyes A.


El 18 de abril de 2017, 14:21, Ismael L. Donis Garcia via Lazarus-es <
lazarus-es en lists.lazarus-ide.org> escribió:

> Estoy presentando un problema, y es que no encuentro como posicionar un
> dataset en el primer y último registro.
>
> tengo por ejemplo a:
> procedure Tfcvta.FormShow(Sender: TObject);
> begin
>   while not dma.rsmr1.EOF do begin
>     ds.Append;
>     ds.FieldByName('cod').AsString := dma.rsmr1.FieldByName('cod').
> AsString;
>   ds.FieldByName('descod').AsString := dma.rsmr1.FieldByName('descod'
> ).AsString;
>   ds.UpdateRecord;
>   ds.Post;
>     dma.rsmr1.Next;
>   end;
>   if (ds.RecordCount > 0) then begin
>     ds.First;
>     if ds.BOF then
>       Application.MessageBox('Inicio',pchar(self.Caption),0);
>   end;
> end;
>
> Siempre me da el mensaje que está en el inicio del dataset y yo quiero que
> se me posicione en el primer registro. Estoy medio perdido con eso, no se
> si los conceptos en Lazarus son diferentes a los de microsoft.
>
> Y en caso de ser diferentes como tratarlos ya que no podría hacer algo
> como esto:
> if not (ds.BOF or ds.EOF) then
>
> Quisiera ver si es posible que me aclaren un poco este concepto en Lazarus
> ya que yo vengo de programar en lenguajes de microsoft y esto me trae medio
> confundido.
>
> Saludos Cordiales
> ========
> | ISMAEL |
> ========
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus-ide.org
> http://lists.lazarus-ide.org/listinfo/lazarus-es
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170418/3bf8a98b/attachment.html>


Más información sobre la lista de distribución Lazarus-es