考虑这样的枚举:
type
TTypeOfData = (
[XmlName('ABC')] todABC,
[XmlName('DEF')] todDEF,
[XmlName('GHI')] todGHI
);
Run Code Online (Sandbox Code Playgroud)
其中XmlName是一个自定义属性,用于为此枚举的成员定义序列化字符串.
如何浏览附加到此枚举的每个成员的属性?
以任何方式,是否可以将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) 我想公开一个可以采用可选匿名方法的函数:
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)