Помогите плиз добавить ParamByName в StoredProc
В общем, регистрирую:
В файлике xxxxxRTTI:
constructor TFunctions.Create;
begin
with fsGlobalUnit do
begin
AddedBy := Self;
with AddClass(TStoredProc, 'TfrxCustomDataset') do
AddMethod('function ParamByName(Name: string): TParam', CallMethod);
AddedBy := nil;
end;
end;
function TFunctions.CallMethod(Instance: TObject; ClassType: TClass;
const MethodName: String; var Params: Variant): Variant;
begin
Result := 0;
if ClassType = TStoredProc then
if MethodName = 'PARAMBYNAME' then
Result := Integer(TStoredProc(Instance).ParamByName(Params[0]))
end;
В файлике xxxxxComponents:
function TStoredProc.ParamByName(const Value: String): TParam;
begin
Result := FStoredProc.ParamByName(Value);
end;
При попытке проинсталлировать package получаю по морде (AV ... in module 'fs7.bpl').
Подскажите плиз, что делаю не так.
P.S. Редактировать параметры в дизайнере не нужно - достаточно доступа из кода, поэтому не хочу заморачиваться с запихиванием параметров в tfrxparam... и обратно.
В файлике xxxxxRTTI:
constructor TFunctions.Create;
begin
with fsGlobalUnit do
begin
AddedBy := Self;
with AddClass(TStoredProc, 'TfrxCustomDataset') do
AddMethod('function ParamByName(Name: string): TParam', CallMethod);
AddedBy := nil;
end;
end;
function TFunctions.CallMethod(Instance: TObject; ClassType: TClass;
const MethodName: String; var Params: Variant): Variant;
begin
Result := 0;
if ClassType = TStoredProc then
if MethodName = 'PARAMBYNAME' then
Result := Integer(TStoredProc(Instance).ParamByName(Params[0]))
end;
В файлике xxxxxComponents:
function TStoredProc.ParamByName(const Value: String): TParam;
begin
Result := FStoredProc.ParamByName(Value);
end;
При попытке проинсталлировать package получаю по морде (AV ... in module 'fs7.bpl').
Подскажите плиз, что делаю не так.
P.S. Редактировать параметры в дизайнере не нужно - достаточно доступа из кода, поэтому не хочу заморачиваться с запихиванием параметров в tfrxparam... и обратно.
Комментарии
with AddClass(TStoredProc, 'TfrxCustomDataset') do
А почему такое странное наследование?
"Руководство разработчика", стр. 26.
Цитата:
"TfrxCustomDataSet - базовый класс для компонентов БД, производных от
TDataSet. От этого класса наследуются компоненты - аналоги Query, Table,
StoredProc."
P.S. ParamByName заработал, видимо, ошибка была в совпадении названия моего класса со стандартным классом BDE
Он её ведь писал!
Для TStoredProc надо как минимум писать обертку, аналогичную TfrxBDETable/Query.
Я тебе очень не советую писать аналог TStoredProc. Работы много, а смысла в этом мало - практически любую SP можно вызвать из TQuery.
Для написание своего полноценного аналога TStoredProc, тебе как минимум придется написать свой аналог TfrxParams (ради добавления свойства ParamType) и сдублировать кучу кода для его поддержки) .
Еще во время Alfa и beta тестирования, я предлагал Александру добавить в TfrxParamItem свойство ParamType, но он к сожалению отказался.