Spring4d と共に RemObjects DataAbstract を使用しています。RemObjects は、SchemaServer_Intf.pas
そのスキーマに存在するあらゆる種類のテーブルのインターフェイスを含むファイルを生成します。「厳密に型指定された」データセットが可能になり、次を使用してフィールドにアクセスできます
(aDataSet as IMyDataSet).MyField := aValue
以下は、DataAbstract によって生成されたインターフェイスの 1 つのスナップショットです。
IEntiteType = interface(IDAStronglyTypedDataTable)
['{96B82FF7-D087-403C-821A-0323034B4B99}']
{ Property getters and setters }
function GetEntiteIdValue: String;
procedure SetEntiteIdValue(const aValue: String);
function GetEntiteIdIsNull: Boolean;
procedure SetEntiteIdIsNull(const aValue: Boolean);
function GetNameValue: WideString;
procedure SetNameValue(const aValue: WideString);
function GetNameIsNull: Boolean;
procedure SetNameIsNull(const aValue: Boolean);
function GetIsSystemValue: SmallInt;
procedure SetIsSystemValue(const aValue: SmallInt);
function GetIsSystemIsNull: Boolean;
procedure SetIsSystemIsNull(const aValue: Boolean);
{ Properties }
property EntiteId: String read GetEntiteIdValue write SetEntiteIdValue;
property EntiteIdIsNull: Boolean read GetEntiteIdIsNull write SetEntiteIdIsNull;
property Name: WideString read GetNameValue write SetNameValue;
property NameIsNull: Boolean read GetNameIsNull write SetNameIsNull;
property IsSystem: SmallInt read GetIsSystemValue write SetIsSystemValue;
property IsSystemIsNull: Boolean read GetIsSystemIsNull write SetIsSystemIsNull;
end;
ただし、問題が 1 つあります。次のように dataTable をキャストする場合:
aDataTable := IEntiteType(TDAMemDataTable.Create(nil));
「インターフェースがサポートされていません」というエラーが表示されます
しかし、あなたがするやいなや:
aDataTable.LogicalName := 'EntiteType';
aDataTable.BusinessRulesId := MyBusinessRuleID;
安心して書ける
aDataTable := IEntiteType(TDAMemDataTable.Create(nil));
そして、エラーは発生しません。
そこで、Spring4d では、登録ユニットに次のように書くことを考えました。
aContainer.RegisterType<TDAMemDataTable>.Implements<IEntiteType>.DelegateTo(
function : TDAMemDataTable
var aDataTable : TDAMemDataTable;
begin
Result:= TDAMemDataTable.Create(nil);
Result.LogicalName := 'EntiteType';
Result.BusinessRulesId := MyBusinessRuleId;
end
)
しかし、その後、Spring4d は (理由とともに) エラーをスローします。
Exception 'first chance' à $762D5B68. Classe d'exception ERegistrationException avec un message 'Component type "uDAMemDataTable.TDAMemDataTable" incompatible with service type "SchemaClient_Intf.IEntiteType".'. Processus EntiteREM2.exe (3088)
このチェックを無効にする方法はありますか?