home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / cb / setup / cbuilder / data.z / DBREG.PAS < prev    next >
Pascal/Delphi Source File  |  1997-02-28  |  22KB  |  795 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Visual Component Library                 }
  5. {                                                       }
  6. {       Copyright (c) 1995,96 Borland International     }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit DBReg;            // $Revision:   1.7  $
  11.  
  12. interface
  13.  
  14. procedure Register;
  15.  
  16.  
  17. implementation
  18.  
  19. uses
  20.   SysUtils, Classes, DsgnIntf, Controls, Forms, DB, DBTables, DBCtrls,
  21.   DBGrids,
  22.   MaskProp, MaskText, Mask, DBConsts, DBLookup, DSDesign, DBEdit, FldLinks,
  23.   TypInfo, EditIntf, ExptIntf, ToolIntf, LibConst, QBE, QBindDlg, ProcDlg,
  24.   IxEdit, dbColEdt, DbxTarg, UpdSqlEd, DbXPlor, DBExpt, DBInpReq;
  25.  
  26. { TDataSetEditor }
  27.  
  28. type
  29.   TDataSetEditor = class(TComponentEditor)
  30.     procedure ExecuteVerb(Index: Integer); override;
  31.     function GetVerb(Index: Integer): string; override;
  32.     function GetVerbCount: Integer; override;
  33.   end;
  34.  
  35. procedure TDataSetEditor.ExecuteVerb(Index: Integer);
  36. begin
  37.   case Index of
  38.     0: ShowDatasetDesigner(Designer, TTable(Component));
  39.     1: ExploreDataset(TDBDataset(Component));
  40.   end;
  41. end;
  42.  
  43. function TDataSetEditor.GetVerb(Index: Integer): string;
  44. begin
  45.   case Index of
  46.     0: Result := LoadStr(SDatasetDesigner);
  47.     1: Result := LoadStr(SExplore);
  48.   end;
  49. end;
  50.  
  51. function TDataSetEditor.GetVerbCount: Integer;
  52. begin
  53.   Result := Ord(Component is TDBDataset) + 1;
  54. end;
  55.  
  56. { TDatabaseEditor }
  57.  
  58. type
  59.   TDatabaseEditor = class(TComponentEditor)
  60.     procedure ExecuteVerb(Index: Integer); override;
  61.     function GetVerb(Index: Integer): string; override;
  62.     function GetVerbCount: Integer; override;
  63.   end;
  64.  
  65. procedure TDatabaseEditor.ExecuteVerb(Index: Integer);
  66. begin
  67.   case Index of
  68.     0: if EditDatabase(TDatabase(Component)) then Designer.Modified;
  69.     1: ExploreDatabase(TDatabase(Component));
  70.   end;
  71. end;
  72.  
  73. function TDatabaseEditor.GetVerb(Index: Integer): string;
  74. begin
  75.   case Index of
  76.     0: Result := LoadStr(SDatabaseEditor);
  77.     1: Result := LoadStr(SExplore);
  78.   end;
  79. end;
  80.  
  81. function TDatabaseEditor.GetVerbCount: Integer;
  82. begin
  83.   Result := 2;
  84. end;
  85.  
  86. { TBatchMoveEditor }
  87.  
  88. type
  89.   TBatchMoveEditor = class(TDefaultEditor)
  90.     procedure ExecuteVerb(Index: Integer); override;
  91.     function GetVerb(Index: Integer): string; override;
  92.     function GetVerbCount: Integer; override;
  93.   end;
  94.  
  95. procedure TBatchMoveEditor.ExecuteVerb(Index: Integer);
  96. begin
  97.   TBatchMove(Component).Execute;
  98. end;
  99.  
  100. function TBatchMoveEditor.GetVerb(Index: Integer): string;
  101. begin
  102.   Result := LoadStr(SBatchExecute);
  103. end;
  104.  
  105. function TBatchMoveEditor.GetVerbCount: Integer;
  106. begin
  107.   Result := 1;
  108. end;
  109.  
  110. { TDataSetProperty }
  111.  
  112. type
  113.   TDataSetProperty = class(TComponentProperty)
  114.   private
  115.     FCheckProc: TGetStrProc;
  116.     procedure CheckComponent(const Value: string);
  117.   public
  118.     procedure GetValues(Proc: TGetStrProc); override;
  119.   end;
  120.  
  121. procedure TDataSetProperty.CheckComponent(const Value: string);
  122. var
  123.   J: Integer;
  124.   Dataset: TDataset;
  125. begin
  126.   Dataset := TDataset(Designer.GetComponent(Value));
  127.   for J := 0 to PropCount - 1 do
  128.     if TDataSource(GetComponent(J)).IsLinkedTo(Dataset) then
  129.       Exit;
  130.   FCheckProc(Value);
  131. end;
  132.  
  133. procedure TDataSetProperty.GetValues(Proc: TGetStrProc);
  134. begin
  135.   FCheckProc := Proc;
  136.   inherited GetValues(CheckComponent);
  137. end;
  138.  
  139. { TDataSourceProperty }
  140.  
  141. type
  142.   TDataSourceProperty = class(TComponentProperty)
  143.   private
  144.     FCheckProc: TGetStrProc;
  145.     procedure CheckComponent(const Value: string);
  146.   public
  147.     procedure GetValues(Proc: TGetStrProc); override;
  148.   end;
  149.  
  150. procedure TDataSourceProperty.CheckComponent(const Value: string);
  151. var
  152.   J: Integer;
  153.   DataSource: TDataSource;
  154. begin
  155.   DataSource := TDataSource(Designer.GetComponent(Value));
  156.   for J := 0 to PropCount - 1 do
  157.     if TDataSet(GetComponent(J)).IsLinkedTo(DataSource) then
  158.       Exit;
  159.   FCheckProc(Value);
  160. end;
  161.  
  162. procedure TDataSourceProperty.GetValues(Proc: TGetStrProc);
  163. begin
  164.   FCheckProc := Proc;
  165.   inherited GetValues(CheckComponent);
  166. end;
  167.  
  168. { TDBStringProperty }
  169.  
  170. type
  171.   TDBStringProperty = class(TStringProperty)
  172.   public
  173.     function GetAttributes: TPropertyAttributes; override;
  174.     procedure GetValueList(List: TStrings); virtual; abstract;
  175.     procedure GetValues(Proc: TGetStrProc); override;
  176.   end;
  177.  
  178. function TDBStringProperty.GetAttributes: TPropertyAttributes;
  179. begin
  180.   Result := [paValueList, paSortList, paMultiSelect];
  181. end;
  182.  
  183. procedure TDBStringProperty.GetValues(Proc: TGetStrProc);
  184. var
  185.   I: Integer;
  186.   Values: TStringList;
  187. begin
  188.   Values := TStringList.Create;
  189.   try
  190.     GetValueList(Values);
  191.     for I := 0 to Values.Count - 1 do Proc(Values[I]);
  192.   finally
  193.     Values.Free;
  194.   end;
  195. end;
  196.  
  197. { TSessionNameProperty }
  198.  
  199. type
  200.   TSessionNameProperty = class(TDBStringProperty)
  201.   public
  202.     procedure GetValueList(List: TStrings); override;
  203.   end;
  204.  
  205. procedure TSessionNameProperty.GetValueList(List: TStrings);
  206. begin
  207.   Sessions.GetSessionNames(List);
  208. end;
  209.  
  210. { TDatabaseNameProperty }
  211.  
  212. type
  213.   TDatabaseNameProperty = class(TDBStringProperty)
  214.   public
  215.     procedure GetValueList(List: TStrings); override;
  216.   end;
  217.  
  218. procedure TDatabaseNameProperty.GetValueList(List: TStrings);
  219. begin
  220.   (GetComponent(0) as TDBDataSet).DBSession.GetDatabaseNames(List);
  221. end;
  222.  
  223. { TAliasNameProperty }
  224.  
  225. type
  226.   TAliasNameProperty = class(TDBStringProperty)
  227.   public
  228.     procedure GetValueList(List: TStrings); override;
  229.   end;
  230.  
  231. procedure TAliasNameProperty.GetValueList(List: TStrings);
  232. begin
  233.   (GetComponent(0) as TDatabase).Session.GetAliasNames(List);
  234. end;
  235.  
  236. { TDriverNameProperty }
  237.  
  238. type
  239.   TDriverNameProperty = class(TDBStringProperty)
  240.   public
  241.     procedure GetValueList(List: TStrings); override;
  242.   end;
  243.  
  244. procedure TDriverNameProperty.GetValueList(List: TStrings);
  245. begin
  246.   (GetComponent(0) as TDatabase).Session.GetDriverNames(List);
  247. end;
  248.  
  249. { TTableNameProperty }
  250.  
  251. type
  252.   TTableNameProperty = class(TDBStringProperty)
  253.   public
  254.     procedure GetValueList(List: TStrings); override;
  255.   end;
  256.  
  257. procedure TTableNameProperty.GetValueList(List: TStrings);
  258. const
  259.   Masks: array[TTableType] of string[5] = ('', '*.DB', '*.DBF', '*.TXT');
  260. var
  261.   Table: TTable;
  262. begin
  263.   Table := GetComponent(0) as TTable;
  264.   Table.DBSession.GetTableNames(Table.DatabaseName, Masks[Table.TableType],
  265.     Table.TableType = ttDefault, False, List);
  266. end;
  267.  
  268. { TIndexNameProperty }
  269.  
  270. type
  271.   TIndexNameProperty = class(TDBStringProperty)
  272.   public
  273.     procedure GetValueList(List: TStrings); override;
  274.   end;
  275.  
  276. procedure TIndexNameProperty.GetValueList(List: TStrings);
  277. begin
  278.   (GetComponent(0) as TTable).GetIndexNames(List);
  279. end;
  280.  
  281. { TProcedureNameProperty }
  282.  
  283. type
  284.   TProcedureNameProperty = class(TDBStringProperty)
  285.   public
  286.     procedure GetValueList(List: TStrings); override;
  287.   end;
  288.  
  289. procedure TProcedureNameProperty.GetValueList(List: TStrings);
  290. var
  291.   DBDataSet: TDBDataSet;
  292. begin
  293.   DBDataSet := GetComponent(0) as TDBDataSet;
  294.   DBDataSet.DBSession.GetStoredProcNames(DBDataSet.DatabaseName, List);
  295. end;
  296.  
  297. { TIndexFieldNamesProperty }
  298.  
  299. type
  300.   TIndexFieldNamesProperty = class(TDBStringProperty)
  301.   public
  302.     procedure GetValueList(List: TStrings); override;
  303.   end;
  304.  
  305. procedure TIndexFieldNamesProperty.GetValueList(List: TStrings);
  306. var
  307.   I: Integer;
  308. begin
  309.   with GetComponent(0) as TTable do
  310.   begin
  311.     IndexDefs.Update;
  312.     for I := 0 to IndexDefs.Count - 1 do
  313.       with IndexDefs[I] do
  314.         if not (ixExpression in Options) then List.Add(Fields);
  315.   end;
  316. end;
  317.  
  318. { TDataFieldProperty }
  319.  
  320. type
  321.   TDataFieldProperty = class(TDBStringProperty)
  322.   public
  323.     function GetDataSourcePropName: string; virtual;
  324.     procedure GetValueList(List: TStrings); override;
  325.   end;
  326.  
  327. function TDataFieldProperty.GetDataSourcePropName: string;
  328. begin
  329.   Result := 'DataSource';
  330. end;
  331.  
  332. procedure TDataFieldProperty.GetValueList(List: TStrings);
  333. var
  334.   Instance: TComponent;
  335.   PropInfo: PPropInfo;
  336.   DataSource: TDataSource;
  337. begin
  338.   Instance := GetComponent(0);
  339.   PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, GetDataSourcePropName);
  340.   if (PropInfo <> nil) and (PropInfo^.PropType^.Kind = tkClass) then
  341.   begin
  342.     DataSource := TObject(GetOrdProp(Instance, PropInfo)) as TDataSource;
  343.     if (DataSource <> nil) and (DataSource.DataSet <> nil) then
  344.       DataSource.DataSet.GetFieldNames(List);
  345.   end;
  346. end;
  347.  
  348. { TLookupSourceProperty }
  349.  
  350. type
  351.   TLookupSourceProperty = class(TDBStringProperty)
  352.   public
  353.     procedure GetValueList(List: TStrings); override;
  354.   end;
  355.  
  356. procedure TLookupSourceProperty.GetValueList(List: TStrings);
  357. begin
  358.   with GetComponent(0) as TField do
  359.     if DataSet <> nil then DataSet.GetFieldNames(List);
  360. end;
  361.  
  362. { TLookupDestProperty }
  363.  
  364. type
  365.   TLookupDestProperty = class(TDBStringProperty)
  366.   public
  367.     procedure GetValueList(List: TStrings); override;
  368.   end;
  369.  
  370. procedure TLookupDestProperty.GetValueList(List: TStrings);
  371. begin
  372.   with GetComponent(0) as TField do
  373.     if LookupDataSet <> nil then LookupDataSet.GetFieldNames(List);
  374. end;
  375.  
  376. { TListFieldProperty }
  377.  
  378. type
  379.   TListFieldProperty = class(TDataFieldProperty)
  380.   public
  381.     function GetDataSourcePropName: string; override;
  382.   end;
  383.  
  384. function TListFieldProperty.GetDataSourcePropName: string;
  385. begin
  386.   Result := 'ListSource';
  387. end;
  388.  
  389. { TLookupFieldProperty }
  390.  
  391. type
  392.   TLookupFieldProperty = class(TDataFieldProperty)
  393.   public
  394.     function GetDataSourcePropName: string; override;
  395.   end;
  396.  
  397. function TLookupFieldProperty.GetDataSourcePropName: string;
  398. begin
  399.   Result := 'LookupSource';
  400. end;
  401.  
  402. { TLookupIndexProperty }
  403.  
  404. type
  405.   TLookupIndexProperty = class(TLookupFieldProperty)
  406.   public
  407.     procedure GetValueList(List: TStrings); override;
  408.   end;
  409.  
  410. procedure TLookupIndexProperty.GetValueList(List: TStrings);
  411. var
  412.   Instance: TComponent;
  413.   PropInfo: PPropInfo;
  414.   DataSource: TDataSource;
  415. begin
  416.   Instance := GetComponent(0);
  417.   PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, GetDataSourcePropName);
  418.   if (PropInfo <> nil) and (PropInfo^.PropType^.Kind = tkClass) then
  419.   begin
  420.     DataSource := TObject(GetOrdProp(Instance, PropInfo)) as TDataSource;
  421.     if (DataSource <> nil) and (DataSource.DataSet <> nil) then
  422.     begin
  423.       if (DataSource.DataSet is TTable) and
  424.           (TTable(DataSource.DataSet).IndexFieldCount > 0) then
  425.         List.Add(TTable(DataSource.DataSet).IndexFields[0].FieldName)
  426.       else
  427.         DataSource.DataSet.GetFieldNames(List);
  428.     end;
  429.   end;
  430. end;
  431.  
  432. { TDBImageEditor }
  433.  
  434. type
  435.   TDBImageEditor = class(TDefaultEditor)
  436.   public
  437.     procedure Copy; override;
  438.   end;
  439.  
  440. procedure TDBImageEditor.Copy;
  441. begin
  442.   TDBImage(Component).CopyToClipboard;
  443. end;
  444.  
  445. { TQueryEditor }
  446.  
  447. type
  448.   TQueryEditor = class(TComponentEditor)
  449.   private
  450.     procedure ExecuteVerb(Index: Integer); override;
  451.     function GetVerb(Index: Integer): string; override;
  452.     function GetVerbCount: Integer; override;
  453.   end;
  454.  
  455. procedure TQueryEditor.ExecuteVerb(Index: Integer);
  456. var
  457.   Query: TQuery;
  458.   List: TParams;
  459. begin
  460.   Query := Component as TQuery;
  461.   case Index of
  462.     0: ShowDatasetDesigner(Designer, TTable(Component));
  463.     1:
  464.       begin
  465.         List := TParams.Create;
  466.         try
  467.           List.Assign(Query.Params);
  468.           if EditQueryParams(Query, List) then
  469.           begin
  470.             Query.Close;
  471.             Query.Params := List;
  472.             if Designer <> nil then Designer.Modified;
  473.           end;
  474.         finally
  475.           List.Free;
  476.         end;
  477.      end;
  478.     2: ExploreDataset(TDBDataset(Component));
  479.     3:
  480.       begin
  481.         ExecBuilder(Query);
  482.         if Designer <> nil then Designer.Modified;
  483.       end;
  484.   end;
  485. end;
  486.  
  487. function TQueryEditor.GetVerb(Index: Integer): string;
  488. begin
  489.   case Index of
  490.     0: Result := LoadStr(SSQLDatasetDesigner);
  491.     1: Result := LoadStr(SBindVerb);
  492.     2: Result := LoadStr(SExplore);
  493.     3: Result := LoadStr(SQBEVerb);
  494.   end;
  495. end;
  496.  
  497. function TQueryEditor.GetVerbCount: Integer;
  498. begin
  499.   if not VQBLoadAttempted then InitVQB;
  500.   if VQBLoaded then Result := 4
  501.   else Result := 3;
  502. end;
  503.  
  504. { TStoredProcEditor }
  505.  
  506. procedure EditStoredProcParams(StoredProc: TStoredProc; Designer: TDesigner);
  507. var
  508.   List: TParams;
  509. begin
  510.   List := TParams.Create;
  511.   try
  512.     StoredProc.CopyParams(List);
  513.     if EditProcParams(StoredProc, List) then
  514.     begin
  515.       StoredProc.Params := List;
  516.       if Designer <> nil then Designer.Modified;
  517.     end;
  518.   finally
  519.     List.Free;
  520.   end;
  521. end;
  522.  
  523. type
  524.   TStoredProcEditor = class(TComponentEditor)
  525.   private
  526.     procedure Edit; override;
  527.     procedure ExecuteVerb(Index: Integer); override;
  528.     function GetVerb(Index: Integer): string; override;
  529.     function GetVerbCount: Integer; override;
  530.   end;
  531.  
  532. procedure TStoredProcEditor.Edit;
  533. begin
  534.   ShowDatasetDesigner(Designer, TTable(Component));
  535. end;
  536.  
  537. procedure TStoredProcEditor.ExecuteVerb(Index: Integer);
  538. var
  539.   StoredProc: TStoredProc;
  540. begin
  541.   StoredProc := Component as TStoredProc;
  542.   case Index of
  543.     0: Edit;
  544.     1: EditStoredProcParams(StoredProc, Designer);
  545.     2: ExploreDataset(StoredProc);
  546.   end;
  547. end;
  548.  
  549. function TStoredProcEditor.GetVerb(Index: Integer): string;
  550. begin
  551.   case Index of
  552.     0: Result := LoadStr(SDatasetDesigner);
  553.     1: Result := LoadStr(SBindVerb);
  554.     2: Result := LoadStr(SExplore);
  555.   end;
  556. end;
  557.  
  558. function TStoredProcEditor.GetVerbCount: Integer;
  559. begin
  560.   Result := 3;
  561. end;
  562.  
  563. { TParamsProperty }
  564.  
  565. type
  566.   TParamsProperty = class(TPropertyEditor)
  567.   public
  568.     function GetValue: string; override;
  569.     function GetAttributes: TPropertyAttributes; override;
  570.   end;
  571.  
  572. function TParamsProperty.GetValue: string;
  573. begin
  574.   Result := Format('(%s)', [TParams.ClassName]);
  575. end;
  576.  
  577. function TParamsProperty.GetAttributes: TPropertyAttributes;
  578. begin
  579.   Result := [paMultiSelect, paDialog];
  580. end;
  581.  
  582. { TStoredParamsProperty }
  583.  
  584. type
  585.   TStoredParamsProperty = class(TParamsProperty)
  586.     procedure Edit; override;
  587.   end;
  588.  
  589. procedure TStoredParamsProperty.Edit;
  590. begin
  591.   EditStoredProcParams(GetComponent(0) as TStoredProc, Designer);
  592. end;
  593.  
  594. { TQueryParamsProperty }
  595.  
  596. type
  597.   TQueryParamsProperty = class(TParamsProperty)
  598.     procedure Edit; override;
  599.   end;
  600.  
  601. procedure TQueryParamsProperty.Edit;
  602. var
  603.   List: TParams;
  604.   Query: TQuery;
  605. begin
  606.   Query := GetComponent(0) as TQuery;
  607.   List := TParams.Create;
  608.   try
  609.     List.Assign(Query.Params);
  610.     if EditQueryParams(Query, List) and not List.IsEqual(Query.Params) then
  611.     begin
  612.       Modified;
  613.       Query.Close;
  614.       Query.Params := List;
  615.     end;
  616.   finally
  617.     List.Free;
  618.   end;
  619. end;
  620.  
  621. { TIndexFilesProperty }
  622.  
  623. type
  624.   TIndexFilesProperty = class(TPropertyEditor)
  625.   public
  626.     function GetAttributes: TPropertyAttributes; override;
  627.     procedure Edit; override;
  628.     function GetValue: string; override;
  629.   end;
  630.  
  631. function TIndexFilesProperty.GetAttributes: TPropertyAttributes;
  632. begin
  633.   Result := [paDialog, paReadOnly];
  634. end;
  635.  
  636. function TIndexFilesProperty.GetValue: string;
  637. begin
  638.   Result := Format('(%s)', [TIndexFiles.ClassName]);
  639. end;
  640.  
  641. procedure TIndexFilesProperty.Edit;
  642. var
  643.   List: TStringList;
  644.   Table: TTable;
  645.   I: Integer;
  646.   IndexFile: string;
  647. begin
  648.   Table := GetComponent(0) as TTable;
  649.   List := TStringList.Create;
  650.   try
  651.     List.Assign(Table.IndexFiles);
  652.     if EditIndexFiles(Table, List) then
  653.     begin
  654.       for I := 0 to List.Count - 1 do
  655.       begin
  656.         IndexFile := List[I];
  657.         with Table.IndexFiles do
  658.           if IndexOf(IndexFile) = -1 then Add(IndexFile);
  659.       end;
  660.       for I := Table.IndexFiles.Count - 1 downto 0 do
  661.       begin
  662.         IndexFile := Table.IndexFiles[I];
  663.         with Table.IndexFiles do
  664.           if List.IndexOf(IndexFile) = -1 then Delete(IndexOf(IndexFile));
  665.       end;
  666.       Modified;
  667.     end;
  668.   finally
  669.     List.Free;
  670.   end;
  671. end;
  672.  
  673. { TDBColumnAttributesProperty }
  674.  
  675. type
  676.   TDBColumnAttributesProperty = class(TClassProperty)
  677.   public
  678.     procedure Edit; override;
  679.     function GetAttributes: TPropertyAttributes; override;
  680.   end;
  681.  
  682. procedure TDBColumnAttributesProperty.Edit;
  683. begin
  684.   if EditDBGridColumns(TDBGridColumns(GetOrdValue)) then Modified;
  685. end;
  686.  
  687. function TDBColumnAttributesProperty.GetAttributes: TPropertyAttributes;
  688. begin
  689.   Result := [paDialog, paReadOnly];
  690. end;
  691.  
  692. { TDBGridEditor }
  693. type
  694.   TDBGridEditor = class(TComponentEditor)
  695.     procedure ExecuteVerb(Index: Integer); override;
  696.     function GetVerb(Index: Integer): string; override;
  697.     function GetVerbCount: Integer; override;
  698.   end;
  699.  
  700. procedure TDBGridEditor.ExecuteVerb(Index: Integer);
  701. begin
  702.   if EditDBGridColumns(TDBGrid(Component).Columns) then
  703.     Designer.Modified;
  704. end;
  705.  
  706. function TDBGridEditor.GetVerb(Index: Integer): string;
  707. begin
  708.   Result := LoadStr(SDBGridColEditor);
  709. end;
  710.  
  711. function TDBGridEditor.GetVerbCount: Integer;
  712. begin
  713.   Result := 1;
  714. end;
  715.  
  716. { TUpdateSQLEditor }
  717.  
  718. type
  719.   TUpdateSQLEditor = class(TComponentEditor)
  720.     procedure ExecuteVerb(Index: Integer); override;
  721.     function GetVerb(Index: Integer): string; override;
  722.     function GetVerbCount: Integer; override;
  723.   end;
  724.  
  725. procedure TUpdateSQLEditor.ExecuteVerb(Index: Integer);
  726. begin
  727.   if EditUpdateSQL(TUpdateSQL(Component)) then Designer.Modified;
  728. end;
  729.  
  730. function TUpdateSQLEditor.GetVerb(Index: Integer): string;
  731. begin
  732.   Result := LoadStr(SUpdateSQLEditor);
  733. end;
  734.  
  735. function TUpdateSQLEditor.GetVerbCount: Integer;
  736. begin
  737.   Result := 1;
  738. end;
  739.  
  740. { Registration }
  741.  
  742. procedure Register;
  743. begin
  744.   RegisterComponents(LoadStr(srDAccess), [TDataSource, TTable, TQuery,
  745.     TStoredProc, TDatabase, TSession, TBatchMove, TUpdateSQL]);
  746.   RegisterComponents(LoadStr(srDControls), [TDBGrid, TDBNavigator, TDBText,
  747.     TDBEdit, TDBMemo, TDBImage, TDBListBox, TDBComboBox, TDBCheckBox,
  748.     TDBRadioGroup, TDBLookupListBox, TDBLookupComboBox]);
  749.   RegisterComponents(LoadStr(srWin31), [TDBLookupList, TDBLookupCombo]);
  750.   RegisterNoIcon([TField]);
  751.   RegisterFields([TStringField, TIntegerField, TSmallintField, TWordField,
  752.     TFloatField, TCurrencyField, TBCDField, TBooleanField, TDateField,
  753.     TVarBytesField, TBytesField, TTimeField, TDateTimeField,
  754.     TBlobField, TMemoField, TGraphicField, TAutoIncField]);
  755.   RegisterPropertyEditor(TypeInfo(TDataSet), TDataSource, 'DataSet', TDataSetProperty);
  756.   RegisterPropertyEditor(TypeInfo(TDataSource), TTable, 'MasterSource', TDataSourceProperty);
  757.   RegisterPropertyEditor(TypeInfo(TDataSource), TQuery, 'DataSource', TDataSourceProperty);
  758.   RegisterPropertyEditor(TypeInfo(string), TDatabase, 'AliasName', TAliasNameProperty);
  759.   RegisterPropertyEditor(TypeInfo(string), TDatabase, 'DriverName', TDriverNameProperty);
  760.   RegisterPropertyEditor(TypeInfo(string), TDatabase, 'SessionName', TSessionNameProperty);
  761.   RegisterPropertyEditor(TypeInfo(string), TDBDataSet, 'SessionName', TSessionNameProperty);
  762.   RegisterPropertyEditor(TypeInfo(string), TDBDataSet, 'DatabaseName', TDatabaseNameProperty);
  763.   RegisterPropertyEditor(TypeInfo(TDataSetUpdateObject), TDataSet, 'UpdateObject', TComponentProperty);
  764.   RegisterPropertyEditor(TypeInfo(string), TTable, 'TableName', TTableNameProperty);
  765.   RegisterPropertyEditor(TypeInfo(string), TTable, 'IndexName', TIndexNameProperty);
  766.   RegisterPropertyEditor(TypeInfo(string), TTable, 'IndexFieldNames', TIndexFieldNamesProperty);
  767.   RegisterPropertyEditor(TypeInfo(string), TField, 'KeyFields', TLookupSourceProperty);
  768.   RegisterPropertyEditor(TypeInfo(string), TField, 'LookupKeyFields', TLookupDestProperty);
  769.   RegisterPropertyEditor(TypeInfo(string), TField, 'LookupResultField', TLookupDestProperty);
  770.   RegisterPropertyEditor(TypeInfo(string), TComponent, 'DataField', TDataFieldProperty);
  771.   RegisterPropertyEditor(TypeInfo(string), TDBLookupControl, 'KeyField', TListFieldProperty);
  772.   RegisterPropertyEditor(TypeInfo(string), TDBLookupControl, 'ListField', TListFieldProperty);
  773.   RegisterPropertyEditor(TypeInfo(string), TWinControl, 'LookupField', TLookupIndexProperty);
  774.   RegisterPropertyEditor(TypeInfo(string), TWinControl, 'LookupDisplay', TLookupFieldProperty);
  775.   RegisterPropertyEditor(TypeInfo(string), TDBEdit, 'EditMask', TMaskProperty);
  776.   RegisterPropertyEditor(TypeInfo(string), TField, 'EditMask', TMaskProperty);
  777.   RegisterPropertyEditor(TypeInfo(string), TTable, 'MasterFields', TFieldLinkProperty);
  778.   RegisterPropertyEditor(TypeInfo(TParams), TQuery, 'Params', TQueryParamsProperty);
  779.   RegisterPropertyEditor(TypeInfo(string), TStoredProc, 'StoredProcName', TProcedureNameProperty);
  780.   RegisterPropertyEditor(TypeInfo(TParams), TStoredProc, 'Params', TStoredParamsProperty);
  781.   RegisterPropertyEditor(TypeInfo(TStrings), TTable, 'IndexFiles', TIndexFilesProperty);
  782.   RegisterPropertyEditor(TypeInfo(TDBGridColumns), nil, '', TDBColumnAttributesProperty);
  783.   RegisterComponentEditor(TDataset, TDataSetEditor);
  784.   RegisterComponentEditor(TDatabase, TDatabaseEditor);
  785.   RegisterComponentEditor(TBatchMove, TBatchMoveEditor);
  786.   RegisterComponentEditor(TQuery, TQueryEditor);
  787.   RegisterComponentEditor(TDBImage, TDBImageEditor);
  788.   RegisterComponentEditor(TStoredProc, TStoredProcEditor);
  789.   RegisterComponentEditor(TDBGrid, TDBGridEditor);
  790.   RegisterComponentEditor(TUpdateSQL, TUpdateSQLEditor);
  791.   DBExpt.Register;
  792. end;
  793.  
  794. end.
  795.