Diferencia entre revisiones de «TpAUX CAMPO CONSTRAINT unit»

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
 
(No se muestran 5 ediciones intermedias del mismo usuario)
Línea 4: Línea 4:
=[[QUEESESTO/IDENTIDAD|Identidad]]=
=[[QUEESESTO/IDENTIDAD|Identidad]]=
[[Category:MANUAL/PROGRAMADOR]]
[[Category:MANUAL/PROGRAMADOR]]
[[Category:AUXILIARES]]
[[Category:PRG AUXILIARES]]
*Ancestro: [[TComponent]]
*Ancestro: [[TComponent]]
*Carpeta: C:\DevelopPrx\pPRAGMA
*Carpeta: C:\DevelopPrx\pPRAGMA
Línea 67: Línea 67:
   end;
   end;
</pre>
</pre>
=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):
<pre>
prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.DataSet := Self;
prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Clase  := ppTableName;
prxADOClientDM.pAUX_CAMPO_CONSTRAINT_unit.Campo  := aFieldName;
</pre>
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:
<pre>
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;
</pre>
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:
<pre>
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;
</pre>
Además, la constricción puede aplicar a campos de tipo fecha ([[TprxDBEditDateTime]].Seleccionar):
<pre>
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;
</pre>
=Usos=
*[[TprxADODataSetEdit]].OnEnterFieldXtd.
*[[TprxADODataSetEdit]].OnExitFieldXtd.
*[[TprxDBComboBox]].CargarElementos.
*[[TprxDBEditDateTime]].Seleccionar.
*[[TprxScrollBox]].ApplyArray.

Revisión actual - 19:52 22 may 2025

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