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)
-   -   necesito ayuda urgente con dbgrid !!!! (https://www.clubdelphi.com/foros/showthread.php?t=26813)

EfrainSanmiguel 04-11-2005 04:01:14

necesito ayuda urgente con dbgrid !!!!
 
http://www.geocities.com/efrain_sanmiguel/index.html

sino logran ver la imagen aqui esta la imagen del grid para que se hagan una idea http://www.geocities.com/efrain_sanmiguel/index.html

Tabla Mezclas
-------------
Codigo (String)
CodigoPT (String) LookupKeyfild: CODIGO Lookupresult: CODIGO "De la tabla Productos Terminados"
MP (String)
CodigoMP (String) LookupKeyfild: CODIGO Lookupresult: CODIGO "De la tabla Materia Prima"
Cantiad (Float)
Costo (Float)
Porcentaje (Float) campo calculado
TotalCantidad (Float) campo calculado
TotalCosto (Float) campo calculado
TotalPorcen (Float) campo calculado

-------------------------------------------------------------

Nose si lo estoy haciendo bien o mal asi que Mi pregunta es la siguiente::confused::confused::confused:

1.- Como hago para que al oprimir el boton "Agregar" se active el DBCombo1 = CodigoPT
2.- La celda "Codigo" del grid debe de tener el mismo valor automaticamente que el DBCombo1
3.- El campo porcentaje debe representar el % deacuerdo a las cantidades que se vayan ingresando
4.- Los campos TotalCantidad - TotalCosto - TotalPorcentaje deben de calcularse automaticamente
5.- Al guardar y luego al consultar el codigo debe de mostrar la mezcla que se hizo en el grid

NOTA:El resto de los campos de la tabla Mezclas no se ven en el grid porque estan visible = False

vtdeleon 04-11-2005 04:09:40

Saludos

Guia de Estilo

Click Aqui

fefe13 06-11-2005 13:02:43

eso
 
Lo que esta claro es que el dcombobox es una mierda,usa el combo normal,que es el que funciona.

vtdeleon 06-11-2005 16:08:27

Saludos
Cita:

Empezado por fefe13
Lo que esta claro es que el dcombobox es una mierda,usa el combo normal,que es el que funciona.

En qué te basas para decir que es una mierda?? DBCombobox tiene su funcion. La mayoria creé que este componente deberia mostrar los registros en su item (lo cual hace el DBloolupCombobox), pero no. El DBcombobox se usa (o lo uso) para cambiar el valor de un registro por cualquier valor que se haya aderido o puesto en su propiedad items.

Héctor Randolph 07-11-2005 22:24:19

Hola amigo EfrainSanmiguel.

Seguramente que si te podemos ayudarte en el foro a resolver tu duda, pero es la tercera vez que leo este hilo y aún no termino de entender que es lo que necesitas.

Si te parece bien lo resolvemos por partes.

Cita:

Empezado por EfrainSanMiguel
1.- Como hago para que al oprimir el boton "Agregar" se active el DBCombo1 = CodigoPT

2.- La celda "Codigo" del grid debe de tener el mismo valor automaticamente que el DBCombo1

- Supongo que el botón agregar es para añadir un registro en el grid.

- Supongo que quieres ligar el DBCombo1 para que se sincronize con el valor de la celda Codigo.

Puedes utilizar el evento OnNewRecord de la tabla que está ligada con el DBGrid.

Código Delphi [-]
procedure Form1.TablaNewRecord(DataSet: TDataSet);
begin
 DataSet.FiledByName('Codigo').Value:=OtraTabla.FiledByName('Codigo').Value;
end;

Claro que tienes que poner los nombres adecuados de las tablas y los campos.

De esta forma sólo tienes que poner en el evento OnClick del botón esto:

Código Delphi [-]
procedure Form1.Botton1Click(Sender: TObject);
begin
 Tabla.Insert;
end;

Después de insertar, la celda Código tendrá automáticamente el valor que aparece en el DBCombo1.

---------------------------------------------------
Responde aqui mismo si te sirve o no la respuesta asi será más fácil que alguien te ayude; después resolvemos los demás puntos.

Sé que tienes algo de prisa pero debes darle seguimiento a cada hilo que abres, no iniciar más hilos con el mismo tema.

Un saludo.

EfrainSanmiguel 08-11-2005 00:07:02

Gracias Por Responder
 
Hola muchisimas gracias por ayudarme, lo que pasa es que abri varios hilos porque me dijeron que no estaba bien el titulo que le habia puesto al hilo... y en los otros habian quedado en el olvido ya nadie me respondia... pero en fin.

veras, lo que me pusiste no me sirve te explico que es lo que necesito:

1.- cuando yo oprimo el boton "agregar" el lo que hace es seguir insertando filas en el grid, pero yo lo que quiero es que si yo agrego por ejemplo 2 lineas en el grid.. cuando le de al boton "agregar" me vuelva a poner el grid en limpio me entiendes.....

nose si quieras que te envie el sistema para que lo puedas ver???:confused::confused:

ContraVeneno 08-11-2005 00:29:10

Cita:

Empezado por EfrainSanmiguel
nose si quieras que te envie el sistema para que lo puedas ver???:confused::confused:

No se si ya leíste la guía de estilo.... :confused:

Cita:

Empezado por EfrainSanmiguel
yo agrego por ejemplo 2 lineas en el grid

¿No sería mejor agrega una línea y con esa línea ya sea agregarlos datos en caso de que se vaya a grabar o cancelar la acción en case de que no se grabe nada?
Mi punto es, que no entiendo porque agregar dos líneas (Registros) vacías

Cita:

Empezado por EfrainSanmiguel
me entiendes.....

Yo no :confused:

EfrainSanmiguel 08-11-2005 03:22:28

hola disculpa por no haberme explicado bien, no es que cada dos lineas graba... no.... el graba cada liena que yo agrego al grid al presionar la flecha hacia abajo del teclado el la graba ... lo de las dos lineas fue solo un ejemplo, un decir.

el punto era lo que le seguia...:rolleyes::rolleyes::rolleyes::rolleyes::rolleyes::rolleyes::rolleyes::rolleyes::rolleyes:

Héctor Randolph 08-11-2005 06:28:37

Ok. vamos con más calma.

Creo que empezamos mal, primero vamos a plantear lo que realmente quieres hacer y después vemos que componentes de Delphi utilizamos para resolverlo.

Lo que tú tienes es una relación maestro-detalle.

En tu caso la tabla maestro es Mezclas, esta tabla tiene un campo código de producto terminado (el cual esta ligado con otra tabla). Después de fijar el código de un producto terminado, deseas agregar en la tabla detalle varias materias primas cada cual con su cantidad, costo, porcentaje.

Al momento de agregar las materias primas, deseas obtener en la tabla mezclas la suma de todos los costos, las cantidades y los porcentajes.

¿Es correcto?

EfrainSanmiguel 08-11-2005 13:48:54

exactamente, eso es exactamente lo que necesito hacer veras yo tengo una tabla de productor terminados y tengo otra de materias primas, entonces en la tabla mezcla necesito lo siguiente:

seleccionar del combo el codigo de un producto terminado "x" y asignarle a traves del grid varias materias primas con sus cantidades, costos, y porcentajes....... y que quede grabado eso, en pocas palabras eso seria como la receta (lo que se necesita para poder producir ese producto terminado)..

guao, muchas gracias de verdad de ante mano.... ojala y me puedan ayudar..!:confused::confused:

Héctor Randolph 08-11-2005 19:20:56

1.- Primero que nada establece la relación Maestro-Detalle entre las tablas Mezclas/Materias_Primas.

Esto lo puedes hacer con las propiedades MasterSource y MasterFields del DataSet Detalle (Materias_Primas)

En este punto te aconsejo que veas un demo que trae delphi que se llama MastApp búscalo en la carpeta de 'Demos/DB'.

2.- Para seleccionar el producto terminado en un ComboBox agrega un DBLookUpComboBox y crea una relación entre la tabla Mezclas/Productos terminados (no es necesario agregar un campo LookUp en la tabla de Mezclas).

3.- Para que cada celda nueva en el DBGrid tenga la clave del producto terminado utiliza el evento OnNewRecord como te lo indique anteriormente

4.- Para calcular los totales puedes utilizar una sentencia SQL en un query por ejemplo:
Código SQL [-]
  SELECT SUM(costos) FROM materias_primas WHERE   codigo_producto=:mi_codigo AND codigo_mezcla=:mi_mezcla;

Debes actualizar las sumas después de guardar cambios o borrar algún registro de la tabla de materias primas, es decir en los eventos OnPost y OnDelete.

Bueno, creo que son muchas cosas a la vez, intenta con esto por lo pronto.

Un saludo.

EfrainSanmiguel 08-11-2005 21:51:02

Ok. voy a seguir esos pasos, pero una duda?

porque una relacion maestro delatalle entre Mezclas y materias primas?
no debe ser entre Mezcla-Productos Terminados??

porque el codigo de la mezcla debe ser el mismo del codigo del producto terminado.... y en el grid es donde debo cargar las materias primas que van a conformar el producto terminado "x".....:confused:

Héctor Randolph 10-11-2005 04:38:11

En realidad necesitas otra tabla para la relación Mezclas-Materias_primas
porque es una relación uno a muchos (1 <-> n).

A cada mezcla se le puede asociar más de una materia prima.

Crea una tabla que se llame partidas_mezclas o algo asi, en ella los atributos son:
el código de la mezcla, y el código de la materia prima,el costo, la cantidad, etc.
Esta nueva tabla es la que estará asociada con el DBGrid.

La relación maestro-detalle es entre Mezclas/Partidas_Mezclas

Por otra parte, la relación Mezclas-Productos terminados es uno a uno (1<->1).

A cada mezcla le corresponde un sólo producto terminado y viceversa.

Esta no es relación maestro-detalle, en este caso puedes utilizar un DBComboLookUp
-------------------------------------------------
Crea esta nueva tabla y seguimos en contacto.

EfrainSanmiguel 12-11-2005 15:09:58

Hola, ya realice todos los pasos que me dijistes, tengo un detallito :confused:necesito que el campo codigo del DBgrid sea igual al valor del DBLookupComboBox

es decir: MisTablas.Mezclas.FieldByName('Codigo').Value := DBlookupComboBox1.Text;
------------------------------------------------------------------------

hice lo que me dijistes del OnewRecord en la tabla que esta ligada al DBgrid pero cuando guarda, lo que hace es poner en el campo codigo del DBgrid el mismo valor del codigo de la materia prima que seleccione en el grid.


este es el codigo que tengo:

procedure TMisTablas.PartidasNewRecord(DataSet: TDataSet);
begin
MisTablas.PartidasCODIGO.Value:= MisTablas.MezclasCodigo.Value;
end;
------------------------------------------------------------------------
este codigo lo uso para guardar:

procedure TFrmMezclas.ItemsGridEnter(Sender: TObject);
begin
if (DSMezclas.DataSet.State = dsEdit) or (DSMezclas.DataSet.State = dsInsert) then
begin
DSMezclas.DataSet.Post;
DSMezclas.DataSet.Refresh;
end;
end;

vtdeleon 12-11-2005 15:52:25

Saludos

EfrainSanmiguel, apuesto que no has leido la guia de estilo!!!!
Has posteado en este hilo 6 mensaje, y aun no he visto la primera etiqueta utilizada por tí.
Creo que ya es hora de utilizarlas

EfrainSanmiguel 14-11-2005 23:02:01

disculpa!!
 
a ok. no sabia pero con referente al tema pudieras ayudarme!:(

Héctor Randolph 15-11-2005 08:57:26

Disculpa pero no entiendo bien esta parte.

Código Delphi [-]
procedure TFrmMezclas.ItemsGridEnter(Sender: TObject);
begin
  if (DSMezclas.DataSet.State = dsEdit) or (DSMezclas.DataSet.State = dsInsert) then
  begin
     DSMezclas.DataSet.Post;
     DSMezclas.DataSet.Refresh;
  end;
end;

¿Exactamente en que momento activas este código, en el evento OnEnter del DBGrid?

Si es así, ¿Porqué en ese evento? :confused:

De hecho yo te sugiero que la tabla mezclas permanezca en estado de inserción/edición mientras agregas los items, si haces un Refresh sobre la tabla posiblemente recorrerás el puntero de registros y tu información no será correcta.

Saludos

EfrainSanmiguel 15-11-2005 16:39:58

Exacto
 
Si de hecho es en ese evento onEnter donde tengo ese codigo.

pero como pongo la tabla mezclas todo el tiempo en estado de insercion o edicion, donde pondria ese codigo?:confused:

ContraVeneno 15-11-2005 17:19:51

Cita:

Empezado por HECTOR RANDOLPH
Si es así, ¿Porqué en ese evento? :confused:

yo tampoco entendí porque :confused::confused:

EfrainSanmiguel 14-12-2005 17:22:40

listo
 
gracias a todos los que colaboraron.... les agradesco en verdad... ya solucione mi problema... :p


La franja horaria es GMT +2. Ahora son las 09:49:52.

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