TEdit 和 TQuery

TEdit and TQuery

我有 class:

TcvDbedit = class(TCustomMaskEdit)
...
private
  ...
  fQuery: TQuery;
  ...
protected
  ...
public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
  ...
published
  ...
  property DataQuery: TQuery read fQuery write fQuery;
  ...

通过这种方式,我将 TQuery 作为 属性 获取,并且我可以更改 属性 查询。我需要别的东西来更改 tQuery 的属性并将它们保存在 dfm 中。我不希望 TQuery 在表单上可见。实际上我使用 TFDQuery。我怎样才能做到这一点?

也许您需要 SetSubComponent。

不要将您的 fQuery 公开为 TcvDbEdit 的 public 成员,而是公开您需要的属性 -

interface

TcvDbedit = class(TCustomMaskEdit)
private
  fQuery: TQuery;
  procedure SetSQL(AValue : String);
  function GetSQL;
public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
published
  property SQL : TStrings read GetSQL write SetSQL;
end;

implementation

constructor TcvDbedit.Create(AOwner : TComponent);
begin
  fQuery = TQuery.Create(self);
end

destructor TcvDbedit.Destroy;
begin
   fQuery.Free;
end;

procedure TcvDbedit.SetValue(AValue : String);
begin
  fQuery.SQL.Assign(AValue);
end;

function TcvDbedit.GetSQL : TStrings;
begin
  return fQuery.SQL;
end;