RxBDEReg.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:9k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {*******************************************************}
  2. {                                                       }
  3. {         Delphi VCL Extensions (RX)                    }
  4. {                                                       }
  5. {         Copyright (c) 1995, 1996 AO ROSNO             }
  6. {         Copyright (c) 1997, 1998 Master-Bank          }
  7. {                                                       }
  8. {*******************************************************}
  9. { Note:
  10.   - in Delphi 5.0 you must add DCLRX5 to the requires page of the
  11.     package you install this components into.
  12.   - in Delphi 4.0 you must add DCLRX4 to the requires page of the
  13.     package you install this components into.
  14.   - in Delphi 3.0 you must add DCLRXCTL to the requires page of the
  15.     package you install this components into.
  16.   - in C++Builder 4.0 you must add DCLRX4 to the requires page of the
  17.     package you install this components into.
  18.   - in C++Builder 3.0 you must add DCLRXCTL to the requires page of the
  19.     package you install this components into. }
  20. unit RxBDEReg;
  21. {$I RX.INC}
  22. {$D-,L-,S-}
  23. interface
  24. uses Classes, RTLConsts, DesignIntf, DesignEditors, VCLEditors, SysUtils, DB, DBTables;
  25. { Register data aware custom controls }
  26. procedure Register;
  27. implementation
  28. {$IFDEF WIN32}
  29.  {$R *.D32}
  30. {$ELSE}
  31.  {$R *.D16}
  32. {$ENDIF}
  33. uses TypInfo, DBLists, RXLConst, DBQBE, DBIndex, DBPrgrss, 
  34.   RxLogin, DBSecur, RXQuery, VCLUtils, DbExcpt, RxDsgn,
  35.   {$IFDEF DCS} SelDSFrm, {$ENDIF} {$IFDEF RX_MIDAS} RxRemLog, {$ENDIF}
  36.   {$IFDEF RX_D3} QBndDlg, {$ELSE} 
  37.   {$IFNDEF WIN32} QBndDlg, {$ELSE} QBindDlg, {$ENDIF} {$ENDIF}
  38.   Consts, LibHelp, MemTable;
  39. {$IFDEF WIN32}
  40. { TSessionNameProperty }
  41. type
  42.   TSessionNameProperty = class(TRxDBStringProperty)
  43.   public
  44.     procedure GetValueList(List: TStrings); override;
  45.   end;
  46. procedure TSessionNameProperty.GetValueList(List: TStrings);
  47. begin
  48.   Sessions.GetSessionNames(List);
  49. end;
  50. {$ENDIF WIN32}
  51. { TDatabaseNameProperty }
  52. type
  53.   TDatabaseNameProperty = class(TRxDBStringProperty)
  54.   public
  55.     procedure GetValueList(List: TStrings); override;
  56.   end;
  57. procedure TDatabaseNameProperty.GetValueList(List: TStrings);
  58. {$IFDEF WIN32}
  59. var
  60.   S: TSession;
  61. {$ENDIF}
  62. begin
  63. {$IFDEF WIN32}
  64.   if (GetComponent(0) is TDBDataSet) then
  65.     (GetComponent(0) as TDBDataSet).DBSession.GetDatabaseNames(List)
  66.   else if (GetComponent(0) is TSQLScript) then begin
  67.     S := Sessions.FindSession((GetComponent(0) as TSQLScript).SessionName);
  68.     if S = nil then S := Session;
  69.     S.GetDatabaseNames(List);
  70.   end;
  71. {$ELSE}
  72.   Session.GetDatabaseNames(List);
  73. {$ENDIF}
  74. end;
  75. { TTableNameProperty }
  76. { For TFieldList, TIndexList components }
  77. type
  78.   TTableNameProperty = class(TRxDBStringProperty)
  79.   public
  80.     procedure GetValueList(List: TStrings); override;
  81.   end;
  82. procedure TTableNameProperty.GetValueList(List: TStrings);
  83. begin
  84. {$IFDEF WIN32}
  85.   (GetComponent(0) as TCustomTableItems).DBSession.GetTableNames((GetComponent(0)
  86.     as TCustomTableItems).DatabaseName, '', True, False, List);
  87. {$ELSE}
  88.   Session.GetTableNames((GetComponent(0) as TCustomTableItems).DatabaseName,
  89.     '', True, False, List);
  90. {$ENDIF WIN32}
  91. end;
  92. {$IFNDEF RX_D4}
  93. {$IFNDEF VER90}
  94.  {$IFNDEF VER93}
  95. function EditQueryParams(DataSet: TDataSet; List: TParams): Boolean;
  96. begin
  97.   Result := QBndDlg.EditQueryParams(DataSet, List, hcDQuery);
  98. end;
  99.  {$ENDIF}
  100. {$ENDIF}
  101. { TRxParamsProperty }
  102. type
  103.   TRxParamsProperty = class(TPropertyEditor)
  104.   public
  105.     procedure Edit; override;
  106.     function GetValue: string; override;
  107.     function GetAttributes: TPropertyAttributes; override;
  108.   end;
  109. function TRxParamsProperty.GetValue: string;
  110. var
  111.   Params: TParams;
  112. begin
  113.   Params := TParams(Pointer(GetOrdValue));
  114.   if Params.Count > 0 then
  115. {$IFDEF WIN32}
  116.     Result := Format('(%s)', [GetPropInfo.Name])
  117. {$ELSE}
  118.     Result := Format('(%s)', [GetPropInfo^.Name])
  119. {$ENDIF}
  120.   else
  121.     Result := ResStr(srNone);
  122. end;
  123. function TRxParamsProperty.GetAttributes: TPropertyAttributes;
  124. begin
  125.   Result := [paMultiSelect, paDialog];
  126. end;
  127. procedure TRxParamsProperty.Edit;
  128. var
  129.   List, Params: TParams;
  130.   Query: TDataSet;
  131.   QueryCreated: Boolean;
  132.   I: Integer;
  133. begin
  134.   QueryCreated := False;
  135.   if GetComponent(0) is TDataSet then
  136.     Query := GetComponent(0) as TDataSet
  137.   else begin
  138.     Query := TQuery.Create(GetComponent(0) as TComponent);
  139.     QueryCreated := True;
  140.   end;
  141.   try
  142.     Params := TParams(GetOrdProp(GetComponent(0), GetPropInfo));
  143.     if QueryCreated then TQuery(Query).Params := Params;
  144.     List := TParams.Create;
  145.     try
  146.       List.Assign(Params);
  147.       if EditQueryParams(Query, List) {$IFDEF WIN32} and not
  148.         List.IsEqual(Params) {$ENDIF} then
  149.       begin
  150. {$IFDEF WIN32}
  151.         Modified;
  152. {$ELSE}
  153.         if Designer <> nil then Designer.Modified;
  154. {$ENDIF}
  155.         Query.Close;
  156.         for I := 0 to PropCount - 1 do begin
  157.           Params := TParams(GetOrdProp(GetComponent(I),
  158.             TypInfo.GetPropInfo(GetComponent(I).ClassInfo,
  159. {$IFDEF WIN32}
  160.             GetPropInfo.Name)));
  161. {$ELSE}
  162.             GetPropInfo^.Name)));
  163. {$ENDIF}
  164.           Params.AssignValues(List);
  165.         end;
  166.       end;
  167.     finally
  168.       List.Free;
  169.     end;
  170.   finally
  171.     if QueryCreated then Query.Free;
  172.   end;
  173. end;
  174. {$ENDIF RX_D4}
  175. { TUserTableNameProperty }
  176. { For TDBSecurity component }
  177. type
  178.   TUserTableNameProperty = class(TRxDBStringProperty)
  179.     procedure GetValueList(List: TStrings); override;
  180.   end;
  181. procedure TUserTableNameProperty.GetValueList(List: TStrings);
  182. var
  183.   Security: TDBSecurity;
  184. begin
  185.   Security := GetComponent(0) as TDBSecurity;
  186.   if Security.Database <> nil then begin
  187. {$IFDEF WIN32}
  188.     Security.Database.Session.GetTableNames(Security.Database.DatabaseName,
  189.       '*.*', True, False, List);
  190. {$ELSE}
  191.     Session.GetTableNames(Security.Database.DatabaseName, '*.*',
  192.       True, False, List);
  193. {$ENDIF}
  194.   end;
  195. end;
  196. { TLoginNameFieldProperty }
  197. { For TDBSecurity component }
  198. type
  199.   TLoginNameFieldProperty = class(TRxDBStringProperty)
  200.     procedure GetValueList(List: TStrings); override;
  201.   end;
  202. procedure TLoginNameFieldProperty.GetValueList(List: TStrings);
  203. var
  204.   Security: TDBSecurity;
  205.   Table: TTable;
  206. begin
  207.   Security := GetComponent(0) as TDBSecurity;
  208.   if (Security.Database <> nil) and (Security.UsersTableName <> '') then begin
  209.     Table := TTable.Create(Security);
  210.     try
  211.       Table.DatabaseName := Security.Database.DatabaseName;
  212.       Table.TableName := Security.UsersTableName;
  213.       Table.GetFieldNames(List);
  214.     finally
  215.       Table.Free;
  216.     end;
  217.   end;
  218. end;
  219. {$IFDEF DCS}
  220. { TMemoryTableEditor }
  221. type
  222.   TMemoryTableEditor = class(TMemDataSetEditor)
  223.   protected
  224.     function CopyStructure(Source, Dest: TDataSet): Boolean; override;
  225.   end;
  226. function TMemoryTableEditor.CopyStructure(Source, Dest: TDataSet): Boolean;
  227. begin
  228.   Result := Dest is TMemoryTable;
  229.   if Result then
  230.     TMemoryTable(Dest).CopyStructure(Source);
  231. end;
  232. {$ENDIF DCS}
  233. { Designer registration }
  234. procedure Register;
  235. begin
  236. {$IFDEF RX_D4}
  237.   { Database Components are excluded from the STD SKU }
  238.   if GDAL = LongWord(-16) then Exit;
  239. {$ENDIF}
  240. { Data aware components and controls }
  241.   RegisterComponents(LoadStr(srRXDBAware), [TRxQuery, TSQLScript,
  242.     TMemoryTable, TQBEQuery, TDBIndexCombo, TDBProgress, 
  243.     TDBSecurity]);
  244. {$IFDEF RX_MIDAS}
  245. { MIDAS components }
  246.   RegisterComponents(LoadStr(srRXDBAware), [TRxRemoteLogin]);
  247.   RegisterNonActiveX([TRxRemoteLogin], axrComponentOnly);
  248. {$ENDIF}
  249. { Database lists }
  250.   RegisterComponents(LoadStr(srRXDBAware), [TBDEItems, TDatabaseItems,
  251.     TTableItems]);
  252. {$IFNDEF CBUILDER}
  253.  {$IFDEF USE_OLD_DBLISTS}
  254.   RegisterComponents(LoadStr(srRXDBAware), [TDatabaseList, TLangDrivList,
  255.     TTableList, TStoredProcList, TFieldList, TIndexList]);
  256.  {$ENDIF USE_OLD_DBLISTS}
  257. {$ENDIF CBUILDER}
  258. {$IFDEF RX_D3}
  259.   RegisterNonActiveX([TRxQuery, TSQLScript, TMemoryTable, TQBEQuery,
  260.      TDBIndexCombo, TDBProgress, TDBSecurity, TBDEItems,
  261.     TDatabaseItems, TTableItems], axrComponentOnly);
  262. {$ENDIF RX_D3}
  263. { Property and component editors for data aware controls }
  264.   RegisterPropertyEditor(TypeInfo(TFileName), TCustomTableItems, 'TableName',
  265.     TTableNameProperty);
  266.   RegisterPropertyEditor(TypeInfo(TFileName), TDBSecurity,
  267.     'UsersTableName', TUserTableNameProperty);
  268.   RegisterPropertyEditor(TypeInfo(string), TDBSecurity,
  269.     'LoginNameField', TLoginNameFieldProperty);
  270. {$IFDEF DCS}
  271.   RegisterComponentEditor(TMemoryTable, TMemoryTableEditor);
  272. {$ENDIF}
  273. {$IFNDEF RX_D4}
  274.   RegisterPropertyEditor(TypeInfo(TParams), TQBEQuery, 'Params',
  275.     TRxParamsProperty);
  276.   RegisterPropertyEditor(TypeInfo(TParams), TRxQuery, 'Macros',
  277.     TRxParamsProperty);
  278.   RegisterPropertyEditor(TypeInfo(TParams), TSQLScript, 'Params',
  279.     TRxParamsProperty);
  280. {$ENDIF}
  281.   RegisterPropertyEditor(TypeInfo(string), TSQLScript, 'DatabaseName',
  282.     TDatabaseNameProperty);
  283. {$IFDEF WIN32}
  284.   RegisterPropertyEditor(TypeInfo(string), TCustomBDEItems, 'SessionName',
  285.     TSessionNameProperty);
  286.   RegisterPropertyEditor(TypeInfo(string), TSQLScript, 'SessionName',
  287.     TSessionNameProperty);
  288.   RegisterPropertyEditor(TypeInfo(string), TDBProgress, 'SessionName',
  289.     TSessionNameProperty);
  290. {$ELSE}
  291.   DbErrorIntercept;
  292. {$ENDIF WIN32}
  293. end;
  294. end.