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)
-   -   Calculos en una tabla (https://www.clubdelphi.com/foros/showthread.php?t=8939)

silviodp 06-04-2004 22:30:14

Calculos en una tabla
 
En mi aplicación hice en el onClick de un botón este procedimiento para calcular AMORTIZACION, VALOR ACUMULADO Y VALOR RESIDUAL de un determinado Bien de Uso, pero mi problema es que cuando calculo ésto (también tengo un boton que me Graba los datos haciendo un Post en la tabla) y hago click en el boton Grabar no me graba estos valores en la Tabla, la verdad es que no se porque. Alguien puede ayudarme abajo está el código que hice para estos calculos.
Estoy usando Delphi 5, y tablas Paradox 7.
Gracias, saludos.-

Código:

procedure TForm10.CalcularClick(Sender: TObject); (Calculo AMORTIZACION, V. ACUMULADO, V. RESIDUAL)
Var
d,m,Aini,Afin,difa:Word;
n,a,precio:Variant;
amort,Vacumulado,Vresidual:Integer;

begin
//Calculo la AMORTIZACION

ModeloDatos.TblMueble.Active:=True;

n:=ModeloDatos.TblMueble.FieldValues['Rubro']; //lo que tengo en el campo 'Rubro' de TblMueble.-
a:=ModeloDatos.TblRubro.Lookup('CODRUB',n,'Añoamortizacion'); //años de Amortización.-

precio:=ModeloDatos.TblMueble.FieldValues['Preccompra'];
Amort:=precio/a;
ModeloDatos.TblMueble.FieldValues['Amortizacion']:=Amort;

//Calculo VALOR ACUMULADO.-

Decodedate(Date,Afin,m,d); //Decodifica una fecha en año, mes, día.-
Decodedate(ModeloDatos.TblMueble.FieldValues['Fechcomp'],Aini,m,d);
difa:=Afin-Aini;
Vacumulado:=Amort*difa;

//Calculo VALOR RESIDUAL.-

Vresidual:=precio-Vacumulado;
ModeloDatos.TblMueble.FieldValues['Vresidual']:=Vresidual;
end;

guillotmarc 06-04-2004 23:04:23

Hola.

¿ No te falta un ModeloDatos.TblMueble.Post ?

Saludos.

silviodp 06-04-2004 23:52:25

Calculo en una tabla
 
Probé también con eso pero no anduvo tampoco, no graba y cuendo hago click en el boton grabar (que tengo) me da error, 'que la tabla no está en Edit o insert mode'

__cadetill 07-04-2004 00:14:19

A parte del Post comentado por Marc, también te falta un Edit

jachguate 07-04-2004 01:38:10

Resumiendo... el orden debiera ser algo como:

Código:

  begin
    tabla1.first;
    while not tabla1.eof do
    begin
      Tabla1.Edit;
      tabla1campo1.value := 'NuevoValor';
      Tabla1.Post;
      Tabla1.Next;
    end;
  end;

Hasta luego.

;)

silviodp 07-04-2004 15:20:57

Calculo en una tabla
 
He probado con los ustedes me corrigieron pero no hay caso tampoco me funciona.
Les explico mejor:

Yo tengo un form con un DBGrid (relacionado con la tabla TblMueble) y cuatro botones, AGREGAR, MODIFICAR, ELIMINAR y CERRAR.
En el boton AGREGAR yo hago un Append y abro otra ventana con un form que me permite cargar los datos de un determinado bien de uso en DBEdits que están relacionados con la tabla Mueble, es aquí donde tengo un botón CALCULAR que me hace el procedimiento que describí anteriormente.
Esta nueva ventana (donde cargo los datos) tiene dos botones más: ACEPTAR (que graba toda información introducida en los DBEdits mediante un Post) y otro CANCELAR (que cancela todo mediante un Cancel).
Los datos que introduzcon mediante el teclado (Código, Descripción, Fecha de compra, etc.) cuando hago click en ACEPTAR los graba en la tabla, pero los datos que calculo con CALCULAR no se graban cuando ejecuto ACEPTAR.
Sin enbargo la tabla TblMueble sí está en modo de Inserción.
Lo mismo ocurre con el botón MODIFICAR, me hace un Edit de la tabla y me abre el mismo formulario de introducción de datos, me deja modificar los demás valores y me deja guardar los cambios pero los datos calculados no los graba. Es decir CALCULAR los obtiene pero ACEPTAR no los graba en la tabla.
Y como antes la tabla sí está en modo de edición ya que esto lo hizo el botón MODIFICAR.
Igual probé ponerlo en el código de CALCULAR (Edit... Post) pero tampoco funciona.

No sé si alguien puede darme una idea más de como solucionarlo, o de como hacerlo para que funcione, aunque sea de otra forma.
Muchas gracias, espero haber sido claro, saludos.

Silvio.-

__cadetill 07-04-2004 15:36:30

Quizás el problema esté por el

ModeloDatos.TblMueble.Active:=True;

Sabiendo que la tabla está en inserción/edición, esta linea sobraría. Quizás (y digo sólo quizás) provoque un post y por eso no se estén guardando los datos. No lo he probado, pero podrías mirar de comentar la linea a ver

silviodp 07-04-2004 16:42:45

Calculo en una tabla
 
Cadetill:
sí esa línea estaba de más, pero en realidad el problema era que esas columnas las tenía definidas como Calculadas, por eso no me tomaba los datos, no sé por que pero ese era el problema porque ahora anda bien.
Muchas gracias, saludos.-

Silvio.

__cadetill 07-04-2004 18:58:09

Cita:

Empezado por silviodp
...pero en realidad el problema era que esas columnas las tenía definidas como Calculadas, por eso no me tomaba los datos...

Hombre, haber empezado por ahí!!!! :D

Sólo decirte que los campos calculados se han de calcular en el evento OnCalcFields del dataset asociado


La franja horaria es GMT +2. Ahora son las 09:15:07.

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