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)
-   -   consulta SQL-DbGrid y registro por defecto (https://www.clubdelphi.com/foros/showthread.php?t=3877)

Giniromero 23-09-2003 11:18:55

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

judoboy 23-09-2003 16:42:50

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;

Donde el primer campo que muestro en el DBGrid es el codigo_cliente que es a su vez la clave primaria de mi tabla cliente.

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

Giniromero 23-09-2003 17:24:33

¿Como es eso del resultado de la búsqueda?

Si es posible, ¿podrías explicarme un poco más el proceso?

Muchas gracias.

Virginia

Viet 23-09-2003 17:44:26

No puedes poner DataSet.First ?

judoboy 23-09-2003 18:23:34

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.

Giniromero 24-09-2003 09:38:56

Hola a todos,

Cita:

judoboy ---
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.
Hasta aquí, perfecto, es lo que yo hago, el problema es sólo al tratar de cambiar el cliente del que quiero que me muestre mi aplicación la información. Esto es, si de la consulta sólo obtengo UN registro, no me deja marcarlo como el registro por defecto.

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

judoboy 24-09-2003 10:13:47

Muchos clientes cuantos son?

Giniromero 24-09-2003 11:34:50

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

Giniromero 24-09-2003 13:23:40

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


La franja horaria es GMT +2. Ahora son las 00:15:32.

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