TClientDataSet

alexgoldalexgold Москва
отредактировано 00:56 Раздел: FastScript
Как из скрипта достучаться к компонентам TClientDataSet? Нужно самому добавлять
этот класс и все его свойства и методы?

Комментарии

  • отредактировано 00:56
    Можно, как добавлять класс и все его свойства и методы описано в юзвере мануале.
  • alexgoldalexgold Москва
    отредактировано 00:56
    awex написал:
    Можно, как добавлять класс и все его свойства и методы описано в юзвере мануале.
    Правильно ли я понял, что нужно сделать модуль по образу и подобию например fs_ibdertti.pas? А готового такого для ClientDataSet нет ни у кого?
  • lvilvi
    отредактировано 00:56
    unit Un_FsClientDataSetRtti;

    interface

    uses
    DB, DBClient, MConnect,
    fs_iinterpreter, fs_itools;

    implementation

    type
    TFunctions = class(TObject)
    private
    function CallMethod(Instance: TObject; ClassType: TClass;
    const MethodName: String; var Params: Variant): Variant;
    public
    constructor Create;
    destructor Destroy; override;
    end;

    var
    Functions: TFunctions;

    { TFunctions }

    constructor TFunctions.Create;
    begin
    with fsGlobalUnit do
    begin
    AddedBy := Self;
    AddClass(TDataSet,'TComponent');
    AddClass(TCustomClientDataSet,'TDataSet');
    with AddClass(TClientDataSet,'TCustomClientDataSet') do
    begin
    AddMethod('procedure AppendData(const Data: OleVariant; HitEOF: Boolean)',CallMethod);
    AddMethod('procedure SaveToFile(const FileName: string)',CallMethod);
    AddMethod('procedure LoadFromFile(const FileName: string)',CallMethod);
    AddMethod('procedure CreateDataSet',CallMethod);
    end;
    AddedBy := nil;
    end;
    end;

    destructor TFunctions.Destroy;
    begin
    if fsGlobalUnit <> nil then
    fsGlobalUnit.RemoveItems(Self);
    inherited;
    end;

    function TFunctions.CallMethod(Instance: TObject; ClassType: TClass;
    const MethodName: String; var Params: Variant): Variant;
    begin
    if ClassType=TClientDataSet then
    begin
    if MethodName='APPENDDATA' then
    TClientDataSet(Instance).AppendData(Params[0],Boolean(Params[1]))
    else if MethodName='SAVETOFILE' then
    TClientDataSet(Instance).SaveToFile(Params[0])
    else if MethodName='LOADFROMFILE' then
    TClientDataSet(Instance).LoadFromFile(Params[0])
    else if MethodName='CREATEDATASET' then
    TClientDataSet(Instance).CreateDataSet
    end
    end;

    initialization
    Functions := TFunctions.Create;

    finalization
    Functions.Free;

    end.
  • отредактировано 00:56
    >>>AddClass(TDataSet,'TComponent');
    Это излишне, TDataSet уже проимортили в модуле fs_idbrtti со всеми его свойствами и методами...
  • alexgoldalexgold Москва
    отредактировано 00:56
    lvi написал:
    unit Un_FsClientDataSetRtti;
    Спасибо, помогло с небольшими доработками.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.