Здравствуйте!
Скажу сразу, я только начинаю разбираться в Delphi.
Загвоздка в том, что не могу придумать как загрузить данные из БД в массив. Видел на форуме такую же тему с решением, но она мне не совсем подходит (или я просто не понимаю еще как его реализовать).
У меня есть простая форма авторизации в приложении. Необходимо реализовать ее функционал с помощью класса и БД.
Ниже листинг класса и формы авторизации
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2, Unit4, Unit5, DB, ADODB, Grids, DBGrids;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
ADOQuery1: TADOQuery;
DataSource2: TDataSource;
DBGrid2: TDBGrid;
Button2: TButton;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
log:string;
pas:string;
Login:string;
Password:string;
LoP:TlistLogPas;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var j:integer;
begin
LoP.Create;
form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Text:='SELECT * FROM UserName ;'; // БД с двумя полями Login и Password
form1.ADOQuery1.Active:=True;
form1.ADOQuery1.Open;
log:='admin';
pas:='12345';
SetLength(LoP.List,Form1.AdoQuery1.RecordCount);
while not Form1.AdoQuery1.Eof
do begin
Lop.List[j] := lop.AddUser(TUser.Create(Form1.AdoQuery1.Fields[0].AsString,Form1.AdoQuery1.Fields[1].AsString)); // как-то очень криво попытался заполнить массив
Form1.AdoQuery1.Next;
end;
end;
{procedure TForm1.Button1Click(Sender: TObject);
begin
Login:=AnsiLowerCase(edit1.Text);
Password:=edit2.Text;
If (Login = log) and (Password = pas) then begin
form2.Show;
form1.hide;
end
else ShowMessage('Íåâåðíûé ëîãèí èëè ïàðîëü')
end;}
procedure TForm1.Edit2Change(Sender: TObject);
begin
edit2.PasswordChar:='*';
end;
end.
-----------------------------------------------------------------------------
Юнит с классом
unit Unit5;
interface
Uses Unit4, Dialogs;
type
TlistLogPas = class
List:array of TUser;
size: integer;
ListCount: Integer;
Constructor Create();
Procedure AddUser(Aur:TUser);
Function FindUser(Fur1,Fur2:String):string;
end;
implementation
constructor TlistLogPas.Create();
begin
size := 1;
setLength(List, size);
ListCount := 0;
end;
procedure TListLogPas.AddUser(Aur:TUser);
begin
if ListCount >= size-1 then
begin
size := 2*size;
setLength(List, size);
end;
List[ListCount] := Aur;
ListCount := ListCount + 1;
end;
Function TlistLogPas.FindUser(Fur1,Fur2:String):string;
var i: integer;
begin
result:='';
for i := 0 to ListCount - 1 do
begin
if (List[i].Login = Fur1) and (List[i].Password = Fur2) then
begin
Result:='1';
break;
end
else ShowMessage('Ëîãèí èëè ïàðîëü ââåäåí íå âåðíî');
end;
end;
end.
На любые вопросы по коду отвечу. Просто не знаю где еще какие комментарии дописать.
Помогите пожалуйста разобраться новичку
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TUser = class
Login: String;
Password: String;
Constructor Create(NewLogin,NewPassword:string);
end;
implementation
constructor TUser.Create(NewLogin, NewPassword: string);
begin
Login:=NewLogin;
Password:=NewPassword;
end;
end.
MAD: учимся пользоваться тегами!