Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   mover indicador de un dbgrid a un registro especifico (https://www.clubdelphi.com/foros/showthread.php?t=49994)

thelibmx 05-11-2007 21:58:12

mover indicador de un dbgrid a un registro especifico
 
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,

Código Delphi [-]
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:
Código Delphi [-]
Table1.IndexName:='ElQueProceda';
Table1.FindKey([LoQueSEa]);



Un Saludo

basti 05-11-2007 22:05:12

O si no tienes índice por el campo
Código Delphi [-]
  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
Código Delphi [-]
//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

Posicionar cursor en un componente de bd
 
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))+')');[FONT=verdana,geneva,lucida,'lucida grande',arial,helvetica,sans-serif]
end;
DBGrid1.Refresh;

Espero que te sirva de ayuda.
[/font]

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,
Código Delphi [-]
 
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:


La franja horaria es GMT +2. Ahora son las 03:34:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi