R
Romich41
Здравствуйте! У меня проблема – НЕ МОГУ РАЗОБРАТЬСЯ в программе(я начинал делать, но мне помогли и всё почти что переделали…а тех людей я теперь найти не могу=(((().
Посмотрите я правильно понимаю код программы (смотрите комментарии).
И так начнем с OtdelKadrov:
Затем появляется форма авторизации, где необходимо ввести логин и пароль. Ну здесь впринципе все понятно.
Идем далее…появляется главное окно программы и код этой формы следующий:
Все компоненты АДО для даботы с БД располагаются в ДатаМодуле и вот его код:
Затем можно открыть расширенный просмотр инфы о сотруднике:
Здесь располагаются кнопки ДОБАВИТЬ, УДАЛИТЬ, РЕДАКТИРОВАТИ и т.д.
Эти кнопки подключены к экшенам ActionList1. В ActionList1 создана категория Dataset, содержащая следующие экшены – скрин 2. Я выбираю например экшен Rabinsert захочу в его события и ничего не вижу в OnExecute!!! А как тогда ваще работают эти экшены???Где их код????
Затем я решил создать отчет, создал форму Printing и на ней разбросал и подключил компоненты QReport. А затем на кнопку написал:
Но ничего не происходил..не отображается ничего=(
Люди добрые помоги разобраться!!!! ПОЖАЙЛУСТО!!!!
Посмотреть вложение ___1.rar
Посмотрите я правильно понимаю код программы (смотрите комментарии).
И так начнем с 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