TpAUX CAMPO CONSTRAINT unit

De Pragma Wiki
Ir a la navegación Ir a la búsqueda

Descripción

El objeto TpAUX_CAMPO_CONSTRAINT_unit (Constricciones de campos) procesa los auxiliares de tipo CONSTRAINT, ver detalles en DEV AUXILIARES/CONSTRAINT.

Identidad

  • Ancestro: TComponent
  • Carpeta: C:\DevelopPrx\pPRAGMA
  • Archivo: pAUX_CAMPO_CONSTRAINT_unit.pas

Declaración

type
  TpAUX_CAMPO_CONSTRAINT_unit = class(TComponent)
  private
    FDataSet: TDataSet;
    FClase: String;
    FCampo: String;

    FQuery: TprxADOQuery;
    FSQL_COMANDO: TStringList;
    FSQL_COMANDO_SELECT: TStringList;
    FSQL_MENSAJE: TStringList;
    FPrepared: Boolean;
    FTipo: String;
    FEsSQL: Boolean;
    FTag_Porcentaje100: Boolean;

    FSolucion: String;
    FItems: TStringList;
    FMinimo: Variant;
    FMaximo: Variant;
    FMensaje: String;
  protected
    property    SQL_COMANDO: TStringList read FSQL_COMANDO write FSQL_COMANDO;
    property    SQL_MENSAJE: TStringList read FSQL_MENSAJE write FSQL_MENSAJE;

    property    EsSQL: Boolean read FEsSQL;
    property    Tag_Porcentaje100: Boolean read FTag_Porcentaje100;
    property    Minimo: Variant read FMinimo;
    property    Maximo: Variant read FMaximo;
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;

    function    EsTipo_ENUMERACION: Boolean;
    function    EsTipo_FILTRO: Boolean;
    function    EsTipo_LIMITE: Boolean;

    function    Exists: Boolean;
    function    Prepare: String;
    function    Validate(var aMsg: String): Boolean;

    property    DataSet: TDataSet read FDataSet write FDataSet;
    property    Clase: String read FClase write FClase;
    property    Campo: String read FCampo write FCampo;

    property    Query: TprxADOQuery read FQuery write FQuery;
    property    Prepared: Boolean read FPrepared;

    property    Solucion: String read FSolucion;
    property    Items: TStringList read FItems;
    property    Mensaje: String read FMensaje;

    property    SQL_COMANDO_SELECT: TStringList read FSQL_COMANDO_SELECT write FSQL_COMANDO_SELECT;
  published
  end;

Implementación

function Exists: Boolean

Retorna true si existe constraint para esta clase y campo.

function Prepare: String

Prepara la constricción del campo.

function Validate(var aMsg: String): Boolean

Valida el valor del campo contra el constraint, retorna True si valida correctamente y False si no valida. Los constraints de tipo "filtro" no se validan...

Modo de uso

El auxiliar se usa de la siguiente manera, primero la inicialización (ejemplo de TprxADODataSetEdit.OnExitFieldXtd):

prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.DataSet := Self;
prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Clase   := ppTableName;
prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Campo   := aFieldName;

Primero asignamos las propiedades:

  • Dataset que se asigna al mismo componente que está llamando al auxiliar.
  • Clase se inicializa al nombre de la tabla del componente que está llamando al auxiliar.
  • Campo se inicializa al nombre del campo cuyo valor queremos asignar.

Posteriormente evaluamos la constricción:

if prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Exists then
   begin
   prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Prepare;

   if prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.EsTipo_FILTRO = False then
      begin
      if (Trim(FieldByName(aFieldName).AsString) <> '') and (FieldByName(aFieldName).IsNull = False) then
          Result := prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Validate(vMsg);
      end
   else
      begin
      vConstraint    := prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Solucion;
      vConstraintMSG := prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Mensaje;
      end;
   end;

El Exists habilita la evaluación de la constricción.

Distinto es el comportamiento cuando la constricción corresponde a una enumeración, en este caso es el control de edición TprxDBComboBox que carga los ítems de la enumeración:

if prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Prepared then
   begin
   if prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.EsTipo_ENUMERACION then
      begin
      // Cargamos los ítems del constraint, y posiblemente los ítems del combo...

      ConstraintItems.Clear;

      for I := 0 to prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.SQL_COMANDO_SELECT.Count - 1 do
          ConstraintItems.Add(prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.SQL_COMANDO_SELECT[I]);

      for I := 0 to prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Items.Count - 1 do
          Items.Add(prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Items[I]);
      end;
   end;

Además, la constricción puede aplicar a campos de tipo fecha (TprxDBEditDateTime.Seleccionar):

if prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Prepared then
   begin
   if prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.EsTipo_FILTRO then
      vConstraint := prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Solucion;
   end;

Usos