PDA

Ver la Versión Completa : Relacion Master Detail


simon
18-06-2004, 15:05:08
Un cordial saludo para todos........

tengo un problemita y es el siguiente:

Tengo una Forma de Pedido de Articulos en el cual utilizo dos tablas una de Pedios y Articulos.

en la primera uso codigoPedigo,Fecha y CodigoCliente, Tambien tengo un DBGrid en lasado al DataSource de la segunda tabla(Articulos) la cual tengo una relacion Master, Detail entre la dos Tablas.

Lo que quiero es q cuando digite el codigo del Articulo en el DBGrib me traiga la Descripcion y el Precio del Articulo. Estoy utilizando la siguiente rutina



procedure TFrm_Pedidos.Tbl_PedidoCodigo_ArticuloChange(Sender: TField);
var ls_CodigoArticulo:string;
var ls_codigoPedido:real;
begin
ls_CodigoArticulo := Tbl_Pedido.FieldbyName('Codigo_Articulo').asstring;
ls_CodigoPedido := Tbl_Pedido.FieldbyName('Precio_Unitario_Articulo').Index;
Qry_Articulo.Close;
with qry_Articulo do begin
with sql do begin
clear;
add ('select * from Articulos ');
add ('select * from Pedidos ');
add ('where Codigo_Articulo = ');
add ('where Precio_Unitario_Articulo = ');
add (''''+ls_CodigoArticulo+'''');
open;
if recordcount = 0 then
begin
ShowMessage('El Codigo no Existe ');
Abort;
end;
if Dts_Articulo.State in [dsinsert,dsedit] then
Tbl_Pedido.FieldByName('Pescripcion_Articulo').Asstring := Qry_Articulo.FieldByname('Descripcion_Articulo').Value;
// Tbl_Pedido.FieldByName('Precio_Unitario_Articulo').Asstring := Qry_Articulo.FieldByname('Precio_Unitario_Articulo').Value;
end;
end;
end;

delphi.com.ar
18-06-2004, 15:31:06
No entiendo cual es tu problema, pero algo seguro no está bien, estas agregando dos Sql´s línea a línea... Antes de hacer el Open, evalúa el valor que ha quedado en el Sql del Query, verás que no es correcto.

Saludos!

simon
18-06-2004, 15:53:07
gracias federico por su sugerencia....

dejamer ver si me doy a entender un poco mas, en una forma tengo dos tabla la cual estan relacionada los nombre son (Pedidos y Articulos).

estoy utilizando la de Articulo en un DBGrid, pero lo que esta enlasado al DBGrid es el DataSouce del Articulo lo que quiero es digitar el codigo del articulo en el DBGrid y este me traiga la Descripcion y el Precio del Articulo de la Tabla Articulo.

me gustaria saber que codigo tu utilizaria para que te de ese resultado.

graciassssssss

jachguate
18-06-2004, 19:11:00
Hola.

Si lo que queres meter es el detalle del pedido, estas equivocando el camino.

Te hará falta una tabla para almacenar el detalle, que tenga los campos necesarios para relacionarse con el pedido por un lado, y con el artículo por otro.

Hecho esto, podes usar campos lookup para traer la descripción y precio del artículo. Si te interesa almacenar los precios (o descripciones) históricos, entonces esta tabla también debe tener un campo para almacenarlo, y podes valerte del evento OnChange del código de artículo para asignar su precio en ese instante.

Espero haberme explicado y aclararte un poco las cosas.

Hasta luego.

;)

simon
18-06-2004, 19:48:00
mucha gracias, Por la aclaracion, uno de los problema era que tenia el DBGrid enlasado al DataSource del Articulo y tiene que ser al DataSource Pedido. Cuando digito en el DBGrid el codigo me trae la descripcion del articulo pero no me trae el precio.

usando el siguiente codgio

procedure TFrm_Pedidos.Tbl_PedidoCodigo_ArticuloChange(Sender: TField);
var ls_CodigoArticulo:string;
begin
ls_CodigoArticulo := Tbl_Pedido.FieldbyName('Codigo_Articulo').asstring;
Qry_Articulo.Close;
with qry_Articulo do begin
with sql do begin
clear;
add ('select * from Articulos ');
add ('where Codigo_Articulo = ');
add (''''+ls_CodigoArticulo+'''');
open;
if recordcount = 0 then
begin
ShowMessage('El Codigo no Existe ');
Abort;
end;
if Dts_Pedido.State in [dsinsert,dsedit] then
Tbl_Pedido.FieldByName('Descripcion_Articulo').Asstring := Qry_Articulo.FieldByname('Descripcion_Articulo').Value;
end;
end;
end;

si a esta rutina le falta alguna lineas o modificacion la pueden agregar.
en realidad tengo dos tabla la de pedido la cual funciona como encabezado y la de articulos esta funciona como detalle, pero tenia un problemiata
mil gracias nuevamente

simon
18-06-2004, 20:09:52
nuevamente gracias por la sugerencia.
esa parte ya esta resuelta solo tuve que agregarle la ultima linea y decirle que me traiga el precio del articulo.

pero tengo un nuevo preblema como estoy usando dos tablas encabezado y detalle o Articulos y Pedidos, en un boton que tengo para insertar registro cuando hago un click en el boton me limpia los campos del encabezado o en la tabla Pedido, pero en el DBGrid me incerta una linea y no me limpa el DBGrid.

espero me endiandan.

Jvilomar
18-06-2004, 21:26:03
hola.. dejame darte una sugerencia...

yo tengo una aplicacion parecida... de facturacion y lo que hago es lo siguiente..

Tengo una tTable llamada tFactura y otra tDetalleFactura, en cuanto a la parte de los articulos existe otra llamada tArticulos aunque en este paso no se si prefieras usar un tQuery pero para el fin es lo mismo.....

Pues lo que hago es lo siguiente en tiempo diseño en la tabla tDetalleFactura por medio del field editor creo los campos del tipo tlookup, en este caso, serian: Precio,Descripcion,etc. sino sabes como abrir el field editor me lo dejas saber para explicartelo con mas calma.

esto te ahorra codigo y al mismo tiempo los puedes utilizar para hacer calculos como importe y otras cosas como eso...

Pruebalo a ver como te va......

simon
21-06-2004, 14:25:35
muy buen dia..... disculpa por no aberte condetesdo con mas tiempor pero solo estoy usando este medio de informacion de lunes a viernes por que lo uso en el area de mi trabajo y no trabajo los sabados ni los domingos.

gracias por tu sugerencia, pero no soy muy experto programando sabe que los estudiantes de informatica siempre buscamos algo mas y estoy interesado en aprender la programacion delphi.

como degi mas ariba no tengo mucha experiencia programando por tal tason uso un DBGrid enlasado a un datasource llamada detallepedio, esta era la tabla que me hacia flata, solo me queda porbarla.

una pregunta, estoy usando el codigo de cliente por tal razon tengo una tabla llamada cliente, la pregunta es la siguinte:

hay alguna forma de que cuando digite el codigo de una cliente en un DBEdit me cature el Nombre y el TElefono de ese cliente y lo presente en dos DBEdit.

espero que me comprenda y mil graciasssss

miguel_fr
21-06-2004, 15:25:49
No quiero ser ortiva ni hacerme el moderador ni nada por el estilo, pero muchachos este hilo se me hace que no va por estos lados, creo que tendria que ir en SQL o Conexion a BD (no pega mucho aqui)
Si tratamos de ordenar nosotros esto se hace un requilombo
PD: yo soy nuevo y tambien cometo errores, es mas talves me este equivocando al decir esto

Jvilomar
21-06-2004, 16:03:37
Hola Simon, entiendo perfectamente tu pregunta.....

mira para poderte explicar mejor aqui esta mi direccion de correo es jvilomar@hotmail.com para que me agregues si cuentas con messenger....

en cuanto a Miguel Tiene Razon... este hilo deberia ir por los lados de BD...