Объяесните как получить доступ к FIB из 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>
За ранее СПАСИБО
Работаю с 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>
За ранее СПАСИБО
Комментарии
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 это реализовано: Общие рекомендации - смотри исходники, читай матчасть и прежде чем плодить код - разберись, как это работает на чем-то небольшом. Удачи!