Encapsulando um Array em TPersistent

11/04/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:

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; [b:2d295bda1f]TClausules = array [TMemberType, TOperationFlag] of TClausule;[/b:2d295bda1f] TAvsDefaultDialect = class (TComponent) private [b:2d295bda1f]FClausules: TClausules;[/b:2d295bda1f] 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;



Aureliovs