小编ZeD*_*aye的帖子

Delphi 2010 RTTI:探索枚举

考虑这样的枚举:

type
  TTypeOfData = (
    [XmlName('ABC')] todABC,
    [XmlName('DEF')] todDEF,  
    [XmlName('GHI')] todGHI
  );
Run Code Online (Sandbox Code Playgroud)

其中XmlName是一个自定义属性,用于为此枚举的成员定义序列化字符串.

如何浏览附加到此枚举的每个成员的属性?

delphi enumeration rtti delphi-2010

13
推荐指数
2
解决办法
3648
查看次数

在const数组中传递通用记录

以任何方式,是否可以将const参数数组中的通用记录传递给函数调用?

我想使用Allen Bauer 的Nullable记录在一种自制的ORM中使用"Plain Old Delphi Objects"来映射数据库行:

type
  Nullable<T> = record
    ...
  end;

  TMyTableObject = class(TDbOject)
  private
    FId: Integer;
    FOptionalField: Nullable<string>;
  protected
    procedure InternalSave; override;
  public
    property Id: Integer read FId write SetId;
    property OptionalField: Nullable<string> read FOptionalField write SetOptionalField;
  end;

  ...

  implementation

  procedure TMyTableObject.InternalSave;
  begin
    { FDbController is declared and managed in TDbObject, it contains fonction to run queries
      on the database }

    FDbController.Execute(
      'update or insert into MY_TABLE(TABLE_ID, OPTIONAL_FIELD) ' +
      'values (?, ?) ' + …
Run Code Online (Sandbox Code Playgroud)

delphi generics delphi-2010

8
推荐指数
1
解决办法
1816
查看次数

可选的匿名方法

我想公开一个可以采用可选匿名方法的函数:

    type
      TParamsProc = reference to procedure(Params: TSQLParams);
      TFieldsProc = reference to procedure(Fields: TSQLResult);

      TDbController = class
        ...
      public
        procedure Select(const SQL: sting; ParamsProc: TParamsProc; FieldsProc: TFieldsProc);
      end;

    implementation

    procedure TDbController.Select(const SQL: sting; ParamsProc: TParamsProc; FieldsProc: TFieldsProc);
    var
      Q: TUIBQuery;
    begin
      Q := TUIBQuery.Create(nil);
      try
        Q.Database := FDatabase;
        Q.Transaction := FTransaction;
        Q.SQL.Text := SQL;
        ParamsProc(Q.Params);
        Q.Open;
        while not Q.Eof do
        begin
          FieldsProc(Q.Result);
          Q.Next;
        end;
      finally
        Q.Free;
      end;
    end;
Run Code Online (Sandbox Code Playgroud)

有时我没有传递给SQL查询的参数,我想让ParamsProc可选.

这段代码不起作用:

      if ParamsProc <> nil then ParamsProc(Q.Params);
Run Code Online (Sandbox Code Playgroud)

也不是这个:

      if @ParamsProc <> …
Run Code Online (Sandbox Code Playgroud)

delphi anonymous-methods delphi-2010

7
推荐指数
1
解决办法
324
查看次数