FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
consulta SQL-DbGrid y registro por defecto
Hola a todos,
Estoy desarrollando una aplicación con Delphi 6 e InterBase 7. Las tablas de IB las manipulo con IBDataset desde Delphi. Todos los IBDataset están en un DataModule. He creado un form, desde el cual puedo buscar un cliente en concreto, en 'Tbclientes', por apellidos, nombre, o nº de cliente, (según se seleccione en un radioGroup). Utilizo un TEdit para tomar los criterios de búsqueda, y pasárselos al código de la propiedad selectSQL del TbClientes, que los gestiones usando "LIKE" El filtrado me lo hace bien, según lo que le pido, me muestra sólo los registros que cumplen los parámetros de búsqueda que le inserto, dentro de un DBGrid conectado a mi TbClientes. Si selecciono cualquiera de los registros resultado de la consulta, se selecciona automáticamente como el registro actual de la tabla, mostrándome en el mainform, toda la información relativa al cliente seleccionado. El problema es que el registro que por defecto viene marcado en azul, de entre los resultados obtenidos, no se considera el seleccionado por defecto, y si lo quiero seleccionar, tengo primero que marcar otro registro, para luego marcar este primero. Esto no sería gran problema, si no fuera por que cuando el resultado de la consulta es un sólo registro, no tengo la opción de marcar otro de los registros para volver a marcar el primero, y por tanto, no tengo manera de seleccionarlo. CONCLUSIÓN Necesito que me ayude alguien sobre como hacer para poder marcar estos registros, o mejor, como hacer para que se considere como, el registro seleccionado por defecto, el que se muestra en azul, dentro del DBGrid, sin necesidad de señalarlo. Muchas gracias Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
#2
|
|||
|
|||
Vamos a ver te comento yo hago creo que lo mismo que tu, pero el DBGrid donde muestro los resultados no lo conecto a mi tabla de clientes, si no que lo conecto al resultado de la búsqueda, y luego para seleccionar que me muestre el cliente en el formulario principal de clientes hago lo siguiente:
Código:
UModulodatos.CLIENTE.Dataset. Locate('CODIGO_CLIENTE',DBGResultados.Fields[0].Value,[]); FrmResultadoBusquedaClientes.ModalResult:=MrOk; Otra cosa yo dejo varios Edits en blanco para la búsqueda, CIF,NOMBRE,CODIGO. Y cuando ejecuto la búsqueda miro si el Edit esta vacío o no para añadir ese campo en la búsqueda es decir para filtrar más la tabla. Espero que te sirva. Si no te aclaras te puedo detallar el proceso con más detalle |
#3
|
|||
|
|||
¿Como es eso del resultado de la búsqueda?
Si es posible, ¿podrías explicarme un poco más el proceso? Muchas gracias. Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
#4
|
|||
|
|||
No puedes poner DataSet.First ?
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;) |
#5
|
|||
|
|||
Si no quieres hacer nada más prueba con lo que te dice Viet
Te comento yo hago lo siguiente Utilizo una Query y un componente DataSource conectado a la Query, entonces yo los datos los muestro en el DBGrid que tengo en otro formulario, y en el evento OnShow de este último formulario cargo los datos en el DBGrid con los que tiene el DataSource. |
#6
|
|||
|
|||
Hola a todos,
Cita:
Usando: code:-------------------------------------------------------------------------------- UModulodatos.CLIENTE.Dataset. Locate('CODIGO_CLIENTE',DBGResultados.Fields[0].Value,[]); FrmResultadoBusquedaClientes.ModalResult:=MrOk; -------------------------------------------------------------------------------- Tal como me sugirió judoboy, me soluciona cuando tengo pocos registros, pero si estoy buscando por nº de cliente, y por ejemplo, quiero buscar al cliente 1, como hay muchos que comiencen con 1, me devuelve muchos registros la consulta, y al hacer el locate, se me eterniza la busqueda. Saludos Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
#7
|
|||
|
|||
Muchos clientes cuantos son?
|
#8
|
|||
|
|||
Tengo en total, 10727 registros en ese tabla, exactamente no puedo decirte cuantos registros me devuelve si le pongo como parámetro de busqueda un único nº de un sólo dígito, pero son muchos los que pueden comenzar por 1.
¿por qué?, ¿se te ocurre algo? Gracias Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
#9
|
|||
|
|||
hola a todos,
y a todos gracias... creo que lo he solucionado. A continuación explico como, por si alguien lo necesita. 1) Lo primero, le pido que me filtre la tabla por el usuario en el que estamos, de modo que el nº de registros que me devuelve la consulta, es 1. 2) Después considera si la busqueda la hacemos por nº de cliente, o apellidos, (usando un radiogroup), de modo que: A) Si quiero buscar por el nº de cliente, busca exactamente el nº que le insertemos: where NUMALU = EditBuscar B) Si se selecciona buscar por nombre o por apellidos, es cuando uso el like. En cualquiera de los casos, salgo de la aplicación pulsando un botón OK, cuyo código es: FrmDModule.TbClientes.Locate('NUMALU', (FrmDModule.TbClientes.Fields[0].Value), []); ModalResult := mrOK; Tal como me aconsejo judoboy. De modo que antes de salir, me situa en el cliente que tengo seleccionado, en el dbgrid. Lo dicho, muchas gracias a todos. Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
|
|
|