mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 19:59:37 +02: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.
|
|
|