PDA

Ver la Versión Completa : mover indicador de un dbgrid a un registro especifico


thelibmx
05-11-2007, 21:58:12
Hola amigos tengo una pequeña duda espero me puedan ayudar,
tengo un DBGrid1 conectado a una tabla(ttable) y veran lo que hago con este codigo es que en una caja de texto tengo un numero, entonces con el while recorro toda la tabla hasta que el numero se iguala con el que tengo en la caja de texto,


while (not formconecciones.tablesemanas.eof) and not (a_grid=semanacaja.text) do
begin
formconecciones.tablesemanas.next;
a_grid:=formconecciones.tablesemanas.FieldByName('numero_semana').AsString;
end;


hago esto para que el indicador o apuntador o la flechita que tiene el grid se posicione en el renglon o fila donde esta situado ese valor.

mi pregunta es, hay una manera mas facil de hacerlo, es decir en ves de recorrer la tabla hasta el fin, hay una manera de poner una linea de codigo que no haga el barrido y sea como un select,? por decir, haber si me explico con esto, digamos, seleccioname el registro que se encuentra en la tabla x donde el registro "numero de semana" es iguala a "caja de texto" . espero explicarme bien, es decir lo unico que quiero es que el indicador que tiene el grid o la flechita se posicione en el mismo registro que coincide con la caja de texto espero haberme explicado bien, si no por favor pregunten por que cre que ni yo me entendi jeje :confused:

marcoszorrilla
05-11-2007, 22:01:22
Si tienes un índice sobre el campo que pretendes buscar:

Table1.IndexName:='ElQueProceda';
Table1.FindKey([LoQueSEa]);



Un Saludo

basti
05-11-2007, 22:05:12
O si no tienes índice por el campo

Table1.Locate('nombreCampo', valorBuscado, []);

thelibmx
06-11-2007, 00:10:19
Les agradesco su ayuda amigos, lo que yo quiero hacer es el equivalente de esta instruccion pero para el grid osea que el indicador del grid se posicione en donde coincide con esas clausulas o ese query

creo que el equivalente de lo que quiero hacer es esto

//formconecciones.Querycatalogosemanas.sql.add('select * from catalogo_semanas where (fecha_inicio='+formatdatetime('yyyy-mm-dd',strtodate(Editagregarfecha.text))+' or fecha_fin='+formatdatetime('yyyy-mm-dd',strtodate(Editagregarfecha.text))+')');

quiero que en el grid me señale o indique el resultado de ese query, como podria adaptarlo?

agradesco su ayuda

jlchiodo
06-11-2007, 02:58:39
Como te indicaran en otro msg.:

con el Locate('nombre_cpo', var, [TLocateOptions]) el cursor de la grilla (grid)
se posiciona solo en el registro que cumpla la condición buscada.

Pero si lo que necesitas es ver el resultado de un conjunto de registros que cumplan con determindas condiciones, luego de efectuar el "filtro" en tu Table1, debes "refrescar" tu grilla:

with formconecciones.Querycatalogosemanas do
begin
sql.add('select * from catalogo_semanas where (fecha_inicio='+formatdatetime('yyyy-mm-dd',strtodate(Editagregarfecha.text))+' or fecha_fin='+formatdatetime('yyyy-mm-dd',strtodate(Editagregarfecha.text))+')');
end;
DBGrid1.Refresh;

Espero que te sirva de ayuda.

thelibmx
06-11-2007, 03:30:10
:confused:ok, haber para entender un poco mas, si el locate hace lo que yo busco, podrias ayudarme un poco con la sintaxis, creo q ese seria mi problema ahorita quedaria algo asi supongo , a menos que me corrijas,

Table1.Locate('nombreCampo', valorBuscado, []);

Table1.Locate('numero_semana',(fecha_inicio='+formatdatetime('yyyy-mm-dd',strtodate(Editagregarfecha.text))+' or fecha_fin='+formatdatetime('yyyy-mm-dd',strtodate(Editagregarfecha.text))+')', []);



mi duda es esa, como quedaria la sintaxys ocupando locate si quisiera hacer lo que hace el query.

jlchiodo
09-11-2007, 14:32:41
Bien:
A ver si esto te ayuda:
**************************************************
1. Table1.Locate('nombreCampo', valorBuscado, []);

2. Table1.Locate('numero_semana',(fecha_inicio='+formatdatetime('yyyy-mm-dd',strtodate(Editagregarfecha.text))+' or fecha_fin='+formatdatetime('yyyy-mm-dd',strtodate(Editagregarfecha.text))+')', []);

mi duda es esa, como quedaria la sintaxys ocupando locate si quisiera hacer lo que hace el query.
**********************************************
1. Con el "Locate()", ubicas los registros.
La sintaxis correcta es la primera, pero no te olvides de los opciones (TLocateOptions), ya que si buscas un valor tipo cadena con

"loCaseInsensitive" : puedes ubicar un valor prescindiendo de si está guardado con caracteres en mayusculas o minusculas.

"loPartialKey": Puedes ubicar un valor 'parcial' de la cadena de caracteres, donde la funcion te devuelve un set de registros donde se cumpla el criterio de la busqueda.

Saludos,

thelibmx
09-11-2007, 18:52:51
mmm creo que no me he explicado bien, estoy iniciando y no conozco mucho aun, asi que espero tengas un poco de paciencia, veras creo que estamos de acuerdo en que es la primera opcion la sintaxis correcta, mi duda es por ejemplo yo en mi grid manejo un rango de fechas, una fecha de inicio y una fecha fin, digamos el grid se muetra asi:

numero x | fecha inicio | fecha fin | descripcion | otros campos|
1 | 1/01/2007 | 07/01/2007 | fecha x de tal| x
2 | 09/02/2007 | 25/02/2007 | fecha x de tal | x
3 | 20/06/2007 | 28/06/2007 | fecha x de tal | x
... | .... | ..... | ..... | ...
... | .... | ..... | ..... | ...
50 | 20/09/2007 | 29/09/2007 | fecha x de tal | x

entonces yo tengo en un tedit una fecha asi 15/02/2007 esa fecha esta dentro del rango que se encuentra en el registro 2, es decir fecha inicio 09/02/2007 a fecha fin 25/02/2007, yo quiero que el indicador o apuntador del grid seleccione ese registro si la opcion correcta es ocupar locate, como podria ser la sintaxis para que me de ese resultado :confused: