Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-09-2008
Almd Almd is offline
Miembro
 
Registrado: ago 2008
Posts: 27
Poder: 0
Almd Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 02-09-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
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.

Código Delphi [-]
      
with stringgrid1 do
begin 
 for J:= 0 to RowCount - 1 do
  if cells[1,J] = 1 then
  begin 
   col:=1;
   row:=J; 
  end; 
end;
Responder Con Cita
  #3  
Antiguo 02-09-2008
Almd Almd is offline
Miembro
 
Registrado: ago 2008
Posts: 27
Poder: 0
Almd Va por buen camino
Es un TQuery si es a eso a lo que te refieres. Este es el código:

Código Delphi [-]
procedure NombreTabla.MostrarCamposTabla;
begin
With Query do
Begin
Close;
Sql.Clear;
Sql.Add ('SELECT * FROM TABLAUSUARIOS WHERE NOMBRETABLA = 'TABLAX' ORDER BY POSICION');
try
Open;
Except
End;
end;
end;

Una vez tengo la select, entiendo que después de Open debo introducir el código, ¿el que me has puesto valdría?
Responder Con Cita
  #4  
Antiguo 02-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
tal como te dice tcp_ip, echale un vistazo en la ayuda de delphi al metodo locate. saludos.
Responder Con Cita
  #5  
Antiguo 02-09-2008
Almd Almd is offline
Miembro
 
Registrado: ago 2008
Posts: 27
Poder: 0
Almd Va por buen camino
Perdona si, es en un dbgrid.

Echaré un vistazo al método locate. Gracias.
Responder Con Cita
  #6  
Antiguo 02-09-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #7  
Antiguo 02-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 02-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 02-09-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por coso Ver Mensaje
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?
Claro, si es así estoy de acuerdo , pero esta parte es la que me ha hecho ver de la forma que explique:

Cita:
Empezado por Almd Ver Mensaje
.................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.
Ahora, si fuera así mostrar solo el primero que tenga 0 o 1, creo que en la consulta se debería usar un distinct sobre el campo posición y luego seguir con lo que explica coso en el anterior mensaje.

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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #10  
Antiguo 02-09-2008
Almd Almd is offline
Miembro
 
Registrado: ago 2008
Posts: 27
Poder: 0
Almd Va por buen camino
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.
Responder Con Cita
  #11  
Antiguo 02-09-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
Pues entonces es con el locate, esta claro

Código Delphi [-]

TuQuery.Locate('posicion',1,[]);
Responder Con Cita
  #12  
Antiguo 02-09-2008
Almd Almd is offline
Miembro
 
Registrado: ago 2008
Posts: 27
Poder: 0
Almd Va por buen camino
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?
Responder Con Cita
  #13  
Antiguo 02-09-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
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....
Responder Con Cita
  #14  
Antiguo 02-09-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cita:
el locate creo que lanza el beforescroll y el afterscroll aunque no estoy muy seguro en estos momentos
si, y el datachange tambien del dataset asociado.
Responder Con Cita
  #15  
Antiguo 03-09-2008
Almd Almd is offline
Miembro
 
Registrado: ago 2008
Posts: 27
Poder: 0
Almd Va por buen camino
Cita:
Empezado por tcp_ip_es Ver Mensaje
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.
Tengo los 0's suficientes para que hiciera el scroll, por eso lo preguntaba, pero tal vez me esté complicando demasiado je je.
¿Entonces podría usar scroll para que apuntara a la primera posición?
Responder Con Cita
  #16  
Antiguo 03-09-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
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

Código Delphi [-]
query.locate('posicion',1+Cantidaddecerosqueahoraveoporencima,[]);
query.locate('posicion',1,[]);
pruebalo y me cuentas
Responder Con Cita
  #17  
Antiguo 03-09-2008
Almd Almd is offline
Miembro
 
Registrado: ago 2008
Posts: 27
Poder: 0
Almd Va por buen camino
Cita:
Empezado por tcp_ip_es Ver Mensaje
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

Código Delphi [-]
query.locate('posicion',1+Cantidaddecerosqueahoraveoporencima,[]);
query.locate('posicion',1,[]);
pruebalo y me cuentas

Lo probé y me temo que no funciona
Responder Con Cita
  #18  
Antiguo 03-09-2008
Almd Almd is offline
Miembro
 
Registrado: ago 2008
Posts: 27
Poder: 0
Almd Va por buen camino
¿Qué mas formas hay de apuntar a la posición 1 que no sea mediante locate?
Responder Con Cita
  #19  
Antiguo 03-09-2008
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
con el next y el prior te puedes mover por el dataset en este caso tu query.

Código Delphi [-]
q1.open;
q1.first;
while not(q1.eof) and (q1.fieldbyname('posicion').value <> 1) do
begin
q1.next;
end;

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 )
Responder Con Cita
  #20  
Antiguo 03-09-2008
Almd Almd is offline
Miembro
 
Registrado: ago 2008
Posts: 27
Poder: 0
Almd Va por buen camino
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...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Apuntar a un tipo genérico Guillermo80 Varios 4 09-03-2008 11:48:22
¿Dominio (web) apuntar a wordpresblog? JXJ Varios 2 04-03-2008 17:20:40
Apuntar a una fila en una rejilla TheWolfMan Varios 1 19-11-2005 17:09:06
Insertar en una posición felixgo Conexión con bases de datos 4 04-10-2005 19:21:37
Apuntar una propiedad de un componente a otra de otro componente Majo Varios 10 24-03-2004 19:46:39


La franja horaria es GMT +2. Ahora son las 05:02:12.


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
Copyright 1996-2007 Club Delphi