Как сохранить логин

mariko
Дата: 19.05.2011 11:35:38
Добрый день.

Помогите советом, пожалуйста.

Имеется форма авторизации Form6, которая запускается до основной формы Form1.
На Form6 есть два поля для ввода Логина и пароля и компоненты IBDatabase, IBTransaction,IBQuery.
Запрос проверяет наличие и соответствие введенных Логина и пароля имеющимся в таблице в БД.
После удачного прохождения авторизации Form6 закрывается и запускается основная форма Form1.

Проблема в том, что нужно значение поля логин, вводимого пользователем передать в один из запросов,
имеющихся в DataModule, который запускается после закрытия Form6. Но по скольку приложение еще не запущено,
и ни одна из форм не создана передать его просо некуда.
А если объявить публичную переменную в Unit6 и присвоить ей значение логина, то обратиться к ней все-равно не получается,
форма авторизации (Form6) при правильных логине и пароле убивается и становится недоступной.

Хочу сохранять логин во внешнюю dll, но не знаю можно ли это делать и если да то каким образом?
А может быть есть другие варианты выцарапать значение пароля с формы.
Ramin Hashimzade
Дата: 19.05.2011 11:38:00
а в чем проблема??? при успешной авторизации создай датамодуль и дай на один глобальной переменной это значени...
Dimitry Sibiryakov
Дата: 19.05.2011 11:38:12

mariko
А если объявить публичную переменную в Unit6 и присвоить ей значение логина, то обратиться
к ней все-равно не получается, форма авторизации (Form6) при правильных логине и пароле
убивается и становится недоступной.

А теперь вопрос на засыпку: что общего между формой и глобальной переменной. И как
глобальная переменная может стать недоступной.

Posted via ActualForum NNTP Server 1.4

Ramin Hashimzade
Дата: 19.05.2011 11:38:32
а в чем проблема??? при успешной авторизации создай датамодуль и дай на один глобальной переменной это значени... потом убей форма6
defecator
Дата: 19.05.2011 11:38:38
mariko
Добрый день.

Помогите советом, пожалуйста.

Имеется форма авторизации Form6, которая запускается до основной формы Form1.
На Form6 есть два поля для ввода Логина и пароля и компоненты IBDatabase, IBTransaction,IBQuery.
Запрос проверяет наличие и соответствие введенных Логина и пароля имеющимся в таблице в БД.
После удачного прохождения авторизации Form6 закрывается и запускается основная форма Form1.

Проблема в том, что нужно значение поля логин, вводимого пользователем передать в один из запросов,
имеющихся в DataModule, который запускается после закрытия Form6. Но по скольку приложение еще не запущено,
и ни одна из форм не создана передать его просо некуда.
А если объявить публичную переменную в Unit6 и присвоить ей значение логина, то обратиться к ней все-равно не получается,
форма авторизации (Form6) при правильных логине и пароле убивается и становится недоступной


НУ и каша....

Объяви переменные для хранения логина/пароля в разделе VAR юнита, который содержит твой DataModule.
Это как вариант.
Ega
Дата: 19.05.2011 11:40:26
mariko,

Создаёшь первым DataModule
Потом - свою форму
Потом - главную форму
Внутри датамодуля пишешь


type

  TDataModule1 = class (TDataModule)
  .....

  public
    property Login: string read FLogin write FLogin;
  end;
Anatoly Podgoretsky
Дата: 19.05.2011 12:08:04
Dimitry Sibiryakov
mariko
А если объявить публичную переменную в Unit6 и присвоить ей значение логина, то обратиться
к ней все-равно не получается, форма авторизации (Form6) при правильных логине и пароле
убивается и становится недоступной.

А теперь вопрос на засыпку: что общего между формой и глобальной переменной. И как
глобальная переменная может стать недоступной.

Ты что предлагаешь разделить интерфейс и данные, но это же сложно.
mariko
Дата: 19.05.2011 13:07:32
За критику, конечно, спасибо, но
вот код формы авторизации:

private
    { Private declarations }
public
class function Execute : boolean;
end;

var
Form6: TForm6;

implementation

{$R *.dfm}

class function TForm6.Execute: boolean;
begin
with TForm6.Create(nil) do
try
Result := ShowModal = mrOK;
finally
Free;
end;
end;


procedure TForm6.Button1Click(Sender: TObject);
begin
If (LoginEdit.Text<>'') and (PasswordEdit.Text<>'') then
begin
Query.Active:=false;
Query.Params.ParamByName('log').Value:=LoginEdit.Text;
Query.Active:=true;
If Query.RecordCount<>0 then
begin
If Query.FieldByName('PASSW').AsString=PasswordEdit.Text then
begin ModalResult := mrOK
end
else ModalResult := mrAbort;
end
else Application.MessageBox('Не верный логин', 'Ошибка');
end
else Application.MessageBox('Введите логин и пароль', 'Ошибка');
end;


И если я здесь в интерфейсной части объявляю глобальную переменную, то при попытке обращения к ней получаю "Access Violation...".

А вот так происходит запуск приложения если авторизация прошла успешно.

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {DataModule2: TDataModule},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {Form4},
  Unit5 in 'Unit5.pas' {Form5},
  Unit7 in 'Unit7.pas' {Form7},
  Unit6 in 'Unit6.pas' {Form6};

{$R *.res}

begin
  if TForm6.Execute then
  begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TDataModule2, DataModule2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm7, Form7);
  Application.Run;
  end
  else
  begin
  Application.MessageBox('Вы не авторизованы.', 'Ошибка') ;
  end;
end.
Gerasimenko
Дата: 19.05.2011 13:13:27
mariko,

ну, понеслось... А пятница только завтра...
defecator
Дата: 19.05.2011 13:17:19
mariko
За критику, конечно, спасибо, но
вот код формы авторизации

И если я здесь в интерфейсной части объявляю глобальную переменную, то при попытке обращения к ней получаю "Access Violation...".

А вот так происходит запуск приложения если авторизация прошла успешно


Два раза стошнило, пока код смотрел. Сорри