
[RESUELTO] como hacer campo calculado en access
#1
Posted 27 August 2011 - 10:02 PM
#2
Posted 28 August 2011 - 07:01 AM
Asumiendo que Diferencia y Valor son campos de la tabla. Si es calculado entonces tienes que manejar el evento OnCalcFields de tu dataset, más o menos así:
procedure TModuloDatos.TuTablaCalcFields(DataSet: TDataSet); begin TuTabla.FieldByName('Total').Value := TuTabla.FieldByName('Diferencia').Value + TuTabla.FieldByName('Valor').Value; end;
En cambio si Total es un campo normal de la tabla, entonces una opción es crear campos persistentes para tu dataset y manejar el evento OnChange de los campos Diferencia y Valor, más o menos así:
procedure TModuloDatos.DiferenciaChange(Sender: TField); begin TuTabla.FieldByName('Total').Value := TuTabla.FieldByName('Diferencia').Value + TuTabla.FieldByName('Valor').Value; end; procedure TModuloDatos.ValorChange(Sender: TField); begin TuTabla.FieldByName('Total').Value := TuTabla.FieldByName('Diferencia').Value + TuTabla.FieldByName('Valor').Value; end;
He colocado dos procedimientos, uno para cada campo con el objetivo de ilustrar el ejemplo, pero podrías escribir solo un procedimiento y compartirlo entre los dos campos.
Saludos.
#3
Posted 28 August 2011 - 10:59 AM
procedure TAPSR.DBEdit6Change(Sender: TObject); var v1,v2,s:integer; begin DBEdit6.Text:=DBEdit4.Text + DBEdit5.Text;
Pero no me esta sumando los valores me lo esta concadenando, osea a juntandolos
#4
Posted 28 August 2011 - 11:18 AM
[Error] arsaps.pas(72): Undeclared identifier: 'ars_aps'
[Error] arsaps.pas(72): Missing operator or semicolon
[Error] arsaps.pas(72): Missing operator or semicolon
[Error] arsaps.pas(72): Missing operator or semicolon
[Error] arsaps.pas(72): Missing operator or semicolon
[Error] arsaps.pas(72): Missing operator or semicolon
[Fatal Error] Farmacia.dpr(9): Could not compile used unit 'arsaps.pas'
#5
Posted 28 August 2011 - 11:20 AM
procedure TAPSR.DBEdit6Change(Sender: TObject); var v1,v2,s:integer; begin DBEdit6.Text := FloatToStr(StrToFloat( DBEdit4.Text) + StrToFloat(DBEdit5.Text)); end;
Saludos
#6
Posted 28 August 2011 - 11:23 AM
#7
Posted 28 August 2011 - 11:26 AM
Los campos tipo numeros pueden ser integer o float.
El ejemplo que puse es para float, asi seria para integer:
procedure TAPSR.DBEdit6Change(Sender: TObject); var v1,v2,s:integer; begin DBEdit6.Text := IntToStr(StrToInt( DBEdit4.Text) + StrToInt(DBEdit5.Text)); end;
Saludos
#8
Posted 28 August 2011 - 11:28 AM
#9
Posted 28 August 2011 - 11:34 AM
Si el programa no es muy grande (quitale el EXE) lo pones en un ZIP con la BD y lo reviso con gusto.
Saludos
#10
Posted 28 August 2011 - 11:38 AM
TuTabla.FieldByName('Total').Value := TuTabla.FieldByName('Diferencia').Value + TuTabla.FieldByName('Valor').Value;
Saludos
#11
Posted 28 August 2011 - 11:39 AM
unit arsaps; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls, Mask, DBCtrls, ExtCtrls, jpeg; type TAPSR = class(TForm) Label9: TLabel; Label8: TLabel; Label7: TLabel; Label6: TLabel; Label5: TLabel; Label4: TLabel; Label3: TLabel; Label2: TLabel; Label11: TLabel; Label10: TLabel; Label1: TLabel; Image1: TImage; DBNavigator1: TDBNavigator; ADOTable1: TADOTable; ADOTable1id_numero: TAutoIncField; ADOTable1Nombre: TWideStringField; ADOTable1Carnet: TIntegerField; ADOTable1Autorizacin: TIntegerField; ADOTable1ValorARS: TIntegerField; ADOTable1Dif_Asegurado: TIntegerField; ADOTable1ValorTotal: TBCDField; ADOTable1Fecha: TDateTimeField; Label12: TLabel; DBEdit1: TDBEdit; DataSource1: TDataSource; Label13: TLabel; DBEdit2: TDBEdit; Label14: TLabel; DBEdit3: TDBEdit; Label15: TLabel; DBEdit4: TDBEdit; Label16: TLabel; DBEdit5: TDBEdit; Label17: TLabel; DBEdit6: TDBEdit; Label18: TLabel; DBEdit7: TDBEdit; Label19: TLabel; DBEdit8: TDBEdit; Label20: TLabel; Label21: TLabel; procedure DBEdit6Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var APSR: TAPSR; implementation uses principal, Datamodulo; {$R *.dfm} procedure TAPSR.DBEdit6Change(Sender: TObject); begin begin DBEdit6.Text:=IntToStr( StrToInt(DBEdit4.Text) + StrToInt(DBEdit5.Text)); end; end; end.
Attached Files
#12
Posted 28 August 2011 - 11:43 AM
Saludos.
#13
Posted 28 August 2011 - 11:44 AM
#14
Posted 28 August 2011 - 11:51 AM
#15
Posted 28 August 2011 - 12:07 PM
Quieres un arreglo total, parcial o ideas ?.
Saludos
#16
Posted 28 August 2011 - 03:16 PM
#17
Posted 28 August 2011 - 03:35 PM
No esta mal el programa es solo una pregunta.
Me gustaria verlo trabajar pero no tengo los componentes que usas.
Creo que seria bueno que le hicieras algunos cambios que te ayudarían a que funcione mejor.
por eso fue la pregunta.
En mi opinion:
1- Eliminar momentáneamente los componentes extra.
2- Hacer la conexion con INI.
3- Crear los forms segun se necesiten.
Para saber que hace y que requieres con mas claridad seria bueno que aparte de quitarle los componentes nos explicaras que es lo que hace el programa.
Saludos
#18
Posted 28 August 2011 - 03:41 PM
el programa registra datos de una factura de medicamento para enviarle la factura a un seguro, en el panel principal tienen todos los seguro para registrar a los clientes que generen una factura.
tengo prooblema con la conexion INI, no se como cornectarlo con BD Acces.
#19
Posted 28 August 2011 - 03:45 PM
Me gustaria que le quites los componentes que no tengo y volverlo a subir.
Es que con esos componentes no lo puedo correr, (luego los vuelves a poner).
Le voy a hacer la conexion por INI ademas de otros cambios, sencillos.
Pero necesito que le quites los componentes y lo subas de nuevo.
Saludos
#20
Posted 28 August 2011 - 04:02 PM