TpAUX CAMPO CONSTRAINT unit
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
- TprxADODataSetEdit.OnEnterFieldXtd.
- TprxADODataSetEdit.OnExitFieldXtd.
- TprxDBComboBox.CargarElementos.
- TprxDBEditDateTime.Seleccionar.
- TprxScrollBox.ApplyArray.