dbinfo.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. unit dbInfo;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  6. Buttons, ExtCtrls, LCLType;
  7. type
  8. { TfmDBInfo }
  9. TfmDBInfo = class(TForm)
  10. bbClose: TBitBtn;
  11. bbRefresh: TBitBtn;
  12. edCreationDate: TEdit;
  13. edConnections: TEdit;
  14. edServerTime: TEdit;
  15. edPageSize: TEdit;
  16. edDBSize: TEdit;
  17. edName: TEdit;
  18. edODSVer: TEdit;
  19. edCharset: TEdit;
  20. Image1: TImage;
  21. Label1: TLabel;
  22. Label2: TLabel;
  23. Label3: TLabel;
  24. Label4: TLabel;
  25. Label5: TLabel;
  26. Label6: TLabel;
  27. Label7: TLabel;
  28. Label8: TLabel;
  29. meClients: TMemo;
  30. procedure bbCloseClick(Sender: TObject);
  31. procedure bbRefreshClick(Sender: TObject);
  32. procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
  33. procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  34. private
  35. { private declarations }
  36. FDBIndex: Integer;
  37. public
  38. procedure Init(dbIndex: Integer);
  39. { public declarations }
  40. end;
  41. var
  42. fmDBInfo: TfmDBInfo;
  43. implementation
  44. {$R *.lfm}
  45. { TfmDBInfo }
  46. uses SysTables;
  47. procedure TfmDBInfo.bbCloseClick(Sender: TObject);
  48. begin
  49. Close;
  50. Parent.Free;
  51. end;
  52. procedure TfmDBInfo.bbRefreshClick(Sender: TObject);
  53. begin
  54. Init(FDBIndex);
  55. end;
  56. procedure TfmDBInfo.FormClose(Sender: TObject; var CloseAction: TCloseAction);
  57. begin
  58. CloseAction:= caFree;
  59. end;
  60. procedure TfmDBInfo.FormKeyDown(Sender: TObject; var Key: Word;
  61. Shift: TShiftState);
  62. begin
  63. if (ssCtrl in Shift) and
  64. ((key=VK_F4) or (key=VK_W)) then
  65. begin
  66. // Close when pressing Ctrl-W or Ctrl-F4 (Cmd-W/Cmd-F4 on OSX)
  67. Close;
  68. Parent.Free;
  69. end;
  70. end;
  71. procedure TfmDBInfo.Init(dbIndex: Integer);
  72. var
  73. dbName, CreationDate, ACharSet: string;
  74. MajorVer, MinorVer, Pages, PageSize: Integer;
  75. ProcessList: TStringList;
  76. dbSize: Double;
  77. AType: string;
  78. ServerTime: string;
  79. ErrorMsg: string;
  80. begin
  81. FDBIndex:= dbIndex;
  82. ProcessList:= TStringList.Create;
  83. try
  84. // Read database info
  85. if dmSysTables.GetDatabaseInfo(dbIndex, dbName, ACharSet, CreationDate, ServerTime,
  86. MajorVer, MinorVer, Pages, PageSize, ProcessList, ErrorMsg) then
  87. begin
  88. edName.Text:= dbName;
  89. edODSVer.Text:= IntToStr(MajorVer) + '.' + IntToStr(MinorVer);
  90. edCharset.Text:= ACharSet;
  91. edCreationDate.Text:= CreationDate;
  92. edPageSize.Text:= IntToStr(PageSize);
  93. edConnections.Text:= IntToStr(ProcessList.Count);
  94. dbSize:= Pages * PageSize;
  95. // Display database size in readable format
  96. if dbSize > (1024*1024*1024) then
  97. begin
  98. dbSize:= ((dbSize / 1024) / 1024) / 1024;
  99. AType:= 'Gigabytes';
  100. end
  101. else
  102. if dbSize > (1024*1024) then
  103. begin
  104. dbSize:= ((dbSize / 1024) / 1024);
  105. AType:= 'Megabytes';
  106. end
  107. else
  108. if dbSize > 1024 then
  109. begin
  110. dbSize:= (dbSize / 1024);
  111. AType:= 'Kilobytes';
  112. end
  113. else
  114. begin
  115. AType:= 'Bytes';
  116. end;
  117. edDBSize.Text:= Format('%3.1n %s', [dbSize, AType]);
  118. fmDBInfo.edServerTime.Text:= ServerTime;
  119. meClients.Lines.Text:= ProcessList.Text;
  120. meClients.Lines.Insert(0, '');
  121. Show;
  122. end
  123. else
  124. ShowMessage('Unable to get database information' + LineEnding +
  125. ErrorMsg);
  126. finally
  127. ProcessList.Free;
  128. end;
  129. end;
  130. end.