Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2017-04

Como posicionar un dataset en el primer registro

7 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Ismael L. Donis Garcia

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 |
========
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170418/797ae072/attachment.html>

Reply by email

Jesus R.
to Ismael L. Donis Garcia
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> wrote 46 lines
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>

Reply by email

Rafael Bidegain
to Jesus R.

Me llamó la atención lo que afirma Jesús en el primer párrafo y decidí hacer unas pruebas.

sigo abajo

El día 18 de abril de 2017, 18:57, Jesus R. via Lazarus-es

<lazarus-es en lists.lazarus-ide.org> wrote 7 lines
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.

hay un caso en donde esto no es cierto.
cree un archivo dbf y agregué un registro

puse dos botones con este código

procedure TForm1.Button1Click(Sender: TObject);
begin
  dbf1.First;
  if dbf1.BOF then
     showmessage('begin of file');
  if dbf1.EOF then
     showmessage('end of file');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  dbf1.last;
  if dbf1.BOF then
     showmessage('begin of file');
  if dbf1.EOF then
     showmessage('end of file');
end;

button1 muestra unicamente "begin of file"
button 2 muestra unicamente "end of file"

Según mi prueba lo que hace que:
BOF sea true es la llamada a first()
EOF sea true es la llamada a last()

saludos

Rafael Bidegain Ya que los cuerdos no hablan, hablará el loco. (The Fool, Padraic Pearse) # yo quiero educación libre. ¡YA!

Reply by email

Ismael L. Donis Garcia
to Rafael Bidegain

No entendiste a Jesús el dijo exactamente lo que tu corroboraste. Ni más ni menos, así SI es cierto para todos los casos.

Gracias Jesús te entendí perfecto. El que no entendió bien fue Rafael.

Yo lo que utilizaba era:
if not (ds.BOF or ds.EOF) then
Por costumbre en los lenguajes de Microsoft y ahora tengo que cambiar dicha línea por:

if not ds.IsEmpty then

Saludos Cordiales a tod en s
========
| ISMAEL |
========
WebSite: http://sisconge.byethost15.com/

Earlier message 73 lines
----- Original Message ----- From: "Rafael Bidegain via Lazarus-es" <lazarus-es en lists.lazarus-ide.org> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus-ide.org> Cc: "Rafael Bidegain" <r.bidegain en gmail.com> Sent: Tuesday, April 18, 2017 10:33 PM Subject: Re: [Lazarus-es] Como posicionar un dataset en el primer registro > Me llamó la atención lo que afirma Jesús en el primer párrafo y decidí > hacer unas pruebas. > > sigo abajo > > El día 18 de abril de 2017, 18:57, Jesus R. via Lazarus-es > <lazarus-es en lists.lazarus-ide.org> escribió: >> 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. > > hay un caso en donde esto no es cierto. > cree un archivo dbf y agregué un registro > > puse dos botones con este código > > procedure TForm1.Button1Click(Sender: TObject); > begin > dbf1.First; > if dbf1.BOF then > showmessage('begin of file'); > if dbf1.EOF then > showmessage('end of file'); > > end; > > procedure TForm1.Button2Click(Sender: TObject); > begin > dbf1.last; > if dbf1.BOF then > showmessage('begin of file'); > if dbf1.EOF then > showmessage('end of file'); > > end; > > > button1 muestra unicamente "begin of file" > button 2 muestra unicamente "end of file" > > > Según mi prueba lo que hace que: > BOF sea true es la llamada a first() > EOF sea true es la llamada a last() > > saludos > -- > Rafael Bidegain > > Ya que los cuerdos no hablan, hablará el loco. > (The Fool, Padraic Pearse) > > # yo quiero educación libre. ¡YA! > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus-ide.org > http://lists.lazarus-ide.org/listinfo/lazarus-es >

Reply by email

Rafael Bidegain
to Ismael L. Donis Garcia

El día 19 de abril de 2017, 9:10, Ismael L. Donis Garcia via

Lazarus-es wrote
No entendiste a Jesús el dijo exactamente lo que tu corroboraste. Ni más ni menos, así SI es cierto para todos los casos. Gracias Jesús te entendí perfecto. El que no entendió bien fue Rafael.

yo me refería a esto:

>> se >> puede concluir que is BOF=true y EOF=true entonces el dataset esta vacio.

En el ejemplo que puse bof es true y eof es true pero el dataset no está vacío, tiene *un* registro.

saludos

Rafael Bidegain Ya que los cuerdos no hablan, hablará el loco. (The Fool, Padraic Pearse) # yo quiero educación libre. ¡YA!

Reply by email

Ismael L. Donis Garcia
to Rafael Bidegain

Si eso explico Jesús.

Si el dataset tiene 1 registro y tu dices firt o last, cualquiera de las 2 ordenes, te dará verdadero tanto el BOF como el EOF porque te posicionas en el primer registro que a la vez es el último también, por tal motivo cumple las 2 condiciones.

En Microsoft el concepto es diferente por eso mi confusión ya que vengo de programar por más de 20 años en lenguajes de Microsoft. Porque me estoy yendo de Microsoft, por muchas rozones. La mayor estoy migrando todo a soft libre ya que si mañana nos abrimos al mercado, mi trabajo no tendría problemas legales y podría seguirse utilizando.

Aquí en Lazarus lo que debes es preguntar si el dataset está vacío o no y para ello tienes IsEmpty

Saludos Cordiales

MSc Ismael Lorenzo Donis Garcia Especialista en Informática UEB Industrial Empresa Agroindustrial Ceballos Telf. 33237261 Ext 118 Email: slibre en natio.co.cu
Earlier message 37 lines
----- Original Message ----- From: "Rafael Bidegain via Lazarus-es" <lazarus-es en lists.lazarus-ide.org> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus-ide.org> Cc: "Rafael Bidegain" <r.bidegain en gmail.com> Sent: Wednesday, April 19, 2017 3:14 PM Subject: Re: [Lazarus-es] Como posicionar un dataset en el primer registro > El día 19 de abril de 2017, 9:10, Ismael L. Donis Garcia via > Lazarus-es <lazarus-es en lists.lazarus-ide.org> escribió: >> No entendiste a Jesús el dijo exactamente lo que tu corroboraste. Ni más >> ni >> menos, así SI es cierto para todos los casos. >> >> Gracias Jesús te entendí perfecto. El que no entendió bien fue Rafael. > yo me refería a esto: > >>>> se >>>> puede concluir que is BOF=true y EOF=true entonces el dataset esta >>>> vacio. > > En el ejemplo que puse bof es true y eof es true pero el dataset no > está vacío, tiene *un* registro. > > saludos > -- > Rafael Bidegain > > Ya que los cuerdos no hablan, hablará el loco. > (The Fool, Padraic Pearse) > > # yo quiero educación libre. ¡YA! > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus-ide.org > http://lists.lazarus-ide.org/listinfo/lazarus-es >

Reply by email

Ismael L. Donis Garcia
to Rafael Bidegain: El día 19 de abril de 2017, 9:10, Ismael L. Donis Garcia via yo me refería a esto: En…

Te paso textual lo que Jesús escribió: Leelo bien.

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.

Saludos Reiterados
========
| ISMAEL |
========

Earlier message 37 lines
----- Original Message ----- From: "Rafael Bidegain via Lazarus-es" <lazarus-es en lists.lazarus-ide.org> To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus-ide.org> Cc: "Rafael Bidegain" <r.bidegain en gmail.com> Sent: Wednesday, April 19, 2017 3:14 PM Subject: Re: [Lazarus-es] Como posicionar un dataset en el primer registro > El día 19 de abril de 2017, 9:10, Ismael L. Donis Garcia via > Lazarus-es <lazarus-es en lists.lazarus-ide.org> escribió: >> No entendiste a Jesús el dijo exactamente lo que tu corroboraste. Ni más >> ni >> menos, así SI es cierto para todos los casos. >> >> Gracias Jesús te entendí perfecto. El que no entendió bien fue Rafael. > yo me refería a esto: > >>>> se >>>> puede concluir que is BOF=true y EOF=true entonces el dataset esta >>>> vacio. > > En el ejemplo que puse bof es true y eof es true pero el dataset no > está vacío, tiene *un* registro. > > saludos > -- > Rafael Bidegain > > Ya que los cuerdos no hablan, hablará el loco. > (The Fool, Padraic Pearse) > > # yo quiero educación libre. ¡YA! > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus-ide.org > http://lists.lazarus-ide.org/listinfo/lazarus-es >

Reply by email