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

Тема в разделе "Delphi - Базы данных", создана пользователем Romich41, 26 дек 2010.

Статус темы:
Закрыта.
  1. Romich41

    Romich41 Гость

    Здравствуйте! У меня проблема – НЕ МОГУ РАЗОБРАТЬСЯ в программе(я начинал делать, но мне помогли и всё почти что переделали…а тех людей я теперь найти не могу=(((().
    Посмотрите я правильно понимаю код программы (смотрите комментарии).
    И так начнем с OtdelKadrov:
    Код (Delphi):
    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.
    Затем появляется форма авторизации, где необходимо ввести логин и пароль. Ну здесь впринципе все понятно.

    Идем далее…появляется главное окно программы и код этой формы следующий:
    Код (Delphi):
    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;
    Все компоненты АДО для даботы с БД располагаются в ДатаМодуле и вот его код:
    Код (Delphi):
    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;
    Затем можно открыть расширенный просмотр инфы о сотруднике:
    Код (Delphi):
    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. А затем на кнопку написал:
    Код (Delphi):
    Printing.QuickRep1.PreviewModal;
    Но ничего не происходил..не отображается ничего=(

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

    caramba Гость

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

Поделиться этой страницей