Что касается шифров - я понял. Хромает архитектура.
Код:
procedure TFormMain.FormCreate(Sender: TObject);
begin
with TFormLogin.Create(Self) do
try
if not Authorization(Users) then // Users - это DataSet с информацией о всех пользователях, хранимых в БД
Halt;
finally
Free;
end;
end;
После HALT - сыпятся ошибки доступа к памяти. Я понимаю, что это очень жёсткое прерыванием процедуры

Чем заменить?
Если Application.Terminate, то форма успевает "мигнуть", не по феншую
В самом методе Authorization я предполагаю:
Код:
while Result <> true do
Result := ShowModal = mrOK // пока нажимают ОК (пытаясь войти)
if Users.Locate('Login;Cash', VarArrayOf([edLogin.Text, edCash.Text]),
[]) then // если нашёлся, тогда выходим из цикла, возвращаем true
Result := true;
end;
т.е. сам метод возвращает либо true (В случае авторизации) либо false (В случае, когда надо закрывать приложение нафиг).
От идеи с уже открытым окном и кнопкой авторизации пришлось отказаться в силу "указаний руководства". Не хотят показывать даже GUI программы.