LoginPrompt := True на компоненти TADOConnection у Delphi-ју приказује стандардни прозор за унос корисничког имена и лозинке пре повезивања на SQL Server. Овде је пример како да се то правилно искористи заједно са подешавањима везе из INI фајла.
Пример кода
Дуго ми није било јасно шта LoginPrompt := True заправо ради. Исправан начин да се користи је следећи:
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;
Како ради
- У догађају
FormShowсе поставља провајдер, а основна обележја везе (Data SourceиInitial Catalog) читају се из фајлаsetup.iniкоји стоји поред програма. - Ако је у фајлу укључена Windows аутентикација (
Integrated Security), веза користиSSPIиLoginPromptсе искључује, јер корисничко име и лозинка нису потребни. - У супротном се користи SQL Server аутентикација и
LoginPromptсе укључује. Када програм отвори везу (OpenилиConnected := True), корисник добија прозор за унос корисничког имена и лозинке. - После уноса се позива догађај
OnLogin(у примеруcon1Login), који примљене вредности уписује у обележјаUser IDиPassword.
Вредности треба уписивати преко колекције Properties, а не мењањем текста везе (ConnectionString), на пример функцијом StringReplace. Измена самог текста везе у овом случају не ради.
Пример INI фајла
Код чита одељак [database] из фајла setup.ini:
[database] Data Source=SERVER\SQLEXPRESS Initial Catalog=MojaBaza Integrated Security=0
ReadBool вредност 1 тумачи као True, а 0 као False. За Windows аутентикацију довољно је уписати Integrated Security=1.
На шта треба пазити
- Стандардни прозор за пријаву долази из јединице
DBLogDlg(у новијим верзијама Delphi-јаVcl.DBLogDlg), па она мора бити укључена уusesлисту. - Провајдер
SQLOLEDBје застарео. За нове програме Microsoft препоручује OLE DB Driver for SQL Server (провајдерMSOLEDBSQL), а у овом коду се мења само прва линија. Persist Security Info = Trueоставља лозинку у тексту везе и после повезивања. То има смисла само ако програм касније поново користи исти текст везе; у супротном је безбеднијеFalse.
Подешавање везе са базом део је готово сваког десктоп програма који ради са подацима. Шта још обухвата израда таквих програма описано је у тексту о изради програма.
Оставите одговор