fbadmindemo.pp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. program fbadmindemo;
  2. {
  3. Program that tests/demonstrates Ludo Brands' FBAdmin unit
  4. It shows getting server info, log, and backing up
  5. It doesn't restore as that might delete data.
  6. }
  7. {$mode objfpc}{$H+}
  8. {$APPTYPE CONSOLE}
  9. uses
  10. {$IFDEF UNIX}{$IFDEF UseCThreads}
  11. cthreads,
  12. {$ENDIF}{$ENDIF}
  13. Classes,
  14. SysUtils,
  15. ibconnection { for EIBDatabaseError},
  16. FBAdmin;
  17. function AskUser(const Question: string): string;
  18. begin
  19. writeln(Question);
  20. readln(result);
  21. end;
  22. function ConnectToServer(TheServer: TFBAdmin): boolean;
  23. var
  24. Response:string;
  25. begin
  26. Response:=AskUser('Host name/IP address (empty for 127.0.0.1)?');
  27. if trim(Response)='' then Response:='127.0.0.1';
  28. TheServer.Host:=Response;
  29. Response:=AskUser('Services port (empty for 3050)?');
  30. if trim(Response)='' then
  31. TheServer.Port:=3050
  32. else
  33. TheServer.Port:=StrToInt(Response);
  34. Response:=AskUser('Username (empty for SYSDBA)?');
  35. if trim(Response)='' then Response:='SYSDBA';
  36. TheServer.User:=Response;
  37. Response:=AskUser('Password (empty for masterkey)?');
  38. if trim(Response)='' then Response:='masterkey';
  39. TheServer.Password:=Response;
  40. // Big change server supports TCP/IP
  41. // Change this if you use embedded.
  42. TheServer.Protocol:=IBSPTCPIP;
  43. // We'll just abort our program if there's any error.
  44. // Easier to use exceptions then.
  45. TheServer.UseExceptions:=true;
  46. try
  47. result:=TheServer.Connect;
  48. except
  49. on B: EIBDatabaseError do
  50. begin
  51. writeln('Database error: ', B.ClassName, '/', B.Message,
  52. '. GDS error code: ', B.GDSErrorCode);
  53. end;
  54. on E: Exception do
  55. begin
  56. writeln('Exception: ', E.ClassName, '/', E.Message);
  57. end;
  58. end;
  59. end;
  60. var
  61. Database: string;
  62. TheServer:TFBAdmin;
  63. Users: TStringList;
  64. // For filling user details:
  65. GroupName,FirstName,MiddleName,LastName:string;
  66. UserID, GroupID: longint;
  67. begin
  68. TheServer:=TFBAdmin.Create(nil);
  69. try
  70. if ConnectToServer(TheServer)=false then
  71. begin
  72. writeln('Aborting.');
  73. halt(13);
  74. end;
  75. try
  76. writeln('Server type: '+TheServer.ServerImplementation);
  77. writeln('Server version: '+TheServer.ServerVersion);
  78. // Handy to know for backup purposes...
  79. writeln('Server root directory: '+TheServer.ServerRootDir);
  80. Users:=TStringList.Create;
  81. try
  82. if TheServer.GetUsers(Users) then
  83. writeln('List of users:'+Users.Text)
  84. else
  85. writeln('Sorry, could not get user list.');
  86. finally
  87. Users.Free;
  88. end;
  89. // Get details for current user:
  90. if TheServer.GetUser(TheServer.User,GroupName,FirstName,MiddleName,LastName,UserID, GroupID) then
  91. begin
  92. writeln('Name: '+TheServer.User);
  93. writeln('Full name: '+Trim(Trim(FirstName+Trim(' '+MiddleName)+' ')+LastName));
  94. writeln('User ID: '+IntToStr(UserID));
  95. writeln('Group: '+GroupName);
  96. writeln('Group ID: '+IntToStr(GroupID));
  97. end
  98. else
  99. writeln('Sorry, could not get user details for '+TheServer.User);
  100. writeln('If you want to try a backup, please enter the');
  101. writeln('path on the server where the database is.');
  102. writeln('(Aliases will not work)');
  103. Database:=Trim(AskUser('Enter nothing if you do not want a backup.'));
  104. if Database<>'' then
  105. begin
  106. writeln('Starting backup to '+Database+'.fbk');
  107. TheServer.Backup(Database, Database+'.fbk',[],'');
  108. writeln('Output:');
  109. writeln(TheServer.Output.Text);
  110. AskUser('Please press enter to continue...');
  111. end;
  112. writeln('Database log:');
  113. if TheServer.GetDatabaseLog then
  114. writeln (TheServer.Output.Text)
  115. else
  116. writeln('Could not get database log, sorry.');
  117. //We're at the end so it doesn't matter...
  118. //AskUser('Please press enter to continue...');
  119. TheServer.DisConnect;
  120. except
  121. on B: EIBDatabaseError do
  122. begin
  123. writeln('Database error: ', B.ClassName, '/', B.Message,
  124. '. GDS error code: ', B.GDSErrorCode);
  125. end;
  126. on E: Exception do
  127. begin
  128. writeln('Exception: ', E.ClassName, '/', E.Message);
  129. end;
  130. end;
  131. finally
  132. TheServer.Free;
  133. end;
  134. writeln('Program finished.');
  135. end.