Ir al contenido


Foto

[RESUELTO] como hacer campo calculado en access


  • Por favor identifícate para responder
60 respuestas en este tema

#1 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 27 agosto 2011 - 10:02

hola amigos, como puedo hacer para cacular dos DBEDIT de una Base de Datos, tengo dos campos llamados diferencia y valor el cual quiero sumarlos para que el resultado me aparezca en total.
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 agosto 2011 - 07:01

Primero habría que saber si Total es un campo calculado o un campo normal de la tabla.


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í:




delphi
  1. procedure TModuloDatos.TuTablaCalcFields(DataSet: TDataSet);
  2. begin
  3. TuTabla.FieldByName('Total').Value :=  TuTabla.FieldByName('Diferencia').Value + TuTabla.FieldByName('Valor').Value;
  4. 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í:




delphi
  1. procedure TModuloDatos.DiferenciaChange(Sender: TField);
  2. begin
  3.   TuTabla.FieldByName('Total').Value :=  TuTabla.FieldByName('Diferencia').Value + TuTabla.FieldByName('Valor').Value;
  4. end;
  5.  
  6.  
  7.  
  8. procedure TModuloDatos.ValorChange(Sender: TField);
  9. begin
  10.   TuTabla.FieldByName('Total').Value :=  TuTabla.FieldByName('Diferencia').Value + TuTabla.FieldByName('Valor').Value;
  11. 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.
  • 0

#3 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 28 agosto 2011 - 10:59

Mira Wilson yo trate de hacerlo asi:




delphi
  1. procedure TAPSR.DBEdit6Change(Sender: TObject);
  2. var v1,v2,s:integer;
  3. begin
  4.     DBEdit6.Text:=DBEdit4.Text + DBEdit5.Text;


Pero no me esta sumando los valores me lo esta concadenando, osea a juntandolos
  • 0

#4 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 28 agosto 2011 - 11:18

y con forma que pusite como no total no es campo calculado, entonce me da este error:


[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'

  • 0

#5 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 28 agosto 2011 - 11:20

Hola


delphi
  1. procedure TAPSR.DBEdit6Change(Sender: TObject);
  2. var v1,v2,s:integer;
  3. begin
  4. DBEdit6.Text := FloatToStr(StrToFloat( DBEdit4.Text) + StrToFloat(DBEdit5.Text));
  5. end;


Saludos

  • 0

#6 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 28 agosto 2011 - 11:23

Caral el campo de mi tabla es de tipo Numero, cual seria la conversion por eso es mi problema.
  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 28 agosto 2011 - 11:26

Hola
Los campos tipo numeros pueden ser integer o float.
El ejemplo que puse es para float, asi seria para integer:


delphi
  1. procedure TAPSR.DBEdit6Change(Sender: TObject);
  2. var v1,v2,s:integer;
  3. begin
  4. DBEdit6.Text := IntToStr(StrToInt( DBEdit4.Text) + StrToInt(DBEdit5.Text));
  5. end;


Saludos
  • 0

#8 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 28 agosto 2011 - 11:28

mira caral mi base datos es en access, pero cuando ejecuto el programa me dicen que los valores integer no es valido para mi campo
  • 0

#9 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 28 agosto 2011 - 11:34

Hola
Si el programa no es muy grande (quitale el EXE) lo pones en un ZIP con la BD y lo reviso con gusto.
Saludos
  • 0

#10 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 agosto 2011 - 11:38

Coloca esto en el evento ONChange de los DBEdit enlazados a  "Diferencia" y  "Valor". Cambia TuTabla por el nombre de tu Dataset.


delphi
  1. TuTabla.FieldByName('Total').Value :=  TuTabla.FieldByName('Diferencia').Value + TuTabla.FieldByName('Valor').Value;




Saludos
  • 0

#11 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 28 agosto 2011 - 11:39

Mira wilson gracias por todo es que yo no utilizo dataset estoy usando DataSource para esto mira mis tablas:


delphi
  1. unit arsaps;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, DB, ADODB, StdCtrls, Mask, DBCtrls, ExtCtrls, jpeg;
  8.  
  9. type
  10.   TAPSR = class(TForm)
  11.     Label9: TLabel;
  12.     Label8: TLabel;
  13.     Label7: TLabel;
  14.     Label6: TLabel;
  15.     Label5: TLabel;
  16.     Label4: TLabel;
  17.     Label3: TLabel;
  18.     Label2: TLabel;
  19.     Label11: TLabel;
  20.     Label10: TLabel;
  21.     Label1: TLabel;
  22.     Image1: TImage;
  23.     DBNavigator1: TDBNavigator;
  24.     ADOTable1: TADOTable;
  25.     ADOTable1id_numero: TAutoIncField;
  26.     ADOTable1Nombre: TWideStringField;
  27.     ADOTable1Carnet: TIntegerField;
  28.     ADOTable1Autorizacin: TIntegerField;
  29.     ADOTable1ValorARS: TIntegerField;
  30.     ADOTable1Dif_Asegurado: TIntegerField;
  31.     ADOTable1ValorTotal: TBCDField;
  32.     ADOTable1Fecha: TDateTimeField;
  33.     Label12: TLabel;
  34.     DBEdit1: TDBEdit;
  35.     DataSource1: TDataSource;
  36.     Label13: TLabel;
  37.     DBEdit2: TDBEdit;
  38.     Label14: TLabel;
  39.     DBEdit3: TDBEdit;
  40.     Label15: TLabel;
  41.     DBEdit4: TDBEdit;
  42.     Label16: TLabel;
  43.     DBEdit5: TDBEdit;
  44.     Label17: TLabel;
  45.     DBEdit6: TDBEdit;
  46.     Label18: TLabel;
  47.     DBEdit7: TDBEdit;
  48.     Label19: TLabel;
  49.     DBEdit8: TDBEdit;
  50.     Label20: TLabel;
  51.     Label21: TLabel;
  52.     procedure DBEdit6Change(Sender: TObject);
  53.   private
  54.     { Private declarations }
  55.   public
  56.     { Public declarations }
  57.   end;
  58.  
  59. var
  60.   APSR: TAPSR;
  61.  
  62. implementation
  63.  
  64. uses principal, Datamodulo;
  65.  
  66. {$R *.dfm}
  67.  
  68. procedure TAPSR.DBEdit6Change(Sender: TObject);
  69.  
  70. begin
  71.   begin
  72.   DBEdit6.Text:=IntToStr( StrToInt(DBEdit4.Text) + StrToInt(DBEdit5.Text));
  73. end;
  74. end;
  75. end.

Archivos adjuntos


  • 0

#12 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 agosto 2011 - 11:43

Mira la propiedad Dataset de tu DataSource, ese es tu Dataset.

Saludos.
  • 0

#13 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 28 agosto 2011 - 11:44

ah okay graicas sorry es que soy novato, dejame probar haber.
  • 0

#14 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 28 agosto 2011 - 11:51

CAral Aqui les dejo el Programa para que lo revisisen. gracias por todos amigos.
  • 0

#15 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 28 agosto 2011 - 12:07

Hola
Quieres un arreglo total, parcial o ideas ?.
Saludos
  • 0

#16 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 28 agosto 2011 - 03:16

(^)Como asi, esta mal hecho el form??  explicame mejor por favor
  • 0

#17 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 28 agosto 2011 - 03:35

Hola
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
  • 0

#18 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 28 agosto 2011 - 03:41

okay entiendo.
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.

  • 0

#19 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 28 agosto 2011 - 03:45

Hola
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
  • 0

#20 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 28 agosto 2011 - 04:02

cual componente quickreport??

  • 0




IP.Board spam blocked by CleanTalk.