In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

TDataSet:GoTop()

Foro de Xailer profesional en español
Responder
RRamonell
Mensajes: 32
Registrado: Mar May 06, 2008 5:20 pm

TDataSet:GoTop()

Mensaje por RRamonell »

Hola todos:
Tengo en un dataset creado al vuelo:
::oDataSource:cConnect := ::oMaskEdit1:Value
::oDataSet:oDataSource := ::oDataSource
::oDataSet:cName := oSender:aItems[ oSender:nIndex ]
::oDataSet:lOpen := .T.
Trato de barrerlo:
MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
( ::cNombre )->( DbGoTop() )
MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
::oDataSet:GoTop()
MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
::oDataSet:lOpen := .F.
::oDataSet:lOpen := .T.
MsgInfo( ::oDataSet:EoF() ) ------> .F. Solo asi vale falso
WHILE ::oDataSet:EoF() = .F.
....
ENDDO
Para que se ejecute el loop debo cerrar y abrir el dataset.
a) ¿Por que el dataset está posicionado en el último registro si se
acaba de crear?
b) ¿Porque no funcionan ( ::cNombre )->( DbGoTop() ) ni
::oDataSet:GoTop() ya que si bien el primero es de xHarbour, por lo
menos el último es un metodo de la clase TDataSet de Xailer?
Agradeceré la ayuda que me puedan proporcionar.
Saludos.
René Ramón Elly.
meridiano75@prodigy.net.mx
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

TDataSet:GoTop()

Mensaje por ignacio »

RRamonell,
No nos indica que tipo de DataSource está utilizando. Lo mejor será que nos
mande un pequeño ejemplo que reproduzca su problema.
Un saludo,
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
[Xailer support]
"RRamonell" <meridiano75@prodigy.net.mx> escribió en el mensaje
news:[email=4904bf3b@ozsrv2.ozlan.local...]4904bf3b@ozsrv2.ozlan.local...[/email]
>
> Hola todos:
>
> Tengo en un dataset creado al vuelo:
>
> ::oDataSource:cConnect := ::oMaskEdit1:Value
> ::oDataSet:oDataSource := ::oDataSource
> ::oDataSet:cName := oSender:aItems[ oSender:nIndex ]
> ::oDataSet:lOpen := .T.
>
> Trato de barrerlo:
>
> MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
> ( ::cNombre )->( DbGoTop() )
> MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
> ::oDataSet:GoTop()
> MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
> ::oDataSet:lOpen := .F.
> ::oDataSet:lOpen := .T.
> MsgInfo( ::oDataSet:EoF() ) ------> .F. Solo asi vale falso
>
> WHILE ::oDataSet:EoF() = .F.
>
> ....
>
> ENDDO
>
> Para que se ejecute el loop debo cerrar y abrir el dataset.
>
> a) ¿Por que el dataset está posicionado en el último registro si se acaba
> de crear?
>
> b) ¿Porque no funcionan ( ::cNombre )->( DbGoTop() ) ni ::oDataSet:GoTop()
> ya que si bien el primero es de xHarbour, por lo menos el último es un
> metodo de la clase TDataSet de Xailer?
>
> Agradeceré la ayuda que me puedan proporcionar.
>
> Saludos.
>
> René Ramón Elly.
> meridiano75@prodigy.net.mx
>
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
RRamonell
Mensajes: 32
Registrado: Mar May 06, 2008 5:20 pm

TDataSet:GoTop()

Mensaje por RRamonell »

Ignacio Ortiz de Zúñiga escribió:
> RRamonell,
>
> No nos indica que tipo de DataSource está utilizando. Lo mejor será que nos
> mande un pequeño ejemplo que reproduzca su problema.
>
> Un saludo,
>
Ignacio, gracias por responder:
Estoy construyendo con Xailer un visor/editor de estructuras, datos e
í­ndices de tablas MySQL, con valoración de la eficiencia de órdenes
select, y con transferencia de estructuras, í­ndices y datos de archivos
dbf a tablas MySQL. Para lo anterior se ofrecen en el programa entradas
para elegir el nombre de la base de datos MySQL, la o las tablas,
í­ndices, archivos dbf, etc.
En la parte de abrir el dbf que será convertido en una tabla MySQL tengo:
::oDataSource := TCdxDataSource():New(self)
::oDataSource:cConnect := ::oMaskEdit1:Value
::oDataSet := TDbfDataSet():New(self)
::oDataSet:oDataSource := ::oDataSource
::oDataSet:cName := oSender:aItems[ oSender:nIndex ]
::oDataSet:lOpen := .T.
Trato de barrer el dataset:
MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
( ::cNombre )->( DbGoTop() )
MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
::oDataSet:GoTop()
MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
::oDataSet:lOpen := .F.
::oDataSet:lOpen := .T.
MsgInfo( ::oDataSet:EoF() ) ------> .F. Solo asi vale falso
WHILE ::oDataSet:EoF() = .F.
....
ENDDO
Pero si no verifico que el puntero del dataset esté al principio, no se
ejecuta el WHILE que es donde se transfieren los registros a la nueva
tabla. Cerrando y abriendo el dataset en forma previa funciona, pero
esta no es "la distancia más corta entre dos puntos", que es lo que creo
que un buen programa debe procurar hacer. Creo que el dataset recien
creado deberí­a apuntar en forma natural al principio y no al final.
Saludos.
René Ramón Elly.
meridiano75@prodigy.net.mx
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

TDataSet:GoTop()

Mensaje por ignacio »

RRamonell,
Insisto en que nos mandes un ejemplo o me digas como reproducirlo en uno ya
existente.
No obstante, veo que estás utilizando el datasource de CDX, que es el mismo
que utilizamos en el ejemplo DBFData1, por ello lo he tomado como ejemplo y
he hecho lo siguiente:
En el evento oDbfDataset1:OnPostOpen:
METHOD DbfDataSet1PostOpen( oSender ) CLASS TForm1
logdebug( oSender:Eof() )
RETURN Nil
Devuelve FALSO
No sigo mirando. Espero que lo entiendas. Te ruego que mandes un
PEQUEÑIIIIIISIMO ejemplo que muestre tu problema.
Un saludo
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
[Xailer support]
"RRamonell" <meridiano75@prodigy.net.mx> escribió en el mensaje
news:4905f322$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Ignacio Ortiz de Zúñiga escribió:
>> RRamonell,
>>
>> No nos indica que tipo de DataSource está utilizando. Lo mejor será que
>> nos mande un pequeño ejemplo que reproduzca su problema.
>>
>> Un saludo,
>>
>
> Ignacio, gracias por responder:
>
> Estoy construyendo con Xailer un visor/editor de estructuras, datos e
> índices de tablas MySQL, con valoración de la eficiencia de órdenes
> select, y con transferencia de estructuras, índices y datos de archivos
> dbf a tablas MySQL. Para lo anterior se ofrecen en el programa entradas
> para elegir el nombre de la base de datos MySQL, la o las tablas, índices,
> archivos dbf, etc.
>
> En la parte de abrir el dbf que será convertido en una tabla MySQL tengo:
>
> ::oDataSource := TCdxDataSource():New(self)
> ::oDataSource:cConnect := ::oMaskEdit1:Value
> ::oDataSet := TDbfDataSet():New(self)
> ::oDataSet:oDataSource := ::oDataSource
> ::oDataSet:cName := oSender:aItems[ oSender:nIndex ]
> ::oDataSet:lOpen := .T.
>
> Trato de barrer el dataset:
>
> MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
> ( ::cNombre )->( DbGoTop() )
> MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
> ::oDataSet:GoTop()
> MsgInfo( ::oDataSet:EoF() ) ------> .T. Vale verdadero
> ::oDataSet:lOpen := .F.
> ::oDataSet:lOpen := .T.
> MsgInfo( ::oDataSet:EoF() ) ------> .F. Solo asi vale falso
>
> WHILE ::oDataSet:EoF() = .F.
>
> ....
>
> ENDDO
>
> Pero si no verifico que el puntero del dataset esté al principio, no se
> ejecuta el WHILE que es donde se transfieren los registros a la nueva
> tabla. Cerrando y abriendo el dataset en forma previa funciona, pero esta
> no es "la distancia más corta entre dos puntos", que es lo que creo que un
> buen programa debe procurar hacer. Creo que el dataset recien creado
> debería apuntar en forma natural al principio y no al final.
>
> Saludos.
>
> René Ramón Elly.
> meridiano75@prodigy.net.mx
>
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder