Lua_DB.pas 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993
  1. //******************************************************************************
  2. //*** LUA SCRIPT FUNCTIONS ***
  3. //*** ***
  4. //*** (c) Massimo Magnano 2006 ***
  5. //*** ***
  6. //*** ***
  7. //******************************************************************************
  8. // File : Lua_DB.pas (rev. 2.0)
  9. //
  10. // Description : Access from Lua scripts to TDataset VCL Components
  11. // (at this time TQuery, TTable)
  12. //
  13. //******************************************************************************
  14. // Exported functions :
  15. //
  16. // Methods common to all TDataset classes
  17. // [descendent of TObject class (see Lua_object.pas)]
  18. // TDataset:FindField(string FieldName) return Field as TField.
  19. unit Lua_DB;
  20. interface
  21. uses Lua;
  22. procedure RegisterFunctions(L: Plua_State);
  23. implementation
  24. uses Classes, SysUtils, LuaUtils, Lua_Object, Lua_Classes,
  25. DB, DBTables, BDE, TypInfo, Variants;
  26. type
  27. // TComponent <- TDataset <- TBDEDataSet <- TDBDataSet <- TTable
  28. // <- TQuery
  29. // -------------------------------------------------------------
  30. // TLuaComponent <- TLuaDataset <- TLuaBDEDataSet <- TLuaDBDataSet <- TLuaTable
  31. // <- TLuaQuery
  32. //==============================================================================
  33. TLuaDataset = class (TLuaComponent)
  34. protected
  35. class function GetPublicPropertyAccessClass :TClass; override;
  36. public
  37. function GetArrayPropType(Name :String; index :Variant) :PTypeInfo; override;
  38. function GetArrayProp(Name :String; index :Variant) :Variant; override;
  39. function ActiveBuffer: String;
  40. procedure Append;
  41. procedure AppendRecord(const Values: array of const);
  42. function BookmarkValid(Bookmark: TBookmark): Boolean;
  43. procedure Cancel;
  44. procedure CheckBrowseMode;
  45. procedure ClearFields;
  46. procedure Close;
  47. function ControlsDisabled: Boolean;
  48. function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Integer;
  49. function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream;
  50. procedure CursorPosChanged;
  51. procedure Delete;
  52. procedure DisableControls;
  53. procedure Edit;
  54. procedure EnableControls;
  55. function FieldByName(const FieldName: string): TField;
  56. function FindField(const FieldName: string): TField;
  57. function FindFirst: Boolean;
  58. function FindLast: Boolean;
  59. function FindNext: Boolean;
  60. function FindPrior: Boolean;
  61. procedure First;
  62. procedure FreeBookmark(Bookmark: TBookmark);
  63. function GetBookmark: TBookmark;
  64. function GetCurrentRecord(Buffer: String): Boolean;
  65. procedure GetDetailDataSets(List: TList);
  66. procedure GetDetailLinkFields(MasterFields, DetailFields: TList);
  67. function GetBlobFieldData(FieldNo: Integer; var Buffer: TBlobByteData): Integer;
  68. function GetFieldData(Field: TField; Buffer: Pointer): Boolean; overload;
  69. function GetFieldData(FieldNo: Integer; Buffer: Pointer): Boolean; overload;
  70. function GetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean): Boolean; overload;
  71. procedure GetFieldList(List: TList; const FieldNames: string);
  72. procedure GetFieldNames(List: TStrings);
  73. procedure GotoBookmark(Bookmark: TBookmark);
  74. procedure Insert;
  75. procedure InsertRecord(const Values: array of const);
  76. function IsEmpty: Boolean;
  77. function IsLinkedTo(DataSource: TDataSource): Boolean;
  78. function IsSequenced: Boolean;
  79. procedure Last;
  80. function Locate(const KeyFields: string; const KeyValues: Variant;
  81. Options: TLocateOptions): Boolean;
  82. function Lookup(const KeyFields: string; const KeyValues: Variant;
  83. const ResultFields: string): Variant;
  84. function MoveBy(Distance: Integer): Integer;
  85. procedure Next;
  86. procedure Open;
  87. procedure Post;
  88. procedure Prior;
  89. procedure Refresh;
  90. procedure Resync(Mode: TResyncMode);
  91. procedure SetFields(const Values: array of const);
  92. function Translate(Src, Dest: String; ToOem: Boolean): Integer;
  93. procedure UpdateCursorPos;
  94. procedure UpdateRecord;
  95. function UpdateStatus: TUpdateStatus;
  96. end;
  97. TDatasetAccess = class(TDataset)
  98. published
  99. property AggFields;
  100. property Bof;
  101. property Bookmark;
  102. property CanModify;
  103. property DataSetField;
  104. property DataSource;
  105. property DefaultFields;
  106. property Designer;
  107. property Eof;
  108. property BlockReadSize;
  109. property FieldCount;
  110. property FieldDefs;
  111. property FieldDefList;
  112. property Fields;
  113. property FieldList;
  114. //property FieldValues[const FieldName: string]: Variant
  115. property Found;
  116. property IsUniDirectional;
  117. property Modified;
  118. property ObjectView;
  119. property RecordCount;
  120. property RecNo;
  121. property RecordSize;
  122. property SparseArrays;
  123. property State;
  124. property Filter;
  125. property Filtered;
  126. property FilterOptions;
  127. property Active;
  128. property AutoCalcFields;
  129. end;
  130. //==============================================================================
  131. TLuaBDEDataSet = class (TLuaDataset)
  132. protected
  133. class function GetPublicPropertyAccessClass :TClass; override;
  134. public
  135. (* function GetArrayPropType(Name :String; index :Variant) :PTypeInfo; override;
  136. function GetArrayProp(Name :String; index :Variant) :Variant; override;
  137. function GetElementType(Name :String) :PTypeInfo; override;
  138. function GetElement(Name :String) :Variant; override;
  139. *)
  140. procedure ApplyUpdates;
  141. procedure CancelUpdates;
  142. procedure CommitUpdates;
  143. function ConstraintCallBack(Req: DsInfoReq; var ADataSources: DataSources): DBIResult;
  144. function ConstraintsDisabled: Boolean;
  145. procedure DisableConstraints;
  146. procedure EnableConstraints;
  147. procedure FetchAll;
  148. procedure FlushBuffers;
  149. procedure GetIndexInfo;
  150. procedure RevertRecord;
  151. end;
  152. TBDEDataSetAccess = class(TBDEDataSet)
  153. published
  154. property CacheBlobs;
  155. property ExpIndex;
  156. //property Handle; Pointer
  157. property KeySize;
  158. //property Locale; Pointer
  159. property UpdateObject;
  160. property UpdatesPending;
  161. property UpdateRecordTypes;
  162. end;
  163. //==============================================================================
  164. TLuaDBDataSet = class (TLuaBDEDataSet)
  165. protected
  166. class function GetPublicPropertyAccessClass :TClass; override;
  167. public
  168. (* function GetArrayPropType(Name :String; index :Variant) :PTypeInfo; override;
  169. function GetArrayProp(Name :String; index :Variant) :Variant; override;
  170. function GetElementType(Name :String) :PTypeInfo; override;
  171. function GetElement(Name :String) :Variant; override;
  172. *)
  173. function CheckOpen(Status: DBIResult): Boolean;
  174. procedure CloseDatabase(Database: TDatabase);
  175. function OpenDatabase: TDatabase;
  176. end;
  177. TDBDataSetAccess = class(TDBDataSet)
  178. published
  179. property Database;
  180. //property DBHandle; Pointer
  181. //property DBLocale; Pointer
  182. property DBSession;
  183. //property Handle; Pointer
  184. end;
  185. //==============================================================================
  186. TLuaTable = class (TLuaDBDataSet)
  187. protected
  188. class function GetPublicPropertyAccessClass :TClass; override;
  189. public
  190. function GetArrayPropType(Name :String; index :Variant) :PTypeInfo; override;
  191. function GetArrayProp(Name :String; index :Variant) :Variant; override;
  192. function BatchMove(ASource: TBDEDataSet; AMode: TBatchMode): Longint;
  193. procedure AddIndex(const Name, Fields: string; Options: TIndexOptions;
  194. const DescFields: string = '');
  195. procedure ApplyRange;
  196. procedure CancelRange;
  197. procedure CloseIndexFile(const IndexFileName: string);
  198. procedure CreateTable;
  199. procedure DeleteIndex(const Name: string);
  200. procedure DeleteTable;
  201. procedure EditKey;
  202. procedure EditRangeEnd;
  203. procedure EditRangeStart;
  204. procedure EmptyTable;
  205. function FindKey(const KeyValues: array of const): Boolean;
  206. procedure FindNearest(const KeyValues: array of const);
  207. procedure GetIndexNames(List: TStrings);
  208. procedure GotoCurrent(Table: TTable);
  209. function GotoKey: Boolean;
  210. procedure GotoNearest;
  211. procedure LockTable(LockType: TLockType);
  212. procedure OpenIndexFile(const IndexName: string);
  213. procedure RenameTable(const NewTableName: string);
  214. procedure SetKey;
  215. procedure SetRange(const StartValues, EndValues: array of const);
  216. procedure SetRangeEnd;
  217. procedure SetRangeStart;
  218. procedure UnlockTable(LockType: TLockType);
  219. end;
  220. TTableAccess = class(TTable)
  221. published
  222. property Exists;
  223. property IndexFieldCount;
  224. //property IndexFields[Index: Integer]: TField;
  225. property KeyExclusive;
  226. property KeyFieldCount;
  227. property TableLevel;
  228. end;
  229. //==============================================================================
  230. TLuaQuery = class (TLuaDBDataSet)
  231. protected
  232. class function GetPublicPropertyAccessClass :TClass; override;
  233. public
  234. (* function GetArrayPropType(Name :String; index :Variant) :PTypeInfo; override;
  235. function GetArrayProp(Name :String; index :Variant) :Variant; override;
  236. function GetElementType(Name :String) :PTypeInfo; override;
  237. function GetElement(Name :String) :Variant; override;
  238. *)
  239. procedure ExecSQL;
  240. function ParamByName(const Value: string): TParam;
  241. procedure Prepare;
  242. procedure UnPrepare;
  243. end;
  244. TQueryAccess = class(TQuery)
  245. published
  246. property Prepared;
  247. property ParamCount;
  248. property Local;
  249. //property StmtHandle; Pointer
  250. property Text;
  251. property RowsAffected;
  252. //property SQLBinary; Pointer
  253. end;
  254. //==============================================================================
  255. TLuaField = class (TLuaComponent)
  256. protected
  257. class function GetPublicPropertyAccessClass :TClass; override;
  258. public
  259. procedure AssignValue(const Value: TVarRec);
  260. procedure Clear;
  261. procedure FocusControl;
  262. function GetData(Buffer: Pointer; NativeFormat: Boolean = True): Boolean;
  263. class function IsBlob: Boolean;
  264. function IsValidChar(InputChar: Char): Boolean;
  265. procedure RefreshLookupList;
  266. procedure SetData(Buffer: Pointer; NativeFormat: Boolean = True);
  267. procedure SetFieldType(Value: TFieldType);
  268. procedure Validate(Buffer: Pointer);
  269. end;
  270. TFieldAccess = class(TField)
  271. published
  272. property AsBCD;
  273. property AsBoolean;
  274. property AsCurrency;
  275. property AsDateTime;
  276. property AsSQLTimeStamp;
  277. property AsFloat;
  278. property AsInteger;
  279. property AsString;
  280. property AsVariant;
  281. property AttributeSet;
  282. property Calculated;
  283. property CanModify;
  284. property CurValue;
  285. property DataSet;
  286. property DataSize;
  287. property DataType;
  288. property DisplayName;
  289. property DisplayText;
  290. property EditMask;
  291. property EditMaskPtr;
  292. property FieldNo;
  293. property FullName;
  294. property IsIndexField;
  295. property IsNull;
  296. property Lookup;
  297. property LookupList;
  298. property NewValue;
  299. property Offset;
  300. property OldValue;
  301. property ParentField;
  302. property Size;
  303. property Text;
  304. //property ValidChars; Size of published set 'ValidChars' is >4 bytes
  305. property Value;
  306. end;
  307. procedure RegisterFunctions(L: Plua_State);
  308. begin
  309. Lua_Object.RegisterFunctions(L);
  310. end;
  311. { TLuaDataset }
  312. function TLuaDataset.GetArrayPropType(Name: String; index: Variant): PTypeInfo;
  313. begin
  314. Name :=Uppercase(Name);
  315. Result :=nil;
  316. if (Name='FIELDVALUES')
  317. then begin
  318. if (TDataset(InstanceObj).FieldValues[index]<>NULL)
  319. then Result :=TypeInfo(Variant);
  320. end
  321. else
  322. Result :=inherited GetArrayPropType(Name, index);
  323. end;
  324. function TLuaDataset.GetArrayProp(Name: String; index: Variant): Variant;
  325. begin
  326. if (Name='FIELDVALUES')
  327. then begin
  328. Result :=TDataset(InstanceObj).FieldValues[index]
  329. end
  330. else
  331. Result := inherited GetArrayProp(name, index)
  332. end;
  333. class function TLuaDataset.GetPublicPropertyAccessClass: TClass;
  334. begin
  335. Result :=TDatasetAccess;
  336. end;
  337. function TLuaDataset.FindLast: Boolean;
  338. begin
  339. Result :=TDataset(InstanceObj).FindLast;
  340. end;
  341. function TLuaDataset.FieldByName(const FieldName: string): TField;
  342. begin
  343. Result :=TDataset(InstanceObj).FieldByName(FieldName);
  344. end;
  345. function TLuaDataset.FindPrior: Boolean;
  346. begin
  347. Result :=TDataset(InstanceObj).FindPrior;
  348. end;
  349. function TLuaDataset.FindField(const FieldName: string): TField;
  350. begin
  351. Result :=TDataset(InstanceObj).FindField(FieldName);
  352. end;
  353. function TLuaDataset.FindFirst: Boolean;
  354. begin
  355. Result :=TDataset(InstanceObj).FindFirst;
  356. end;
  357. procedure TLuaDataset.First;
  358. begin
  359. TDataset(InstanceObj).First;
  360. end;
  361. function TLuaDataset.FindNext: Boolean;
  362. begin
  363. Result :=TDataset(InstanceObj).FindNext;
  364. end;
  365. function TLuaDataset.IsLinkedTo(DataSource: TDataSource): Boolean;
  366. begin
  367. Result :=TDataset(InstanceObj).IsLinkedTo(DataSource);
  368. end;
  369. procedure TLuaDataset.ClearFields;
  370. begin
  371. TDataset(InstanceObj).ClearFields;
  372. end;
  373. procedure TLuaDataset.CursorPosChanged;
  374. begin
  375. TDataset(InstanceObj).CursorPosChanged;
  376. end;
  377. function TLuaDataset.Lookup(const KeyFields: string; const KeyValues: Variant;
  378. const ResultFields: string): Variant;
  379. begin
  380. Result :=TDataset(InstanceObj).Lookup(KeyFields, KeyValues, ResultFields);
  381. end;
  382. procedure TLuaDataset.Last;
  383. begin
  384. TDataset(InstanceObj).Last;
  385. end;
  386. function TLuaDataset.Locate(const KeyFields: string; const KeyValues: Variant;
  387. Options: TLocateOptions): Boolean;
  388. begin
  389. Result :=TDataset(InstanceObj).Locate(KeyFields, KeyValues, Options);
  390. end;
  391. procedure TLuaDataset.SetFields(const Values: array of const);
  392. begin
  393. TDataset(InstanceObj).SetFields(Values);
  394. end;
  395. procedure TLuaDataset.CheckBrowseMode;
  396. begin
  397. TDataset(InstanceObj).CheckBrowseMode;
  398. end;
  399. function TLuaDataset.UpdateStatus: TUpdateStatus;
  400. begin
  401. Result :=TDataset(InstanceObj).UpdateStatus;
  402. end;
  403. function TLuaDataset.MoveBy(Distance: Integer): Integer;
  404. begin
  405. Result :=TDataset(InstanceObj).MoveBy(Distance);
  406. end;
  407. function TLuaDataset.IsSequenced: Boolean;
  408. begin
  409. Result :=TDataset(InstanceObj).IsSequenced;
  410. end;
  411. procedure TLuaDataset.Prior;
  412. begin
  413. TDataset(InstanceObj).Prior;
  414. end;
  415. procedure TLuaDataset.UpdateRecord;
  416. begin
  417. TDataset(InstanceObj).UpdateRecord;
  418. end;
  419. procedure TLuaDataset.Refresh;
  420. begin
  421. TDataset(InstanceObj).Refresh;
  422. end;
  423. procedure TLuaDataset.Open;
  424. begin
  425. TDataset(InstanceObj).Open;
  426. end;
  427. procedure TLuaDataset.DisableControls;
  428. begin
  429. TDataset(InstanceObj).DisableControls;
  430. end;
  431. procedure TLuaDataset.AppendRecord(const Values: array of const);
  432. begin
  433. TDataset(InstanceObj).AppendRecord(Values);
  434. end;
  435. procedure TLuaDataset.Cancel;
  436. begin
  437. TDataset(InstanceObj).Cancel;
  438. end;
  439. procedure TLuaDataset.Post;
  440. begin
  441. TDataset(InstanceObj).Post;
  442. end;
  443. procedure TLuaDataset.InsertRecord(const Values: array of const);
  444. begin
  445. TDataset(InstanceObj).InsertRecord(Values);
  446. end;
  447. function TLuaDataset.IsEmpty: Boolean;
  448. begin
  449. Result :=TDataset(InstanceObj).IsEmpty;
  450. end;
  451. procedure TLuaDataset.Close;
  452. begin
  453. TDataset(InstanceObj).Close;
  454. end;
  455. procedure TLuaDataset.EnableControls;
  456. begin
  457. TDataset(InstanceObj).EnableControls;
  458. end;
  459. procedure TLuaDataset.Delete;
  460. begin
  461. TDataset(InstanceObj).Delete;
  462. end;
  463. procedure TLuaDataset.Resync(Mode: TResyncMode);
  464. begin
  465. TDataset(InstanceObj).Resync(Mode);
  466. end;
  467. procedure TLuaDataset.Edit;
  468. begin
  469. TDataset(InstanceObj).Edit;
  470. end;
  471. procedure TLuaDataset.Append;
  472. begin
  473. TDataset(InstanceObj).Append;
  474. end;
  475. function TLuaDataset.ControlsDisabled: Boolean;
  476. begin
  477. Result :=TDataset(InstanceObj).ControlsDisabled;
  478. end;
  479. procedure TLuaDataset.UpdateCursorPos;
  480. begin
  481. TDataset(InstanceObj).UpdateCursorPos;
  482. end;
  483. procedure TLuaDataset.Next;
  484. begin
  485. TDataset(InstanceObj).Next;
  486. end;
  487. procedure TLuaDataset.Insert;
  488. begin
  489. TDataset(InstanceObj).Insert;
  490. end;
  491. procedure TLuaDataset.GetFieldList(List: TList; const FieldNames: string);
  492. begin
  493. TDataset(InstanceObj).GetFieldList(List, FieldNames);
  494. end;
  495. function TLuaDataset.GetFieldData(Field: TField; Buffer: Pointer;
  496. NativeFormat: Boolean): Boolean;
  497. begin
  498. Result :=TDataset(InstanceObj).GetFieldData(Field, Buffer, NativeFormat);
  499. end;
  500. function TLuaDataset.GetFieldData(FieldNo: Integer; Buffer: Pointer): Boolean;
  501. begin
  502. Result :=TDataset(InstanceObj).GetFieldData(FieldNo, Buffer);
  503. end;
  504. function TLuaDataset.GetFieldData(Field: TField; Buffer: Pointer): Boolean;
  505. begin
  506. Result :=TDataset(InstanceObj).GetFieldData(Field, Buffer);
  507. end;
  508. function TLuaDataset.CreateBlobStream(Field: TField;
  509. Mode: TBlobStreamMode): TStream;
  510. begin
  511. Result :=TDataset(InstanceObj).CreateBlobStream(Field, Mode);
  512. end;
  513. procedure TLuaDataset.GotoBookmark(Bookmark: TBookmark);
  514. begin
  515. TDataset(InstanceObj).GotoBookmark(Bookmark);
  516. end;
  517. function TLuaDataset.CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Integer;
  518. begin
  519. Result :=TDataset(InstanceObj).CompareBookmarks(Bookmark1, Bookmark2);
  520. end;
  521. function TLuaDataset.GetBookmark: TBookmark;
  522. begin
  523. Result :=TDataset(InstanceObj).GetBookmark;
  524. end;
  525. function TLuaDataset.GetCurrentRecord(Buffer: String): Boolean;
  526. begin
  527. Result :=TDataset(InstanceObj).GetCurrentRecord(PChar(Buffer));
  528. end;
  529. procedure TLuaDataset.GetDetailLinkFields(MasterFields, DetailFields: TList);
  530. begin
  531. TDataset(InstanceObj).GetDetailLinkFields(MasterFields, DetailFields);
  532. end;
  533. function TLuaDataset.BookmarkValid(Bookmark: TBookmark): Boolean;
  534. begin
  535. Result :=TDataset(InstanceObj).BookmarkValid(Bookmark);
  536. end;
  537. function TLuaDataset.Translate(Src, Dest: String; ToOem: Boolean): Integer;
  538. begin
  539. Result :=TDataset(InstanceObj).Translate(PChar(Src), PChar(Dest), ToOem);
  540. end;
  541. procedure TLuaDataset.FreeBookmark(Bookmark: TBookmark);
  542. begin
  543. TDataset(InstanceObj).FreeBookmark(Bookmark);
  544. end;
  545. function TLuaDataset.GetBlobFieldData(FieldNo: Integer;
  546. var Buffer: TBlobByteData): Integer;
  547. begin
  548. Result :=TDataset(InstanceObj).GetBlobFieldData(FieldNo, Buffer);
  549. end;
  550. procedure TLuaDataset.GetDetailDataSets(List: TList);
  551. begin
  552. TDataset(InstanceObj).GetDetailDataSets(List);
  553. end;
  554. function TLuaDataset.ActiveBuffer: String;
  555. begin
  556. Result :=TDataset(InstanceObj).ActiveBuffer;
  557. end;
  558. procedure TLuaDataset.GetFieldNames(List: TStrings);
  559. begin
  560. TDataset(InstanceObj).GetFieldNames(List);
  561. end;
  562. { TLuaBDEDataSet }
  563. class function TLuaBDEDataSet.GetPublicPropertyAccessClass: TClass;
  564. begin
  565. Result :=TBDEDataSetAccess;
  566. end;
  567. procedure TLuaBDEDataSet.CancelUpdates;
  568. begin
  569. TBDEDataset(InstanceObj).CancelUpdates;
  570. end;
  571. procedure TLuaBDEDataSet.ApplyUpdates;
  572. begin
  573. TBDEDataset(InstanceObj).ApplyUpdates;
  574. end;
  575. procedure TLuaBDEDataSet.CommitUpdates;
  576. begin
  577. TBDEDataset(InstanceObj).CommitUpdates;
  578. end;
  579. procedure TLuaBDEDataSet.DisableConstraints;
  580. begin
  581. TBDEDataset(InstanceObj).DisableConstraints;
  582. end;
  583. procedure TLuaBDEDataSet.FetchAll;
  584. begin
  585. TBDEDataset(InstanceObj).FetchAll;
  586. end;
  587. procedure TLuaBDEDataSet.EnableConstraints;
  588. begin
  589. TBDEDataset(InstanceObj).EnableConstraints;
  590. end;
  591. function TLuaBDEDataSet.ConstraintsDisabled: Boolean;
  592. begin
  593. Result :=TBDEDataset(InstanceObj).ConstraintsDisabled;
  594. end;
  595. procedure TLuaBDEDataSet.GetIndexInfo;
  596. begin
  597. TBDEDataset(InstanceObj).GetIndexInfo;
  598. end;
  599. function TLuaBDEDataSet.ConstraintCallBack(Req: DsInfoReq;
  600. var ADataSources: DataSources): DBIResult;
  601. begin
  602. Result :=TBDEDataset(InstanceObj).ConstraintCallBack(Req, ADataSources);
  603. end;
  604. procedure TLuaBDEDataSet.FlushBuffers;
  605. begin
  606. TBDEDataset(InstanceObj).FlushBuffers;
  607. end;
  608. procedure TLuaBDEDataSet.RevertRecord;
  609. begin
  610. TBDEDataset(InstanceObj).RevertRecord;
  611. end;
  612. { TLuaDBDataSet }
  613. class function TLuaDBDataSet.GetPublicPropertyAccessClass: TClass;
  614. begin
  615. Result :=TDBDataSetAccess;
  616. end;
  617. procedure TLuaDBDataSet.CloseDatabase(Database: TDatabase);
  618. begin
  619. TDBDataSet(InstanceObj).CloseDatabase(Database);
  620. end;
  621. function TLuaDBDataSet.CheckOpen(Status: DBIResult): Boolean;
  622. begin
  623. Result :=TDBDataSet(InstanceObj).CheckOpen(Status);
  624. end;
  625. function TLuaDBDataSet.OpenDatabase: TDatabase;
  626. begin
  627. Result :=TDBDataSet(InstanceObj).OpenDatabase;
  628. end;
  629. { TLuaTable }
  630. function TLuaTable.GetArrayPropType(Name: String; index: Variant): PTypeInfo;
  631. begin
  632. Name :=Uppercase(Name);
  633. Result :=nil;
  634. if (Name='INDEXFIELDS')
  635. then begin
  636. if (TTable(InstanceObj).IndexFields[index]<>nil)
  637. then Result :=TypeInfo(TField);
  638. end
  639. else
  640. Result :=inherited GetArrayPropType(Name, index);
  641. end;
  642. function TLuaTable.GetArrayProp(Name: String; index: Variant): Variant;
  643. begin
  644. if (Name='INDEXFIELDS')
  645. then begin
  646. if (TTable(InstanceObj).IndexFields[index]<>nil)
  647. then Result :=Integer(TTable(InstanceObj).IndexFields[index])
  648. else Result :=NULL;
  649. end
  650. else
  651. Result := inherited GetArrayProp(name, index)
  652. end;
  653. class function TLuaTable.GetPublicPropertyAccessClass: TClass;
  654. begin
  655. Result :=TTableAccess;
  656. end;
  657. procedure TLuaTable.SetRange(const StartValues, EndValues: array of const);
  658. begin
  659. TTable(InstanceObj).SetRange(StartValues, EndValues);
  660. end;
  661. procedure TLuaTable.GetIndexNames(List: TStrings);
  662. begin
  663. TTable(InstanceObj).GetIndexNames(List);
  664. end;
  665. procedure TLuaTable.SetKey;
  666. begin
  667. TTable(InstanceObj).SetKey;
  668. end;
  669. procedure TLuaTable.CreateTable;
  670. begin
  671. TTable(InstanceObj).CreateTable;
  672. end;
  673. procedure TLuaTable.GotoNearest;
  674. begin
  675. TTable(InstanceObj).GotoNearest;
  676. end;
  677. procedure TLuaTable.RenameTable(const NewTableName: string);
  678. begin
  679. TTable(InstanceObj).RenameTable(NewTableName);
  680. end;
  681. procedure TLuaTable.CloseIndexFile(const IndexFileName: string);
  682. begin
  683. TTable(InstanceObj).CloseIndexFile(IndexFileName);
  684. end;
  685. procedure TLuaTable.DeleteIndex(const Name: string);
  686. begin
  687. TTable(InstanceObj).DeleteIndex(Name);
  688. end;
  689. function TLuaTable.BatchMove(ASource: TBDEDataSet; AMode: TBatchMode): Longint;
  690. begin
  691. Result :=TTable(InstanceObj).BatchMove(ASource, AMode);
  692. end;
  693. procedure TLuaTable.EditRangeStart;
  694. begin
  695. TTable(InstanceObj).EditRangeStart;
  696. end;
  697. procedure TLuaTable.CancelRange;
  698. begin
  699. TTable(InstanceObj).CancelRange;
  700. end;
  701. function TLuaTable.GotoKey: Boolean;
  702. begin
  703. Result :=TTable(InstanceObj).GotoKey;
  704. end;
  705. procedure TLuaTable.ApplyRange;
  706. begin
  707. TTable(InstanceObj).ApplyRange;
  708. end;
  709. procedure TLuaTable.LockTable(LockType: TLockType);
  710. begin
  711. TTable(InstanceObj).LockTable(LockType);
  712. end;
  713. procedure TLuaTable.FindNearest(const KeyValues: array of const);
  714. begin
  715. TTable(InstanceObj).FindNearest(KeyValues);
  716. end;
  717. procedure TLuaTable.UnlockTable(LockType: TLockType);
  718. begin
  719. TTable(InstanceObj).UnlockTable(LockType);
  720. end;
  721. procedure TLuaTable.GotoCurrent(Table: TTable);
  722. begin
  723. TTable(InstanceObj).GotoCurrent(Table);
  724. end;
  725. procedure TLuaTable.SetRangeStart;
  726. begin
  727. TTable(InstanceObj).SetRangeStart;
  728. end;
  729. procedure TLuaTable.AddIndex(const Name, Fields: string; Options: TIndexOptions;
  730. const DescFields: string);
  731. begin
  732. TTable(InstanceObj).AddIndex(Name, Fields, Options, DescFields);
  733. end;
  734. procedure TLuaTable.EditRangeEnd;
  735. begin
  736. TTable(InstanceObj).EditRangeEnd;
  737. end;
  738. procedure TLuaTable.EditKey;
  739. begin
  740. TTable(InstanceObj).EditKey;
  741. end;
  742. procedure TLuaTable.DeleteTable;
  743. begin
  744. TTable(InstanceObj).DeleteTable;
  745. end;
  746. function TLuaTable.FindKey(const KeyValues: array of const): Boolean;
  747. begin
  748. Result :=TTable(InstanceObj).FindKey(KeyValues);
  749. end;
  750. procedure TLuaTable.EmptyTable;
  751. begin
  752. TTable(InstanceObj).EmptyTable;
  753. end;
  754. procedure TLuaTable.SetRangeEnd;
  755. begin
  756. TTable(InstanceObj).SetRangeEnd;
  757. end;
  758. procedure TLuaTable.OpenIndexFile(const IndexName: string);
  759. begin
  760. TTable(InstanceObj).OpenIndexFile(IndexName);
  761. end;
  762. { TLuaQuery }
  763. class function TLuaQuery.GetPublicPropertyAccessClass: TClass;
  764. begin
  765. Result :=TQueryAccess;
  766. end;
  767. procedure TLuaQuery.ExecSQL;
  768. begin
  769. TQuery(InstanceObj).ExecSQL;
  770. end;
  771. function TLuaQuery.ParamByName(const Value: string): TParam;
  772. begin
  773. Result :=TQuery(InstanceObj).ParamByName(Value);
  774. end;
  775. procedure TLuaQuery.Prepare;
  776. begin
  777. TQuery(InstanceObj).Prepare;
  778. end;
  779. procedure TLuaQuery.UnPrepare;
  780. begin
  781. TQuery(InstanceObj).UnPrepare;
  782. end;
  783. { TLuaField }
  784. class function TLuaField.GetPublicPropertyAccessClass: TClass;
  785. begin
  786. Result :=TFieldAccess;
  787. end;
  788. procedure TLuaField.AssignValue(const Value: TVarRec);
  789. begin
  790. TField(InstanceObj).AssignValue(Value);
  791. end;
  792. function TLuaField.GetData(Buffer: Pointer; NativeFormat: Boolean): Boolean;
  793. begin
  794. Result :=TField(InstanceObj).GetData(Buffer, NativeFormat);
  795. end;
  796. procedure TLuaField.FocusControl;
  797. begin
  798. TField(InstanceObj).FocusControl;
  799. end;
  800. procedure TLuaField.Clear;
  801. begin
  802. TField(InstanceObj).Clear;
  803. end;
  804. procedure TLuaField.SetData(Buffer: Pointer; NativeFormat: Boolean);
  805. begin
  806. TField(InstanceObj).SetData(Buffer, NativeFormat);
  807. end;
  808. procedure TLuaField.SetFieldType(Value: TFieldType);
  809. begin
  810. TField(InstanceObj).SetFieldType(Value);
  811. end;
  812. procedure TLuaField.Validate(Buffer: Pointer);
  813. begin
  814. TField(InstanceObj).Validate(Buffer);
  815. end;
  816. procedure TLuaField.RefreshLookupList;
  817. begin
  818. TField(InstanceObj).RefreshLookupList;
  819. end;
  820. class function TLuaField.IsBlob: Boolean;
  821. begin
  822. Result := False;
  823. end;
  824. function TLuaField.IsValidChar(InputChar: Char): Boolean;
  825. begin
  826. Result :=TField(InstanceObj).IsValidChar(InputChar);
  827. end;
  828. initialization
  829. Lua_Object.RegisterClass(TDataset, TLuaDataset);
  830. Lua_Object.RegisterClass(TBDEDataSet, TLuaBDEDataSet);
  831. Lua_Object.RegisterClass(TDBDataSet, TLuaDBDataSet);
  832. Lua_Object.RegisterClass(TTable, TLuaTable);
  833. Lua_Object.RegisterClass(TQuery, TLuaQuery);
  834. Lua_Object.RegisterClass(TField, TLuaField);
  835. end.