Apuntar a la posición 1
Buenas.
Tengo un grid que muestra una serie de datos ordenados por posición. Varios de esos datos tienen asignada la posición 0, y el resto pues 1,2,3 y así sucesivamente. Lo que quiero hacer es que, al abrir el grid y mostrarme los datos, que en vez de sacarme todos los que tengan 0 y luego el resto, que se vea directamente el de la primera posición teniendo que subir en la barra para ver los que tengan la posición 0. Espero haberme explicado bien. Salu2. |
Si es un dbgrid con que hagas un locate del campo posición en el dataset que estes utilizando te bastaría.
Si es un stringgrid tendrías que recorrer la columna posición hasta encontrar el 1.
|
Es un TQuery si es a eso a lo que te refieres. Este es el código:
Una vez tengo la select, entiendo que después de Open debo introducir el código, ¿el que me has puesto valdría? |
tal como te dice tcp_ip, echale un vistazo en la ayuda de delphi al metodo locate. saludos.
|
Perdona si, es en un dbgrid.
Echaré un vistazo al método locate. Gracias. |
Hola, nose si estoy entendiendo bien pero el locate no le soluciona su problema, según a lo que entiendo el tiene varios registros que tienen como posición 0, otros varios con 1 y asi sucesivamente, creo que el quiere mostrar solo el primer registro que tenga posición 0 y el primero con 1 y el primero con 2, y de alguna forma cuando este digamos en el de posición 0 se muestren todos los demas registros que tengan la posición 0. Si estoy mal me corriges Almd y explicas mas tu pregunta.
Saluditos |
por lo q yo entendi, era colocarse en el de posicion primera, y si se quieren ver los anteriores con posicion cero subir mediante la barra. Con un locate buscando posicion uno, siempre que este ordenado por posicion, ya se soluciona no? si no es el caso y se quiere el ultimo con posicion cero, buscas el 1 y luego haces un prior.
|
si es lo que dice caro, entonces tendras que hacer el select mediante group by, y, por ejemplo, rehacer el select sin el group by cuando se clickee sobre un registro. Eso si, los campos q se muestren mediante el group by tendran q ser los comunes a todos los registros, pues si no te saldran varios grupos diferenciados.
|
Cita:
Cita:
Otra forma también sería haciendo una relación maestro detalle sobre la misma tabla. En el que haga de maestro estaría la consulta con el distinct y despues todo lo demas que se tiene que hacer para la relación. Así tenemos en un DBGrid los primeros de cada posición y cuando se vaya moviendo en ese grid, en el otro se va mostrando el resto que hay para esa posición en la que se encuentre. Saluditos |
Veamos, tengo varios registros con posicion 0, y el resto son consecutivos o sea, 1, 2, 3, etc. quedando así;
0 - Registro 0 - Registro 0 - Registro 1 - Registro 2 - Registro 3 - Registro... Mi intención es que el cursor se sitúe en la posición 1 quedando las 0 ocultas y no quedando mas remedio que subir mediante la barra lateral para poder verlas. Espero haberme explicado!! je je. Salu2 y gracias a to2. |
|
Efectivamente, tal y como lo has puesto funciona, aunque ahora tengo otras dos dudas.
La primera es que me apunta a la primera posición, pero no lo coloca en el grid, es decir, que la flecha sí sale situada en la posición 1 pero se siguen viendo las posiciones con 0. La segunda supongo que tendré que investigar por mi parte ya que, al incluir el código que me has puesto, curiosamente emplea un procedimiento que tengo en el programa que consiste en incluir las filas que faltan de una base de datos, a la que estoy utilizando. No sé si será que mezcla algún otro query que haya por ahí, ¿qué opinais? |
logicamente te coloca el cursor en la posición que encuentra pero no te hace el scroll hasta ocultar los 0. imaginate que tienes el dbgrid con 10 lineas visibles con los siguientes datos: 5 ceros y 1,2 y 3 , en este caso se verían todas las líneas y te sobrarían "3 espacios", no creo que puedas correr el scroll hacia abajo si no tienes los datos suficientes, si no quieres que se vean los 0 yo los excluiría mediante la consulta.
El Locate no debería ejecutarte ningún procedimiento que tengas por ahi a no ser que lo coloques en un evento que lance el locate creo que lanza el beforescroll y el afterscroll aunque no estoy muy seguro en estos momentos.... |
Cita:
|
Cita:
¿Entonces podría usar scroll para que apuntara a la primera posición? |
una solucion "cutre" sería que vieses cuantos ceros te deja por arriba cuando haces el locate una vez hecho esto ya sabes que el locate tiene que ser de la primera posición + esa cantidad, de esa manera el cursor a lo mejor se te colocaría en otra posición pero el primero del dbgrid sería el 1. Una vez hecho esto puedes hacer otro locate consecutivo y buscar el uno de nuevo... no se si me he explicado :D
pruebalo y me cuentas ;) |
Cita:
Lo probé y me temo que no funciona :( |
¿Qué mas formas hay de apuntar a la posición 1 que no sea mediante locate?
|
con el next y el prior te puedes mover por el dataset en este caso tu query.
Con esto te lo localiza pero sigues viendo los ceros, luego puedes ajustar haciendo más next para que desaparezcan (tb es un poco cutre :p ) |
También funciona , pero sigo teniendo el problema de que inserta los campos de otra tabla :(. No se si realizar un nuevo query y llamarlo de otra forma... :confused:
|
pero ese procedimiento que hablas de insercion en otras tablas donde lo tienes ubicado??? en el evento beforescroll o afterscroll como te dije más arriba?? :confused: porque si es asi siempre se te va a ejecutar ya que nos estamos moviendo por el dataset.
No se si alguien del foro sabría decirte como mover el scroll del dbgrid sin mover el cursor del dataset. |
Es que estoy con una aplicación ya creada y además de no saber si va con beforescroll o afterscroll, no sé exactamente lo que son... :(
|
uhmmmm bueno para que tengas una idea, todos los objetos/componentes suelen tener eventos, por ejemplo un boton tiene el evento onClick, OnEnter, OnExit... etc y muchos más eventos y esos eventos se pueden programar. Cuando un boton se le hace Click se lanza el evento onClick con lo que se ejecuta lo que hay dentro de ese procedimiento.
Bueno ya que sabemos que los objetos/componentes tienen asociados eventos, te puedo decir que el objeto TQuery o tambien el Ttable tienen tambien eventos entre los que se encuentran beforescroll y afterscroll. BeforeScroll se activa justo antes de que el cursor se mueva en la consulta o tabla, y AfterScroll se ejecuta inmediatamente después. Por eso te decimos que a lo mejor la aplicación que estas manejando tiene definido que inserte campos de otra tabla en uno de estos dos eventos.... En fin, no se si me he explicado... |
Creo que está entendido. Gracias!!
El form con el que estoy tiene un objeto TQuery añadido, y en sus eventos ni AfterScroll ni BeforeScroll tienen nada. Lo único que se me ocurre es crear un, por ejemplo, consulta : TQuery; independiente del resto que se utiliza la aplicación... Pudiera ser una solución? :confused: |
Hombre lo más lógico para ver por donde pasa tu aplicación (o aplicación heredada :D ) es "debuguearla" es decir ponerte un punto de control y darle al play ;) asi podrás ver que pasa cuando el locate empieza a buscar, efectivamente puedes crearte otra tquery pero si me estas diciendo que los dos eventos (afterscroll y beforescroll) no tienen nada pues te va a dar igual.... lo mejor es que "debuguees"
|
Efectivamente, aunque haga otro TQuery no vale para nada. Me da error...
He "debugueeado" como dices y la verdad, no sé en que momento llama al procedimiento que añade el resto de registros que no hay en la BD actual. Voy a seguir investigando, ya contaré qué tal me ha ido... |
La franja horaria es GMT +2. Ahora son las 07:08:07. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi