mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-31 16:02:33 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			161 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| unit dbform;
 | |
| 
 | |
| {$mode objfpc}{$H+}
 | |
| 
 | |
| interface
 | |
| 
 | |
| uses
 | |
|   SysUtils, db, sqldb, Forms, Controls, Dialogs, DBGrids, dbloginform,
 | |
|   mssqlconn; // mssqlconn was added to 2.6.1, you need a recent 2.6.1
 | |
| 
 | |
| 
 | |
| type
 | |
| 
 | |
|   { TForm1 }
 | |
| 
 | |
|   TForm1 = class(TForm)
 | |
|     Datasource1: TDatasource;
 | |
|     DBGrid1: TDBGrid;
 | |
|     MSSQLConnection1: TMSSQLConnection;
 | |
|     SQLQuery1: TSQLQuery;
 | |
|     SQLTransaction1: TSQLTransaction;
 | |
|     SybaseConnection1: TSybaseConnection;
 | |
|     procedure FormCreate(Sender: TObject);
 | |
|   private
 | |
| 
 | |
|   public
 | |
| 
 | |
|   end;
 | |
| 
 | |
| var
 | |
|   Form1: TForm1;
 | |
| 
 | |
| implementation
 | |
| 
 | |
| {$R *.lfm}
 | |
| 
 | |
| { TForm1 }
 | |
| 
 | |
| 
 | |
| procedure TForm1.FormCreate(Sender: TObject);
 | |
| type
 | |
|   DBType=(MSSQL,SybaseASE);
 | |
| var
 | |
|   ChosenDB: DBType;
 | |
|   Connection: TSQLConnection;
 | |
|   DBSelected: string;
 | |
|   GoodConnection: boolean;
 | |
|   LoginForm: dbloginform.TLoginForm;
 | |
|   Password: string;
 | |
|   UserCancel: boolean;
 | |
| begin
 | |
|   // Let user login.
 | |
|   GoodConnection:=false;
 | |
|   UserCancel:=false;
 | |
|   LoginForm:=dbloginform.TLoginForm.Create(Nil);
 | |
|   try
 | |
|     while (GoodConnection=false) and (UserCancel=false) do
 | |
|     begin
 | |
|       if LoginForm.ShowModal=mrOK then
 | |
|       begin
 | |
|         DBSelected:=LoginForm.DatabaseType.Items[LoginForm.DatabaseType.ItemIndex];
 | |
|         // Use the text in the databasetype combobox to see what db the user wants.
 | |
|         // Then we point our Connection to the relevant TSQLConnection descendant.
 | |
|         case UpperCase(DBSelected) of
 | |
|         'MS SQL SERVER':
 | |
|           begin
 | |
|             ChosenDB:=MSSQL;
 | |
|             Connection:=MSSQLConnection1;
 | |
|           end;
 | |
|         'SYBASE ASE':
 | |
|           begin
 | |
|             ChosenDB:=SybaseASE;
 | |
|             Connection:=SybaseConnection1;
 | |
|           end
 | |
|         else
 | |
|           begin
 | |
|             showmessage('Unknown database type '+DBSelected+' chosen. Aborting. Pleae fix the code!');
 | |
|             Application.Terminate;
 | |
|           end;
 | |
|         end;
 | |
|         if LoginForm.OSAuthentication.Checked then
 | |
|         begin
 | |
|           // Use operating system credentials - mssqlconn
 | |
|           // expectes empty username/password then.
 | |
|           Connection.UserName:='';
 | |
|           Connection.Password:='';
 | |
|         end
 | |
|         else
 | |
|         begin
 | |
|           // Use regular username/password
 | |
|           Connection.UserName:=LoginForm.User.Text;
 | |
|           Connection.Password:=LoginForm.Password.Text;
 | |
|         end;
 | |
|         if LoginForm.Port.Text<>'' then
 | |
|         begin
 | |
|           Connection.HostName:=LoginForm.Server.Text+':'+LoginForm.Port.Text;
 | |
|         end
 | |
|         else
 | |
|         begin
 | |
|           // Default/no port. Let the connector sort it out.
 | |
|           Connection.HostName:=LoginForm.Server.Text;
 | |
|         end;
 | |
|         Connection.DatabaseName:=LoginForm.Database.Text;
 | |
| 
 | |
|         // Actually, this should work both on MS SQL and Sybase server, so no need to change it:
 | |
|         //SQLQuery1.SQL.Text:='select * from sysservers';
 | |
|         // Everything set up, now connect to database.
 | |
|         // First make sure the other connection is switched off:
 | |
|         if ChosenDB=MSSQL then
 | |
|         begin
 | |
|           SybaseConnection1.Connected:=false;
 | |
|         end
 | |
|         else
 | |
|         begin
 | |
|           MSSQLConnection1.Connected:=false;
 | |
|         end;
 | |
|         SQLTransaction1.DataBase:=Connection;
 | |
|         SQLQuery1.DataBase:=Connection;
 | |
|         try
 | |
|           Connection.Connected:=true;
 | |
|           GoodConnection:=true;
 | |
|         except
 | |
|           on E: Exception do
 | |
|           begin
 | |
|             GoodConnection:=false;
 | |
|             showmessage('Error connecting to database. Technical details: '+E.ClassName+'/'+E.Message);
 | |
|           end;
 | |
|         end;
 | |
|       end
 | |
|       else
 | |
|       begin
 | |
|         showmessage('User cancelled login. Stopping.');
 | |
|         UserCancel:=true; //Tell the loop to release us.
 | |
|         Application.Terminate;
 | |
|       end;
 | |
|     end;
 | |
|     if UserCancel=false then
 | |
|     begin
 | |
|       // Now activate the components "downstream" of the database connection to get the data
 | |
|       // displayed to the user
 | |
|       try
 | |
|         SQLTransaction1.Active:=true;
 | |
|         SQLQuery1.Active:=true;
 | |
|         GoodConnection:=true;
 | |
|       except
 | |
|         on E: Exception do
 | |
|         begin
 | |
|           GoodConnection:=false;
 | |
|           showmessage('Error connecting to database. Technical details: '+E.ClassName+'/'+E.Message);
 | |
|         end;
 | |
|       end;
 | |
|     end;
 | |
|   finally
 | |
|     // Close the form and release memory
 | |
|     LoginForm.Release;
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| end.
 | |
| 
 | 
