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)
-   -   Operaciones Matematicas dentro de un DBGRID (https://www.clubdelphi.com/foros/showthread.php?t=48647)

enecumene 01-10-2007 03:10:47

Operaciones Matematicas dentro de un DBGRID
 
Hola Compañeros del foro, regreso con una duda, tengo un DBgrid que contiene los campos, ref, articulo, cantidad, costo, itbis, valor, al ingresar un articulo al dbgrid le doy un focuscontrol al campo cantidad para que el usuario ingrese la cantidad a ingresar pues bien aqui viene el asunto cuando el usuario luego de ingresar la cantidad tiene que ingresar el costo del articulo, quisiera que calculara los valores de itbis y valor automaticamente, se puede? estoy trabajando con access+zeos+clientdataset.

Saludos

Caral 01-10-2007 03:19:37

Hola
Tienes que hacer una consulta sql a la tabla en cuestión, con eso te saldrá el dato que necesitas, nada tiene que ver en esto el dbgrid.
Saludos

enecumene 01-10-2007 03:24:59

Hola Caral, gracias por tu sugerencia, lo entiendo perfectamente, pero lo que no sabria hacer es en que evento tendria que poner, por ejemplo si el usuario esta en el campo o columna costo e ingrese el valor y que al darle enter o tab me haga los calculos. espero no ser puntilloso:D.

Saludos.

Caral 01-10-2007 03:47:44

Hola
Es un poco difícil sin ver la pantalla indicarte en que evento colocar el calculo.
Yo así sin ver, lo colocaría en el evento OnExit de la celda del dbgrid, así, cuanto salga de este hará el calculo, si se equivoco por cualquier razón, siempre puede rectificar.
Otra forma seria por medio de un boton, bueno yo uso mucho este sistema, asi las personas que usan el programa primero ven lo que hicieron y si esta bien, hacen lo que sea necesario.
Espero te guie un poco.
Saludos

enecumene 01-10-2007 03:53:06

Vale, Gracias Caral, ire probando a ver, cualquier cosa te comento.

Saludos.

Caral 01-10-2007 03:56:22

Hola
Con gusto, si se te hace dificil, me pasas el programa con la base de datos y lo vemos.
Lo que me parece curioso es que uses zeos con access, por que no ADO.
Saludos

enecumene 01-10-2007 04:05:14

Cita:

Empezado por Caral (Mensaje 235167)
Hola
Lo que me parece curioso es que uses zeos con access, por que no ADO.
Saludos

Lo estoy conectando con ODBC y pense como los componentes BDE estan obsoletos quise usar Zeos que por lo que he visto son excelentes.

Saludos.

Caral 01-10-2007 04:09:35

Hola
Zeos= muy bueno, rapido y efectivo.
Conectar por odbc=:rolleyes:
No te compliques con access, ADO, eso sin dudar, pruebalo, veras la diferencia.
Yo he hecho pruebas de rapidez y ado, es mas rapido, por ser directo, Pruebalo, es interesante, ademas se aprende.
Zeos para mysql, esta muy bien.
Bueno, es solo mi opinion.
Saludos

Lepe 01-10-2007 12:33:59

Puedes usar el evento OnCalcFields del dataset origen, allí haces las multiplicaciones y estableces el valor de los campos involucrados.

Ten en cuenta que al principio las cajas pueden tener el valor cero (en caso de divisiones) para no obtener excepciones.

Saludos

FGarcia 01-10-2007 18:06:36

Hola!

Si me equivoco me lo dicen:

1. ADO es nativo para conectar con Access y MS SQLServer. Usa directamente el motor de datos JET de MS. Luego entonces No tiene caso usar ninguna otra cosa para este tipo de base de datos.

2. Zeos tengo entendido -porque no los uso- es una suite de componentes para acceso a datos y esta especialmente diseñado para MySQL. Luego entonces es el mismo caso de ADO.

enecumene 01-10-2007 18:13:30

Cita:

Empezado por FGarcia (Mensaje 235306)
Hola!

Si me equivoco me lo dicen:

1. ADO es nativo para conectar con Access y MS SQLServer. Usa directamente el motor de datos JET de MS. Luego entonces No tiene caso usar ninguna otra cosa para este tipo de base de datos.

.

en eso tienes razon.

Cita:

Empezado por FGarcia (Mensaje 235306)
2. Zeos tengo entendido -porque no los uso- es una suite de componentes para acceso a datos y esta especialmente diseñado para MySQL. Luego entonces es el mismo caso de ADO.

Zeos no solo esta diseñado especialmente para Mysql tambien sirve para cualquier tipo de base de datos incluso firebird.

Saludos

enecumene 02-10-2007 04:05:07

Bueno estoy haciendo los calculos de esta manera pero no me muestra los resultados aqui el codigo:

Código Delphi [-]
procedure TFEntrada.Edit8KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then begin
if Edit6.Text = '' then begin
     ShowMessage('Item no existe');
     end else begin
ZInsertar.Close;
ZInsertar.SQL.Clear;
ZInsertar.SQL.Add('Select * from articulos');
ZInsertar.SQL.Add(' where ref = :cod');
ZInsertar.ParamByName('cod').Value:=Edit6.Text;
ZInsertar.Open;
 if not ZInsertar.IsEmpty then begin
  ZTemp.FieldByName('ref').Value:=ZInsertar.Fields[0].Value;
  ZTemp.FieldByName('articulo').Value:=ZInsertar.Fields[2].Value;
  ZTemp.FieldByName('cantidad').Value:=strtoint(Edit7.Text);
  ZTemp.FieldByName('costo').Value:=StrToFloat(Edit8.Text);
   ZTemp.FieldByName('valor').Value:=(strtoint(Edit7.Text))*(strtofloat(Edit8.Text));
  end else
      ShowMessage('Item no existe');
   end;
  end;
end;

que estoy haciendo mal?

Saludos.

eduarcol 02-10-2007 04:31:16

que resultados debe mostrarte??

en que momento editas o insertas en zTemp

donde debe mostrarte estos resultados??

Caral 02-10-2007 04:33:01

Hola
No se muy bien lo que estas haciendo pero hay varias cosas.
No se por que usar int, cuando lo optimo es usas float.
Para mi el error podria estar aqui:
Código Delphi [-]
 ZTemp.FieldByName('valor').Value:= FloatToStr(StrToFloat(Edit7.Text) * StrToFloat(Edit8.Text));
Pruebalo nada se pierde.
Yo lo hago asi en algun programa y me funciona, en tal caso cambia el float, pero sigue el proceso.
Saludos

enecumene 06-10-2007 02:01:43

Disculpa Caral por la Tardanza estaba en otros asuntos, volviendo al tema, mira hice tu sugerencia y aun asi no me muestra el resultado en el campo Valor en el DBgrid, ejemplo puse cantidad(integer) = 5 multiplicado por costo(double) = 185.00 se supone que valor(double) debe ser 925.00 y deberia de mostrarmelo en el dbgriid y eso es lo que no hace.??

Código Delphi [-]
procedure TFEntrada.Edit9KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then begin
if Edit6.Text = '' then begin
     ShowMessage('Item no existe');
     end else begin
ZInsertar.Close;
ZInsertar.SQL.Clear;
ZInsertar.SQL.Add('Select * from articulos');
ZInsertar.SQL.Add(' where ref = :cod');
ZInsertar.ParamByName('cod').Value:=Edit6.Text;
ZInsertar.Open;
 if not ZInsertar.IsEmpty then begin
  ZTemp.FieldByName('ref').Value:=ZInsertar.Fields[0].Value;
  ZTemp.FieldByName('articulo').Value:=ZInsertar.Fields[2].Value;
  ZTemp.FieldByName('cantidad').Value:=strtoint(Edit7.Text);
  ZTemp.FieldByName('valor').Value:= FloatToStr(StrToFloat(Edit7.Text) * StrToFloat(Edit9.Text));
  end else
      ShowMessage('Item no existe');
   end;
  end;
end;

Saludos.

Caral 06-10-2007 14:34:51

Hola
Aqui muestras un ZInsertar, que ve en la tabla y un ZTemp que hace la comparacion.
Donde esta el ZQuery que muestra el DBGrid.?, cual es ?
A ver si lo entiendo mejor.
Saludos

basti 06-10-2007 16:00:02

ZTemp ¿es una consulta o una tabla?. ¿El grid está enlazado a ZTemp o a otro dataset?.

enecumene 06-10-2007 17:41:11

Hola Caral, ZInsertar(Query) es la tabla de articulos donde voy a sacar los datos el mismo y ZTemp es una tabla temporal donde pongo los detalles de los articulos que luego se van a grabar en otra tabla y se eliminan al momento de grabar. Ztemp esta enlazado al DBGrid.



Saludos

eduarcol 06-10-2007 18:21:16

La verdad a simple vista no le veo la falla, prueba colocar un breakpoint en la asignacion y verifica el valor de los edit...

cuentanos que resulto

enecumene 06-10-2007 18:40:47

Cita:

La verdad a simple vista no le veo la falla, prueba colocar un breakpoint en la asignacion y verifica el valor de los edit...

cuentanos que resulto
Eduarcol, No sabia a que te referias pero aqui va:

http://img124.imageshack.us/img124/2...akpointly2.jpg


La franja horaria es GMT +2. Ahora son las 10:24:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi