Как работает программа

  • Автор темы Romich41
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Romich41

#1
Здравствуйте! У меня проблема – НЕ МОГУ РАЗОБРАТЬСЯ в программе(я начинал делать, но мне помогли и всё почти что переделали…а тех людей я теперь найти не могу=(((().
Посмотрите я правильно понимаю код программы (смотрите комментарии).
И так начнем с OtdelKadrov:
Код:
program OtdelKadrov;

uses
Forms,
Controls,
Main in 'Main.pas' {Form1},
AllInfa in 'AllInfa.pas' {FormAllInf},
Login in 'Login.pas' {LoginForm},
DataModule in 'DataModule.pas' {DataModule3: TDataModule},
PrintP in 'PrintP.pas' {Printing};

{$R *.res}

begin
Application.Initialize;
LoginForm := TLoginForm.Create(nil); //создание формы LoginForm
try								  //если верно
if LoginForm.ShowModal <> mrOk then //если форма ????
exit;							 //то закрываем форму
finally
LoginForm.Free;					 //освобождает память???
end;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TFormAllInf, FormAllInf);
Application.CreateForm(TDataModule3, DataModule3);
Application.CreateForm(TPrinting, Printing);
Application.Run;

end.
Затем появляется форма авторизации, где необходимо ввести логин и пароль. Ну здесь впринципе все понятно.

Идем далее…появляется главное окно программы и код этой формы следующий:
Код:
procedure TForm1.edFIOChange(Sender: TObject);
begin
//поиск по ФИО в таблице Rab
RabConfigure();
end;

procedure TForm1.btDESCClick(Sender: TObject);
begin
//сортировка по убыванию
FSort := tsDest;
RabConfigure();
end;

procedure TForm1.btASCClick(Sender: TObject);
begin
//сортировка по возрастанию
FSort := tsAsc;
RabConfigure();
end;

procedure TForm1.btAllInfaClick(Sender: TObject);
begin
//открытие окна с полной информацией о сотруднике
FormAllInf.Show;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FSort := tsNo; //?
end;

procedure TForm1.RabConfigure;
var
s: string;
begin
s := 'SELECT * FROM Rab ';						 //запрос на выборку всех дынных из таблицы Rab
if edFIO.Text <> '' then							//если edFIO не пуст
s := s + 'WHERE ФИО LIKE "' + edFIO.Text + '%" '; //то присваиваем s запрос на выбоку ФИО

case FSort of
tsDest: s := s + ' ORDER BY ФИО DESC';  //сортировка по убыванию
tsAsc: s := s + ' ORDER BY ФИО ASC';	 //сортировка по возрастанию
end;

DataModule3.SpisokRabQuery.Active := false; //отключение SpisokRabQuery
DataModule3.SpisokRabQuery.SQL.Text := s;	//заносим в SQL значение переменной s
DataModule3.SpisokRabQuery.Active := true;  //включение SpisokRabQuery

end;
Все компоненты АДО для даботы с БД располагаются в ДатаМодуле и вот его код:
Код:
procedure TDataModule3.DataModuleCreate(Sender: TObject); //при создании проектом объекта DataModule
begin
SpisokRabQuery.Open; //исполнение запроса SpisokRabQuery
AdresQuery.Open;	 //исполнение запроса AdresQuery
FamilyQuery.Open;	 //исполнение запроса FamilyQuery
PassportQuery.Open;  //исполнение запроса PassportQuery
OtpyskQuery.Open;	 //исполнение запроса OtpyskQuery
NazPerQuery.Open;	 //исполнение запроса NazPerQuery
end;

procedure TDataModule3.SpisokRabQueryAfterScroll(DataSet: TDataSet); //при перемещении по записям БД
var
k: Integer;				  //объевление переменной k типа integer

procedure ListSubSet(qu: TADOQuery); //процедура для присваивания кода работника
begin
with qu do				 //с объектом qu типа TADOQuery делаем следующие действия
begin
Close;					//закрываем созданный объект qu типа TADOQuery
Parameters[0].Value := k; //присваиваем 1-му столбцу переменную k
Open;					 //открываем созданный объект qu типа TADOQuery
end;
end;

begin
k := SpisokRabQuery.FieldByName('КодРаботника').AsInteger; //заносим в переменную k значение поля КодРаботника
ListSubSet(AdresQuery);	//присваивание кода работника для объекта AdresQuery
ListSubSet(FamilyQuery);  //присваивание кода работника для объекта FamilyQuery
ListSubSet(PassportQuery); //присваивание кода работника для объекта PassportQuery
ListSubSet(NazPerQuery);  //присваивание кода работника для объекта NazPerQuery
ListSubSet(OtpyskQuery);  //присваивание кода работника для объекта OtpyskQuery
end;

procedure TDataModule3.SpisokRabQueryAfterPost(DataSet: TDataSet);
var
k: Integer; //объевление переменной k типа integer

procedure SubSetPost(ds: TDataSource); //процедура для ???
begin
with ds.DataSet do //с объектом ds типа TDataSource делаем следующие действия
begin
if State in [dsEdit, dsInsert] then //если DataSet объекта ds находится в состоянии редактирования или добаления, то
begin
FieldByName('КодРаботника').AsInteger := k; //присваиваем полю КодРаботника переменную k
Post;				 //запись производится в конец таблицы ??? а при редактировании тоже???
ds.AutoEdit := false; //защита от случайного изменения данных
end;
end;
end;

begin
k := SpisokRabQuery.FieldByName('КодРаботника').AsInteger; //заносим в переменную k значение поля КодРаботника
SubSetPost(AdresSource);
SubSetPost(FamilySource);
SubSetPost(PassportSource);
SubSetPost(NazPerSource);
SubSetPost(OtpyskSource);
end;

procedure TDataModule3.SpisokRabQueryAfterEdit(DataSet: TDataSet); //после редактирования
begin
AutoEditSubSets(true); //???
end;

procedure TDataModule3.SpisokRabQueryAfterCancel(DataSet: TDataSet); //при отмене редактирования
begin
AutoEditSubSets(false); //???
end;

procedure TDataModule3.AutoEditSubSets(IsAuto: boolean);  // откуда такая функция AutoEditSubSets????
begin
AdresSource.AutoEdit := IsAuto;
FamilySource.AutoEdit := IsAuto;
PassportSource.AutoEdit := IsAuto;
NazPerSource.AutoEdit := IsAuto;
end;
Затем можно открыть расширенный просмотр инфы о сотруднике:
Код:
procedure TFormAllInf.ActionList1Update(Action: TBasicAction; var Handled: Boolean);
var
IsEditing: boolean;
begin
IsEditing := (DataModule3.SpisokRabQuery.State in [dsEdit, dsInsert]);
PrintButton.Enabled := not IsEditing;
if not IsEditing then
begin
OtpuskEditButton.Enabled := false;
OtpuskInsertButton.Enabled := false;
OtpuskCancelButton.Enabled := false;
end
else
begin
OtpuskEditButton.Enabled := OtpuskEdit.Enabled;
OtpuskInsertButton.Enabled := OtpuskEdit.Enabled;
OtpuskCancelButton.Enabled := OtpuskCancel.Enabled;
end;

end;

procedure TFormAllInf.PrintButtonClick(Sender: TObject);
begin
Printing.QuickRep1.PreviewModal;
//Printing.ShowModal;
end;
Здесь располагаются кнопки ДОБАВИТЬ, УДАЛИТЬ, РЕДАКТИРОВАТИ и т.д.
Эти кнопки подключены к экшенам ActionList1. В ActionList1 создана категория Dataset, содержащая следующие экшены – скрин 2. Я выбираю например экшен Rabinsert захочу в его события и ничего не вижу в OnExecute!!! А как тогда ваще работают эти экшены???Где их код????

Затем я решил создать отчет, создал форму Printing и на ней разбросал и подключил компоненты QReport. А затем на кнопку написал:
Код:
Printing.QuickRep1.PreviewModal;
Но ничего не происходил..не отображается ничего=(

Люди добрые помоги разобраться!!!! ПОЖАЙЛУСТО!!!!
Посмотреть вложение ___1.rar
______1.JPG
______2.JPG
______3.JPG
 

Вложения

C

caramba

#2
А что программа то должна делать?
ПРосто показывать список людей и отчет по ним?
 
Статус
Закрыто для дальнейших ответов.