PDA

Ver la Versión Completa : dbgrid


davidgaldo
20-02-2004, 12:44:04
Hola a todos, llevo mucho tiempo intentando hacer esto pero no lo doy hecho.
En un dbgrid tengo la información de una tabla:
CODIGO-NOMBRE_PRODUCTO-CANTIDAD-.....-.....-....
y en otra tabla tengo :
CODIGO-NOMBRE_PRODUCTO

pues bien, quiero que cuando estoy metiendo el dato correspondiente al código en el dbgrid, al pulsar el tabulador y que se mueva a la casilla de NOMBRE_PRODUCTO, este se rellene con el nombre automáticamente, el
pb es que no sé como hacerlo, podeis ayudarme?

andres1569
20-02-2004, 12:57:06
Hola:

Entiendo que NOMBRE_Producto es un campo LookUp ¿No? puesto que escribirlo de nuevo en la tabla sería tener información duplicada (para eso está el CODIGO). Si es así, o bien tienes el campo NOMBRE_PRODUCTO como LookUp y te sale automáticamente si estableces los nexos necesarios con la tabla Productos (la que sirve de LookUp), o bien defines ese campo como Calculated, y en el OnCalcFields haces la busqueda a "a mano" en la tabla de productos (ten en cuenta que esta opción puede ser algo lenta si tiene AutoCalcFields a TRU, pues repetirá muchas veces la búsqueda).

En caso de que el campo NOMBRE_PRODUCTO fuera un campo persistente dentro de la tabla (cosa no recomendable porque como dije supone duplicar información y facilitar alguna inconsistencia), tendrías que hacer esa búsqueda en el evento OnChange del campo CODIGO y ahí asignar el valor encontrado.

Fíjate que todas las operaciones que propongo son a nivel de tabla, o DataSet, independientemente de que edites desde un DBGrid o desde otro control DBAware.

Un saludo

davidgaldo
20-02-2004, 13:01:52
si, la información es redundante, aparece el código y el nombre, me lo han pedido así, bueno entonces, lo que no me queda claro, es el mejor método a usar, y además, como identifico el campo que estoy insertando?

andres1569
20-02-2004, 13:10:42
Hola:

En ese caso, sobre el campo CODIGO, en su evento OnChange(*) haces algo así:

procedure CampoCodigoChange ;
begin

// Buscar en tabla de Productos (mediante SQL, o con los métodos
// Locate o FindKey) el nombre del produto que se acaba de introducir.

// Obtenido el valor de NOMBRE_PRODUCTO, lo asignas al campo
// correspondiente:

Tabla.FieldByName('NOMBRE_PRODUCTO').AsString := ResultadoBusqueda;

end;

(*) Si has definido los campos de la tabla como persistentes, de modo que los puedas ver en diseño mediante el editor que lleva el TTable, verás ese evento OnChange en cada campo.

Espero que te sirva esta explicación por encima ...

davidgaldo
20-02-2004, 15:48:56
gracias por todo. Te lo agradezco.