Ir al contenido


Foto

Duda Onvalidate


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

#1 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 27 enero 2009 - 01:49

Bueno mas que una duda es un problemin estoy haciendo esto:



delphi
  1. var
  2.   Guarda : TFieldNotifyEvent;
  3. begin
  4.     S := 'Cualquier cosa';
  5.     Guarda := CDSDet_MovPRODUCTO.OnValidate;
  6.     CDSDet_MovPRODUCTO.OnValidate := nil;
  7.     CDSDet_MovPRODUCTO.AsString := S;
  8.     CDSDet_MovPRODUCTO.OnValidate := Guarda;
  9. end;




en el evento onvalidate de un campo de un clientdataset, necesito modificar el mismo valor de ese campo, considerando ciertas condiciones mias. la situacion es que al asignar el valor de S al campo simplemente no lo asigna.

PD. El codigo esta resumido pero basicamente ahi es donde tengo el fallo.
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 27 enero 2009 - 03:10

Saludos.

Mira este ejemplo:


delphi
  1. type
  2.   TForm1 = class(TForm)
  3.     DBGrid1: TDBGrid;
  4.     DataSource1: TDataSource;
  5.     Table1: TTable;
  6.     Table1EmpNo: TIntegerField;
  7.     Table1LastName: TStringField;
  8.     Table1FirstName: TStringField;
  9.     Table1PhoneExt: TStringField;
  10.     Table1HireDate: TDateTimeField;
  11.     Table1Salary: TFloatField;
  12.     Button1: TButton;
  13.     procedure Table1SalaryValidate(Sender: TField);
  14.     procedure Button1Click(Sender: TObject);
  15.     procedure FormCreate(Sender: TObject);
  16.   private
  17.     { Private declarations }
  18.   public
  19.     { Public declarations }
  20.   end;
  21.  
  22. procedure TForm1.Table1SalaryValidate(Sender: TField);
  23. begin
  24.   if Sender.Value > 50000 then
  25.     ShowMessage('por encima');
  26. end;
  27.  
  28. procedure TForm1.Button1Click(Sender: TObject);
  29. begin
  30.   Table1Salary.OnValidate := Nil;
  31.   table1.Edit;
  32.   Table1Salary.Value := 60000;
  33.   Table1.Post;
  34.   Table1Salary.OnValidate := Table1SalaryValidate;
  35. end;
  36.  
  37. procedure TForm1.FormCreate(Sender: TObject);
  38. begin
  39.   table1.Open;
  40. end;



El componente TTable esta conectado a DBDemos y su TableName es employee.db.

Fíjate que no utilice ninguna variable sino que le pase el nombre del método en cuestión.
  • 0

#3 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 27 enero 2009 - 04:09

Gracias por responder, asi como lo planteas funciona bien, pero yo necesito hacer la modificacion del campo validado dentro del evento de validacion es ahi donde no me deja hacerlo.

Saludos.
  • 0

#4 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 28 enero 2009 - 06:59

Saludos.

Creo que con ese evento no podrás realizar dichos cambios.

Occurs just before the data is written to the record buffer.
Description
Write an OnValidate event handler to validate changes made to the data in the field, just before the data is written to the current record buffer. The EditMask property allows validation of the data on a character by character basis while it is being entered by the user. OnValidate allows an application to validate the data as a whole.


Como te daras cuenta, este evento se dispara cuando se esta modificando la data, para realizar los cambios despues de validados tendras que valerte del evento AfterEdit combinado con OnValidate.
  • 0

#5 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 28 enero 2009 - 10:01

Gracias Rolphy creo que has dado en el punto, creo que de estar tanto tiempo metido tratando de corregir los errores de Quickreport ya no doy mas.. Saludos.
  • 0