Array
(
)

Encapsulando um Array em TPersistent

Aureliovs
   - 11 abr 2006

Estou desenvolvendo um componente para construção de filtros em consultas SQL, mas voltado para o uso do usuário final.
Bem, uma das partes dele, são os dialetos, ou seja, cada banco de dados, vai ter um dialeto, que vai conter as formas como o banco faz comparação de strings, inteiros, floats, datas etc...
A principio fiz um array que encapsulei dentro de um TPersistent, fiz uma propriedade que acessa este array, e como Public ela funciona, mas como Published não. Sei que o que tenho que fazer é transformar este array em um TPersistent, para que então ele possa se tornar uma propriedade publicada no dialeto. Mas a ficha ainda não caiu, e não sei como vou fazer isso, se alguém tiver uma idéia.
Ai, vai o trecho de código das classes:


Citação:

type
TMemberType = (mtString, mtInteger, mtFloat, mtBoolean, mtDate, mtTime, mtDateTime);
TMemberTypes = set of TMemberType;

TOperationFlag = (ofEqual, ofGreat, ofGreatEqual, ofLeast, ofLeastEqual, ofdifferent, ofLike, ofAutomatic, ofNull, ofNotNull);
TOperationFlags = set of TOperationFlag;

TClausule = class(TPersistent)
private
FOwner: TPersistent;
FClausule : String;
FEnabled : Boolean;
public
constructor Create(AOwner: TComponent); overload;
constructor Create(AOwner: TComponent; Clausule: String;
Enabled: Boolean); overload;
procedure Assign(Source: TPersistent); override;
function GetOwner: TPersistent; override;
published
property Clausule: String read FClausule write FClausule;
property Enabled: Boolean read FEnabled write FEnabled;
end;

TClausules = array [TMemberType, TOperationFlag] of TClausule;

TAvsDefaultDialect = class (TComponent)
private
FClausules: TClausules;
function GetClausule(const MemberType: TMemberType;
Operation: TOperationFlag): TClausule;
procedure SetClausule(const MemberType: TMemberType;
Operation: TOperationFlag; const Value: TClausule);
public
constructor Create(AOwner: TComponent); override;
function BuildClausule(MemberType: TMemberType; Operation: TOperationFlag;
FieldName, Value: String): string;
property Clausules[const MemberType: TMemberType;
Operation: TOperationFlag]: TClausule read GetClausule write SetClausule;
end;