Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-10-2007
chona chona is offline
Miembro
 
Registrado: abr 2004
Posts: 57
Poder: 21
chona Va por buen camino
Question Posición fija en DBGrid

Hola amigos, estoy con delphi 5, en una pantalla muestro un dbgrid que está enlazado con un query que se actualiza cada un segundo por medio de un timer, la consulta es la siguiente. Si selecciono un registro del dbgrid (por ejempro el tercero) no lo puedo mantenerlo seleccionado porque se vuelve a ejecutar el query (dentro del timer) y me vuelve al primer registro del dbgrid.
Cómo podría mantenerlo seleccinado?
Gracias.
Responder Con Cita
  #2  
Antiguo 29-10-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Suponiendo que tengamos una clave única que lo identifique unívocamente, podrías buscar dicho registro con un Locate, despues de cada actualización, sino lo veo difícil pues cada actualización haría que este se encontrara en lugares distintos y además sería un registro nuevo, puesto que cada activación del cursor arrojaría un conjunto de datos nuevo.


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 29-10-2007
chona chona is offline
Miembro
 
Registrado: abr 2004
Posts: 57
Poder: 21
chona Va por buen camino
que parámetros toma Locate
Responder Con Cita
  #4  
Antiguo 29-10-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Sólo añadir, que aunque con el Locate (también podrías utilizar un TBookmark) logres posicionarte en el mismo registro, eso no significa que ese registro se encuentre en el mismo lugar respecto de la fila inicial que se mostraba en el DBGrid en ese momento, es decir, si por ejemplo el primer registro que se muestra en el DBGrid en un momento dado es el nº 15 (por poner un ejemplo) (ya que se hizo Scroll con el ratón o con la barra de desplazamiento), y el registro seleccionado es el nº 19 (por lo tanto, la 5ª posición en el DBGrid empezando desde arriba), aunque logres volver a posicionar la barra del DBGrid en el registro nº 19 de tu consulta, eso no significa necesariamente que vuelva estar seleccionada en la 5ª línea del Grid.

Además quiero comentarte que creo que actualizar el Query cada segundo me parece un intervalo de tiempo bastante corto.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #5  
Antiguo 29-10-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Para saber más acerca de la función Locate podrías hacer referencia a la propia ayuda del Delphi, aunque pienso que también dependerá de los componentes Query que utilizes.

Cita:
Class TIBCustomDataSet

Syntax
function Locate(const KeyFields: string; var KeyValues: Variant; Options: TLocateOptions): Boolean; override;

Description
Call Locate to search a dataset for a specific record and position the cursor on it.

KeyFields is a string containing a semicolon-delimited list of field names on which to search.

KeyValues is a variant that specifies the values to match in the key fields. If KeyFields lists a single field, KeyValues specifies the value for that field on the desired record. To specify multiple search values, pass a variant array as KeyValues, or construct a variant array on the fly using the VarArrayOf routine.

For example:
Código Delphi [-]
        with CustTable do
  Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);
     TLocateOptions Opts;
  Opts.Clear();
  Opts << loPartialKey;
  Variant locvalues[3];
  locvalues[0] = Variant("Sight Diver");
  locvalues[1] = Variant("P");
  locvalues[2] = Variant("408-431-1000");
  CustTable->Locate("Company;Contact;Phone", VarArrayOf(locvalues, 2), Opts);

Options is a set that optionally specifies additional search latitude when searching on string fields. If Options contains the loCaseInsensitive setting, then Locate ignores case when matching fields. If Options contains the loPartialKey setting, then Locate allows partial-string matching on strings in KeyValues. If Options is an empty set, or if KeyFields does not include any string fields, Options is ignored.

Locate returns true if it finds a matching record, and makes that record the current one. Otherwise Locate returns false.

Locate uses the fastest possible method to locate matching records. If the search fields in KeyFields are indexed and the index is compatible with the specified search options, Locate uses the index. Otherwise Locate creates a filter for the search.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 29-10-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Hola Gluglu:

Yo había pensado en utilizar un BookMark, pero no lo manifesté porque habla de lanzar la consulta cada x tiempo y que yo sepa el BookMark sirve para desplazarse en conjuntos de datos y luego recuperar la posición después de un desplazamiento, yo de hecho lo utilizo mucho, pero creo que en este caso no funcionaría, ya que estamos hablando de una posición de un conjunto de datos que ya no existe.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 29-10-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Yo utilizo también el Bookmark para estos casos y hasta el momento no me ha dado problemas.

Entiendo que el Bookmark es algo que el propio Delphi crea en base a los valores de los campos de cada registro.

Hasta el momento he podido comprobar que a pesar de cerrar y abrir un DataSet, o hacer una nueva consulta, Delphi siempre devuelve el mismo Bookmark para un mismo registro con unos valores si no se han modificado.

Por ello, si el registro sobre el cual vamos a utilizar un Bookmark no es borrado de la base de datos, siempre volveremos al mismo registro con su correspondiente Bookmark.

Lo dicho, en su momento hice pruebas y comprobé este extremo, y a mi me funciona correctamente.
__________________
Piensa siempre en positivo !
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
ubicarme en la posicion 2 de dbgrid dmagui Conexión con bases de datos 1 02-09-2005 23:55:27
Posicion cursor DBGrid en pantalla aram2r OOP 2 10-03-2005 16:11:09
Posicion de un registro en un DBGrid VRO OOP 6 27-10-2004 10:22:57
insertar en una posicion en un dbgrid felixgo Conexión con bases de datos 4 16-06-2004 18:26:06
Leer Archivo .Q43 de Posición Fija es como un Txt FNADALO Varios 1 25-05-2004 17:15:27


La franja horaria es GMT +2. Ahora son las 17:26: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