LoginPrompt := True na komponenti TADOConnection u Delphiju prikazuje standardni prozor za unos korisničkog imena i lozinke pre povezivanja na SQL Server. Ovde je primer kako da se to pravilno iskoristi zajedno sa podešavanjima veze iz INI fajla.
Primer koda
Dugo mi nije bilo jasno šta LoginPrompt := True zapravo radi. Ispravan način da se koristi je sledeći:
procedure TfrmMain.FormShow(Sender: TObject);
var
i: integer;
begin
con1.Provider := 'SQLOLEDB.1';
con1.Properties['Application Name'].Value := Application.Title;
with TIniFile.Create(ExtractFileDir(ParamStr(0)) + '\setup.ini') do
begin
con1.Properties['Initial Catalog'].Value := ReadString('database', 'Initial Catalog', '');
con1.Properties['Data Source'].Value := ReadString('database', 'Data Source', '');
if ReadBool('database', 'Integrated Security', false ) then
begin
con1.Properties['Integrated Security'].Value := 'SSPI';
con1.Properties['Persist Security Info'].Value := 'False';
con1.LoginPrompt := False;
end
else
begin
con1.Properties['Persist Security Info'].Value := 'True';
con1.LoginPrompt := true;
end;
end;
end;
procedure TfrmMain.con1Login(Sender: TObject; Username, Password: string);
begin
con1.Properties['User ID'].Value := Username;
con1.Properties['Password'].Value := Password;
end;
Kako radi?
- U događaju
FormShowse postavlja provajder, a osnovna obeležja veze (Data SourceiInitial Catalog) čitaju se iz fajlasetup.inikoji stoji pored programa. - Ako je u fajlu uključena Windows autentikacija (
Integrated Security), veza koristiSSPIiLoginPromptse isključuje, jer korisničko ime i lozinka nisu potrebni. - U suprotnom se koristi SQL Server autentikacija i
LoginPromptse uključuje. Kada program otvori vezu (OpeniliConnected := True), korisnik dobija prozor za unos korisničkog imena i lozinke. - Posle unosa se poziva događaj
OnLogin(u primerucon1Login), koji primljene vrednosti upisuje u obeležjaUser IDiPassword.
Vrednosti treba upisivati preko kolekcije Properties, a ne menjanjem teksta veze (ConnectionString), na primer funkcijom StringReplace. Izmena samog teksta veze u ovom slučaju ne radi.
Primer INI fajla
Kod čita odeljak [database] iz fajla setup.ini:
[database] Data Source=SERVER\SQLEXPRESS Initial Catalog=MojaBaza Integrated Security=0
ReadBool vrednost 1 tumači kao True, a 0 kao False. Za Windows autentikaciju dovoljno je upisati Integrated Security=1.
Na šta treba paziti
- Standardni prozor za prijavu dolazi iz jedinice
DBLogDlg(u novijim verzijama DelphijaVcl.DBLogDlg), pa ona mora biti uključena uuseslistu. - Provajder
SQLOLEDBje zastareo. Za nove programe Microsoft preporučuje OLE DB Driver for SQL Server (provajderMSOLEDBSQL), a u ovom kodu se menja samo prva linija. Persist Security Info = Trueostavlja lozinku u tekstu veze i posle povezivanja. To ima smisla samo ako program kasnije ponovo koristi isti tekst veze; u suprotnom je bezbednijeFalse.
Podešavanje veze sa bazom deo je gotovo svakog desktop programa koji radi sa podacima. Šta još obuhvata izrada takvih programa opisano je u tekstu o izradi programa.
Ostavite odgovor