Page 1 of 1

Ir a una fila en un Query

PostPosted: Thu Oct 16, 2014 1:59 pm
by TOTOVIOTTI
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

Re: Ir a una fila en un Query

PostPosted: Thu Oct 16, 2014 2:55 pm
by karinha

Re: Ir a una fila en un Query

PostPosted: Thu Oct 16, 2014 6:16 pm
by TOTOVIOTTI
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

Re: Ir a una fila en un Query

PostPosted: Thu Oct 16, 2014 6:37 pm
by ricardog
Buenas tardes.
Y no te sirve oRs:MoveLast() ?

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


Saludos.

Re: Ir a una fila en un Query

PostPosted: Thu Oct 16, 2014 6:43 pm
by TOTOVIOTTI
Ricardo,
gracias por la respuesta, no uso ADO, estoy usando TDolphin, no me sirve esa función...

Gracias!
Roberto

Re: Ir a una fila en un Query

PostPosted: Thu Oct 16, 2014 7:06 pm
by karinha

Re: Ir a una fila en un Query

PostPosted: Thu Oct 16, 2014 7:12 pm
by TOTOVIOTTI
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

Re: Ir a una fila en un Query

PostPosted: Thu Oct 16, 2014 7:16 pm
by ricardog
Seria algo asi:

oQuery:Goto( oQuery:LastRec() )

Saludos.

Re: Ir a una fila en un Query

PostPosted: Thu Oct 16, 2014 7:51 pm
by karinha

Re: Ir a una fila en un Query RESUELTO

PostPosted: Thu Oct 16, 2014 8:17 pm
by TOTOVIOTTI
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

Re: Ir a una fila en un Query

PostPosted: Fri Oct 17, 2014 6:47 am
by Biel EA6DD
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: Select all  Expand view

oServer:Insert("ausentes",aFields,aValues)
MOVEDOR:=oServer:LastInsertId()
ausentes:refresh() // para refrescar el query
ausentes:Seek(MOVEDOR,"id")
 

Re: Ir a una fila en un Query

PostPosted: Mon Oct 20, 2014 12:38 pm
by TOTOVIOTTI
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