FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ir a una fila en un Query
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Ir a una fila en un Query
Posted: Thu Oct 16, 2014 01:59 PM

Hola,
tengo una consulta de una tabla hecha con un query,
cada vez que añado una fila, necesito mover mi puntero
a esa nueva posición.
Uso Dolphin y hago el Insert, y luego Refresh para actualizar la consulta, pero como muevo
el puntero a ese last_insert_id?
Hago nombre_tabla:Goto() pero a donde?

Espero que se entienda lo que necesito...
Gracias
Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Ir a una fila en un Query
Posted: Thu Oct 16, 2014 06:16 PM

Karinha,
gracias pero no me sirve lo del last_insert_id, sé que existe, lo utilizo.
"Last_insert_id" arroja el id de la última fila agregada, pero la consulta es:
Como hago mover el puntero a esa fila??
Gracias
Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 158
Joined: Tue Oct 11, 2005 03:10 PM
Re: Ir a una fila en un Query
Posted: Thu Oct 16, 2014 06:37 PM

Buenas tardes.
Y no te sirve oRs:MoveLast() ?

http://www.w3schools.com/asp/ado_ref_recordset.asp

Saludos.

Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Ir a una fila en un Query
Posted: Thu Oct 16, 2014 06:43 PM

Ricardo,
gracias por la respuesta, no uso ADO, estoy usando TDolphin, no me sirve esa función...

Gracias!
Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Ir a una fila en un Query
Posted: Thu Oct 16, 2014 07:06 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Ir a una fila en un Query
Posted: Thu Oct 16, 2014 07:12 PM
Karinha y los que me puedan ayudar, ahora estoy haciendo:


oServer:Insert("ausentes",aFields,aValues)
oQuery:=oServer:Query("SELECT LAST_INSERT_ID() AS nLast FROM ausentes LIMIT 1")
MOVEDOR:=oQuery:nLast
oQuery:End()
ausentes:refresh() // para refrescar el query

y, para hacer mover el puntero a MOVEDOR, que es donde necesito, hago:

ausentes:find(MOVEDOR,"id")

pero éste find, cuando las tablas son grandes, demora mucho, por eso, necesito
buscar otra forma de mover el puntero como si fuera un goto(), pero ésta función
no me sirve, porque no sé el recno() del registro insertado.

Espero haber sido un poco más claro.
Gracias!
Roberto
Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 158
Joined: Tue Oct 11, 2005 03:10 PM
Re: Ir a una fila en un Query
Posted: Thu Oct 16, 2014 07:16 PM

Seria algo asi:

oQuery:Goto( oQuery:LastRec() )

Saludos.

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Ir a una fila en un Query
Posted: Thu Oct 16, 2014 07:51 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Ir a una fila en un Query RESUELTO
Posted: Thu Oct 16, 2014 08:17 PM

Gracias Ricardo y Karinha.

Opté por oQuery:Goto(oQuery:Lastrec()), no creí que el LastRec() funcionara de ésta manera,
mi duda estaba en que si la fila que insertaba, se iba al ppio de la consulta por el order by, igual
sigue manteniendo el Lastrec().

Gracias!
Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: Ir a una fila en un Query
Posted: Fri Oct 17, 2014 06:47 AM
Asumo que la tabla tiene como clave primaria el campo "id" y que es autonumérico.

oQuery:Goto(oQuery:Lastrec()) es lo mismo que oQuery:GoBottom(). Y si no me falla la teoria esto se posiciona en el último registro de la consulta, y SI se ve afectado por el order. LastRec() devuelve el total de filas en la consulta, no el último id introducido.

El problema de find es que la búsqueda es secuencial, y la velocidad depende directamente del número de registros. Se puede usar seek que es mucho más rápido, pero necesita que este ordenado por el campo que vamos a buscar, en este caso si esta ordenado por ID, sera casi lo mismo hacer GoBottom(), con la salvedad de que otros usuario hayan introducido registros, en ese caso tiene sentido hacer un seek, pues puede que el registro que acaba de introducir el usuario ya no sea el último, Last Inert Id es local a cada cliente.

Suponiendo que esta ordenado por Id, puedes hacerlo como habías expuesto al principio, pero cambiando find por seek.
Code (fw): Select all Collapse
oServer:Insert("ausentes",aFields,aValues)
MOVEDOR:=oServer:LastInsertId()
ausentes:refresh() // para refrescar el query
ausentes:Seek(MOVEDOR,"id")
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Ir a una fila en un Query
Posted: Mon Oct 20, 2014 12:38 PM

Biel,
lo estuve probando, y aparentemente sale bien con el LastRec(), voy a seguir probando para ver si
está correcto lo que estoy haciendo.
No obstante, no me sirve la opción de ORDEN BY id, porque tengo mis queries hechos y ordenados,
se trata de insertar e ir a esa fila en el orden que está la consulta...
Creí que debía ser más fácil...

Gracias!
Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar

Continue the discussion