Объяесните как получить доступ к FIB из FastScript

отредактировано 17:23 Раздел: FastScript
;) Проблема заключается в том, что зарегистрировав класс и сам компонент в <span style='color:red'>fsGlobalUnit немогу обратиться методам ;) этого класса. А в частности DM.ImportTable.FieldByName('NAME').Value</span>
Работаю с FastScript не так давно, по этому что то где то как то не правитьно делаю. Может кто то подскжет как это сделать правильно - сокращенный текст таков;
.......
uses
Forms, fs_iinterpreter,DBTables,DB,
Windows,
IBDatabase,
pFIBDatabase,
pFIBDataSet,
pFIBQuery,
FIBQuery,
FIBDataSet,
pFIBStoredProc,
DBGridEh,
DBCtrlsEh,
DBLookupEh,
IB_Services,
......................
......................
begin
fsGlobalUnit.AddClass(TQuery ,'TQuery');
fsGlobalUnit.AddClass(TpFIBDataSet ,'ImportTable');
fsGlobalUnit.AddClass(TpFIBDatabase ,'TpFIBDatabase');
fsGlobalUnit.AddClass(TpFIBTransaction ,'TpFIBTransaction');
fsGlobalUnit.AddClass(TpFIBDataSet ,'TpFIBDataSet');
fsGlobalUnit.AddClass(TpFIBQuery ,'TpFIBQuery');
fsGlobalUnit.AddClass(TpFIBStoredProc ,'TpFIBStoredProc');
fsGlobalUnit.AddClass(TFIBQuery ,'TFIBQuery');
fsGlobalUnit.AddClass(TFIBDataSet ,'TFIBDataSet');

fsGlobalUnit.AddForm (DM);
fsGlobalUnit.AddForm (fMain);
fsGlobalUnit.AddForm (DM.ImportTable);
fsGlobalUnit.AddForm (DM.DBFQery);
fsGlobalUnit.AddForm (DM.RunProcess);

fsGlobalUnit.AddMethod('Function copyTable(path : String) : boolean',dm.xLoadToScripts);
fsGlobalUnit.AddMethod('Procedure xSoob( Mstring : string; Mtype : integer)',dm.xLoadToScripts);

..........
Метод FieldByName не появляется в дереве классов.
При обращении из скрипта, в лучшем случае пишет что нет класса FieldByName. В худшем переполнение стека - и вылетает.

<span style='color:blue'>Может кто то с таким сталкивался - покажите как это делается, лучше конечно на каком то простом примере</span>
За ранее СПАСИБО


Комментарии

  • отредактировано 17:23
    Hi, MAsterok! С FIBом я лично не знаком, но думаю проблема не в нем. Ты пишешь:
    fsGlobalUnit.AddClass(TQuery ,'TQuery');
    поскольку:
    function AddClass(AClass: TClass; const Ancestor: String): TfsClassVariable;
    то 2м параметром должно быть имя класса предка, т.е:
    unit DBTables;
    { TQuery }
    TQuery = class(TDBDataSet)
    то, должно быть:
    fsGlobalUnit.AddClass(TQuery, 'TDBDataSet');
    кстати в модуле fs_ibdertti это реализовано:
      with fsGlobalUnit do
        with AddClass(TQuery, 'TDBDataSet') do
        begin
          AddMethod('procedure ExecSQL', CallMethod);
          AddMethod('function ParamByName(const Value: string): TParam', CallMethod);
          AddMethod('procedure Prepare', CallMethod);
          AddProperty('ParamCount', 'Word', GetProp, nil);
        end;
    
    Общие рекомендации - смотри исходники, читай матчасть и прежде чем плодить код - разберись, как это работает на чем-то небольшом. Удачи!

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

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