PageRenderTime 30ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/Gedemin/FastReport/source/xxx/Fr_xxxdb.pas

http://gedemin.googlecode.com/
Pascal | 236 lines | 193 code | 31 blank | 12 comment | 34 complexity | 34e087810d01257e0b2aa7dd7adc9050 MD5 | raw file
Possible License(s): AGPL-3.0, MPL-2.0-no-copyleft-exception, GPL-2.0, LGPL-2.0, LGPL-2.1
  1. {******************************************}
  2. { }
  3. { FastReport v2.4 - XXX components }
  4. { Database component }
  5. { }
  6. { Copyright (c) 1998-2001 by Tzyganenko A. }
  7. { }
  8. {******************************************}
  9. unit FR_XXXDB;
  10. interface
  11. {$I FR.inc}
  12. uses
  13. Windows, Messages, SysUtils, Classes, Graphics, FR_Class, StdCtrls,
  14. Controls, Forms, Menus, Dialogs, DB, UXXXDatabase;
  15. type
  16. TfrXXXComponents = class(TComponent) // fake component
  17. end;
  18. TfrXXXDatabase = class(TfrNonVisualControl)
  19. private
  20. FDatabase: TXXXDatabase;
  21. procedure LinesEditor(Sender: TObject);
  22. protected
  23. procedure SetPropValue(Index: String; Value: Variant); override;
  24. function GetPropValue(Index: String): Variant; override;
  25. function DoMethod(MethodName: String; Par1, Par2, Par3: Variant): Variant; override;
  26. public
  27. constructor Create; override;
  28. destructor Destroy; override;
  29. procedure LoadFromStream(Stream: TStream); override;
  30. procedure SaveToStream(Stream: TStream); override;
  31. procedure DefineProperties; override;
  32. property Database: TXXXDatabase read FDatabase;
  33. end;
  34. implementation
  35. uses FR_Utils, FR_Const, FR_LEdit, FR_DBLookupCtl, FR_XXXTable, FR_XXXQuery
  36. {$IFDEF Delphi6}
  37. , Variants
  38. {$ENDIF};
  39. {$R FR_XXX.RES}
  40. { TfrXXXDatabase }
  41. constructor TfrXXXDatabase.Create;
  42. begin
  43. inherited Create;
  44. FDatabase := TXXXDataBase.Create(frDialogForm);
  45. Component := FDatabase;
  46. BaseName := 'Database';
  47. Bmp.LoadFromResourceName(hInstance, 'FR_XXXDB');
  48. Flags := Flags or flDontUndo;
  49. end;
  50. destructor TfrXXXDatabase.Destroy;
  51. begin
  52. FDatabase.Free;
  53. inherited Destroy;
  54. end;
  55. procedure TfrXXXDatabase.DefineProperties;
  56. function GetAliasNames: String;
  57. var
  58. i: Integer;
  59. sl: TStringList;
  60. begin
  61. Result := '';
  62. sl := TStringList.Create;
  63. Session.GetAliasNames(sl);
  64. sl.Sort;
  65. for i := 0 to sl.Count - 1 do
  66. Result := Result + sl[i] + ';';
  67. sl.Free;
  68. end;
  69. function GetDriverNames: String;
  70. var
  71. i, j: Integer;
  72. sl: TStringList;
  73. s: String;
  74. begin
  75. Result := '';
  76. sl := TStringList.Create;
  77. Session.GetDriverNames(sl);
  78. sl.Sort;
  79. for i := 0 to sl.Count - 1 do
  80. begin
  81. s := sl[i];
  82. for j := 1 to Length(s) do
  83. if s[j] = ';' then
  84. s[j] := ',';
  85. Result := Result + s + ';';
  86. end;
  87. sl.Free;
  88. end;
  89. begin
  90. inherited DefineProperties;
  91. AddEnumProperty('AliasName', GetAliasNames, [Null]);
  92. AddProperty('Connected', [frdtBoolean], nil);
  93. AddProperty('DatabaseName', [frdtString], nil);
  94. AddEnumProperty('DriverName', GetDriverNames, [Null]);
  95. AddProperty('LoginPrompt', [frdtBoolean], nil);
  96. AddProperty('Params', [frdtHasEditor, frdtOneObject], LinesEditor);
  97. AddProperty('Params.Count', [], nil);
  98. end;
  99. procedure TfrXXXDatabase.SetPropValue(Index: String; Value: Variant);
  100. begin
  101. inherited SetPropValue(Index, Value);
  102. Index := AnsiUpperCase(Index);
  103. if Index = 'DATABASENAME' then
  104. FDatabase.DatabaseName := Value
  105. else if Index = 'DRIVERNAME' then
  106. FDatabase.DriverName := Value
  107. else if Index = 'LOGINPROMPT' then
  108. FDatabase.LoginPrompt := Value
  109. else if Index = 'CONNECTED' then
  110. FDatabase.Connected := Value
  111. else if Index = 'ALIASNAME' then
  112. FDatabase.AliasName := Value
  113. else if Index = 'PARAMS' then
  114. FDatabase.Params.Text := Value
  115. end;
  116. function TfrXXXDatabase.GetPropValue(Index: String): Variant;
  117. begin
  118. Index := AnsiUpperCase(Index);
  119. Result := inherited GetPropValue(Index);
  120. if Result <> Null then Exit;
  121. if Index = 'DATABASENAME' then
  122. Result := FDatabase.DatabaseName
  123. else if Index = 'DRIVERNAME' then
  124. Result := FDatabase.DriverName
  125. else if Index = 'LOGINPROMPT' then
  126. Result := FDatabase.LoginPrompt
  127. else if Index = 'CONNECTED' then
  128. Result := FDatabase.Connected
  129. else if Index = 'ALIASNAME' then
  130. Result := FDatabase.AliasName
  131. else if Index = 'PARAMS.COUNT' then
  132. Result := FDatabase.Params.Count
  133. else if Index = 'PARAMS' then
  134. Result := FDatabase.Params.Text
  135. end;
  136. function TfrXXXDataBase.DoMethod(MethodName: String; Par1, Par2, Par3: Variant): Variant;
  137. begin
  138. Result := inherited DoMethod(MethodName, Par1, Par2, Par3);
  139. if Result = Null then
  140. Result := LinesMethod(FDataBase.Params, MethodName, 'PARAMS', Par1, Par2, Par3);
  141. end;
  142. procedure TfrXXXDatabase.LoadFromStream(Stream: TStream);
  143. var
  144. s: String;
  145. begin
  146. inherited LoadFromStream(Stream);
  147. FDatabase.DatabaseName := frReadString(Stream);
  148. s := frReadString(Stream);
  149. if s <> '' then
  150. FDatabase.AliasName := s;
  151. s := frReadString(Stream);
  152. if s <> '' then
  153. FDatabase.DriverName := s;
  154. FDatabase.LoginPrompt := frReadBoolean(Stream);
  155. frReadMemo(Stream, FDatabase.Params);
  156. FDatabase.Connected := frReadBoolean(Stream);
  157. end;
  158. procedure TfrXXXDatabase.SaveToStream(Stream: TStream);
  159. begin
  160. inherited SaveToStream(Stream);
  161. frWriteString(Stream, FDatabase.DatabaseName);
  162. frWriteString(Stream, FDatabase.AliasName);
  163. frWriteString(Stream, FDatabase.DriverName);
  164. frWriteBoolean(Stream, FDatabase.LoginPrompt);
  165. frWriteMemo(Stream, FDatabase.Params);
  166. frWriteBoolean(Stream, FDatabase.Connected);
  167. end;
  168. procedure TfrXXXDatabase.LinesEditor(Sender: TObject);
  169. var
  170. sl: TStringList;
  171. SaveConnected: Boolean;
  172. begin
  173. sl := TStringList.Create;
  174. try
  175. Session.GetAliasParams(FDatabase.AliasName, sl);
  176. except;
  177. end;
  178. with TfrLinesEditorForm.Create(nil) do
  179. begin
  180. if FDatabase.Params.Text = '' then
  181. M1.Text := sl.Text else
  182. M1.Text := FDatabase.Params.Text;
  183. if (ShowModal = mrOk) and ((Restrictions and frrfDontModify) = 0) and
  184. M1.Modified then
  185. begin
  186. SaveConnected := FDatabase.Connected;
  187. FDatabase.Connected := False;
  188. FDatabase.Params.Text := M1.Text;
  189. FDatabase.Connected := SaveConnected;
  190. frDesigner.Modified := True;
  191. end;
  192. Free;
  193. end;
  194. sl.Free;
  195. end;
  196. var
  197. Bmp: TBitmap;
  198. initialization
  199. Bmp := TBitmap.Create;
  200. Bmp.LoadFromResourceName(hInstance, 'FR_XXXDBCONTROL');
  201. frRegisterControl(TfrXXXDatabase, Bmp, IntToStr(SInsertDB));
  202. finalization
  203. frUnRegisterObject(TfrXXXDatabase);
  204. Bmp.Free;
  205. end.