Помогите разобраться с коллекциями
Постановка: написать обертку DOA компонент доступа к oracle для FS
Имеем:
Имеем публичный метод-функцию:
Имеем последним параметром функции тип TSearchRecordOptions, который описан следующим образом:
Описываю так:
Доктор... а SearchRecordOptions можно формировать из Params[2] другим способом... более коротким и приемлимым? хееееееееееелп!!!
Имеем:
TOracleDataset = class(TDataSet)
Имеем публичный метод-функцию:
TOracleDataset = class(TDataSet)
…
Public
…
function SearchRecord(const FieldNames: string; const FieldValues: Variant; Options: TSearchRecordOptions): Boolean;
…
End;
Имеем последним параметром функции тип TSearchRecordOptions, который описан следующим образом:
TSearchRecordOption = (srForward, srBackward, srFromCurrent, srFromBeginning,
srFromEnd, srIgnoreCase, srIgnoreTime, srWildcards, srPartialMatch, srDontNavigate);
TSearchRecordOptions = set of TSearchRecordOption;
Описываю так:
constructor TFunctions.Create;
begin
with fsGlobalUnit do
begin
AddedBy := Self;
AddEnumSet('TSearchRecordOptions', 'srForward, srBackward, srFromCurrent, srFromBeginning, ' +
'srFromEnd, srIgnoreCase, srIgnoreTime, srWildcards, srPartialMatch, srDontNavigate');
with AddClass(TOracleDataset, 'TDataSet') do
AddMethod('function SearchRecord(const FieldNames: string; const FieldValues: Variant; Options: TSearchRecordOptions): Boolean', CallMethod);
AddedBy := nil;
end;
end;
function TFunctions.CallMethod(Instance: TObject; ClassType: TClass;
const MethodName: String; var Params: Variant): Variant;
var
SearchRecordOptions : TSearchRecordOptions;
i : Integer;
begin
Result := 0;
if ClassType = TOracleDataset then
Begin
if ( MethodName = 'SEARCHRECORD' ) then
Begin
if ( VarIsArray( Params[2] )) then
Begin
SearchRecordOptions := [];
for i := 0 to VarArrayHighBound( Params[2], 1 ) do
Begin
case Integer( Params[2][i] ) of
1 : Include( SearchRecordOptions, srForward );
2 : Include( SearchRecordOptions, srBackward );
4 : Include( SearchRecordOptions, srFromCurrent );
8 : Include( SearchRecordOptions, srFromBeginning );
16 : Include( SearchRecordOptions, srFromEnd );
32 : Include( SearchRecordOptions, srIgnoreCase );
64 : Include( SearchRecordOptions, srIgnoreTime );
128 : Include( SearchRecordOptions, srWildcards );
256 : Include( SearchRecordOptions, srPartialMatch );
512 : Include( SearchRecordOptions, srDontNavigate );
end;
End;
Result := TOracleDataset(Instance).SearchRecord( String( Params[0] ), Params[1], SearchRecordOptions )
End;
End;
End;
Доктор... а SearchRecordOptions можно формировать из Params[2] другим способом... более коротким и приемлимым? хееееееееееелп!!!
Комментарии