Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

по дисциплине: Базы данных



Настройка компонентов, ввод/изменение данных и создание отчетов

(спец. 220100)

«Утверждено»

на заседании редсовета

Протокол № _________

«___»____________ 20___ г.

Байконур 2012

Содержание

  Цель работы  
  Настройка компонентов  
  Реализация ввода\изменения данных в отдельном окне  
  Создание отчетов  
  Постановка задачи  
  Структура отчета  
  Список литературы  

Цель работы:

Изучить возможность настройки внешнего вида компонентов, реализация ввода\изменения записей в отдельном окне, а также создание отчетов.

1 Настройка компонентов

Все действия производятся с БД и приложением созданным в ходе лабораторной работы № 1, 2.

а) Приведите к окончательному виду главную форму приложения

В свойстве Caption главной формы наберите название вашего приложения. В данном случае «БД “DreamHome”».

Установите фиксированный размер формы: устанавливаем свойства BorderStyle:= bsSingle и BorderIcons -> biMaximize:= false.

Зададим расположение формы при старте приложения:

устанавливаем свойство Position:= poDesktopCenter.

б) Отредактируем кнопки компонента DBNavigator

Для этого находим свойство VisibleButtons и убираем ненужные кнопки: nbInsert (вставка), nbDelete (удаление), nbEdit (редактирование), nbPost (применить изменения), nbCancel (отменить изменения), nbRefresh (освежить).

в) Отредактируем компонент DBGrid

В подчиненной таблице «Сотрудники» столбец «Номер_отделения» дублирует текущий номер отделения главной (родительской таблицы), поэтому можно скрыть этот столбец: для этого дважды щелкаем на компоненте DBGrid после чего нажимаем на треью кнопку справа в результате чего отобразится окно со списком столбцов

В этом окне можно задавать различные свойства столбцов. В данном случае выбирается столбце с номером 7 и выставляется его свойство Visible. Также можно менять названия заголовков столбцов заданных по умолчанию. Для этого используется свойство Title.


2 Реализация ввода\изменения данных в отдельном окне

В приложениях баз данных изменение записей (редактирование, удаление, вставка) в самой таблице обычно не разрешается. Так как такой способ не удобен и приводит к ошибкам. Для этих целей каждая запись открывается в отдельном окне где и производятся все необходимые манипуляции с данными.

Для начала выставим свойство таблиц DBGrid1 и DBGrid2 ReadOnly:= true. Таким образом мы запретили вносить изменения через сами таблицы, в них теперь можно только просматривать записи.

Добавим три кнопки на форму и обозначим их соответственно: «Вставка», «Редактирование» и «Удаление».

Добавим к нашему приложению еще одну форму: File -> New -> Form-Delphi

Дважды щелкаем на компоненте ADOQuery1 после чего должно появиться маленькое окошко. В нем щелкнуть правой кнопкой мыши и выбрать пункт «Add All Fields». Откроем нашу новую форму

Теперь зайдите в пункт File -> Use Unit и выбиретите Unit1.

Перетащим все поля из окошка на форму и упорядочим их. Выставте свойства новой формы: BorderStyle:= bsSingle, BorderIcons -> biMaximize, biMinimize:= false, Position:= poDesktopCenter. Добавим две кнопки на новую форму «OK» и «Cancel».

Переходим в обработчик закрытия формы: Events -> OnClose и прописываем

if Form1.ADOQuery1.State in [dsInsert,dsEdit]

then Form1.ADOQuery1.Cancel;

Form1.Show;

Если выдает ошибку в списке модулей в самом начале программы добавляем модуль «DB».

Теперь переходим в обработчик кнопк «OK» и прописываем

if DBEdit1.Text <> '' then

Begin

Form1.ADOQuery1.Post;

Self.Close;

Form1.Show;

End

else ShowMessage('Нельзя вставить пустую строку!');

В обработчике кнопки «Cancel» прописываем

Form1.ADOQuery1.Cancel;

Self.Close;

Form1.Show;

Теперь перейдите в Unit1 и подключитесь к новой форме: для этого File -> Use Unit и название вашего нового модуя (в данном случае Unit2). В обработчике кнопки «Добавить» пропишите

Form2.Caption:= 'Добавление новой записи';

ADOQuery1.Insert;

self.Hide;

Form2.Show;

Теперь в обработчике кнопки «Редактировать» пропишите

Form2.Caption:= Редактирование записи';

ADOQuery1.Edit;

self.Hide;

Form2.Show;

Для реализации редактирования больше ничего не надо, все остальные действия совпадают с действиями по вставке новой записи.

В обработчике кнопки «Удалить» прописываем

if MessageDlg('Вы уверены?',mtConfirmation,[mbYes,mbCancel],0) = mrYes then

begin

ADOQuery1.Delete;

end;

Таким образом перед удалением будет выдаваться запрос.

Реализовать все вышеописанное и для таблицы «Сотрудники».


3 Создание отчетов

Размещаем на форме компонент TwordApplication. Задаем его имя (свойство Name) «wrdReport». Зададим константу которая будет использоваться для перехода на новую строку при создании отчета. Константу можно описать в листинге программы сразу после списка подключаемых модулей (слово uses)

const CRLF = #13#10;

В разделе public описания формы (это в самом начале листинга программы) описываем заголовки наших функций, которые будут использоваться для создания нашего отчета:

procedure CreateWordDoc(FontName: String; FontSize: Integer);

function CreateTable(FontName: String; FontSize, Rows, Cols: Integer): Table;

procedure AddRow(Tbl: Table);

function CreateActReport(): Integer;procedure AddString(Line: String; Align: Integer);

На форме размещаем кнопку по нажатию которой будет формироваться отчет.

Далее в листинге программы описываем наши вспомогательные функции:

{функция создания нового документа word}

procedure TFmMain.CreateWordDoc(FontName: String; FontSize: Integer);

begin

wrdReport.Connect;

wrdReport.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);

wrdReport.Options.CheckSpellingAsYouType:= False;

wrdReport.Options.CheckGrammarAsYouType:= False;

wrdReport.Selection.WholeStory;

wrdReport.Selection.ParagraphFormat.SpaceAfter:= 0;

wrdReport.Selection.ParagraphFormat.SpaceBefore:= 0;

wrdReport.Selection.Font.Name:= FontName;

wrdReport.Selection.Font.Size:= FontSize;

end;

{функция добавления строки в документ}

procedure TFmMain.AddString(Line: String; Align: Integer);

var

CollapseEnd: OleVariant;

begin

CollapseEnd:= wdCollapseEnd;

with wrdReport do begin

Selection.InsertAfter(Line + CRLF);

Selection.ParagraphFormat.Alignment:= Align;

Selection.Collapse(CollapseEnd);

end;

end;

function TFmMain.CreateTable(FontName: String; FontSize, Rows, Cols: Integer): Table;

var

CollapseEnd: OleVariant;

Tbl: Table;

Rng: Range;

begin

wrdReport.Selection.ParagraphFormat.LineSpacingRule:= wdLineSpaceSingle;

Rng:= wrdReport.Selection.Range;

Tbl:= wrdReport.Selection.Range.Tables.Add(Rng, Rows, Cols, EmptyParam, EmptyParam);

Tbl.Borders.InsideLineStyle:= wdLineStyleSingle;

Tbl.Borders.OutsideLineStyle:= wdLineStyleSingle;

Tbl.Range.Font.Name:= FontName;

Tbl.Range.Font.Size:= FontSize;

Tbl.Rows.AllowBreakAcrossPages:= 0;

CollapseEnd:= 1;

wrdReport.Selection.Collapse(CollapseEnd);

Result:= Tbl;

end;

procedure TFmMain.AddRow(Tbl: Table);

var

InsertRow: OleVariant;

CollapseEnd: OleVariant;

begin

with wrdReport do begin

Tbl.Cell(Tbl.Rows.Count, 1).Select;

InsertRow:= 1;

Selection.InsertRowsBelow(InsertRow);

CollapseEnd:= 1;

Selection.Collapse(CollapseEnd);

end;

end;

{ ну и собственно функция создания отчета}

function TForm1.CreateActReport(): Integer;

// Перевод сантиметров в пиксели для Word

function SmToPixels(Value: Single): Single;

begin

with wrdReport do begin

Result:= (Application as _Application).CentimetersToPoints(Value);

end;

end;

var

CollapseEnd, Align, Leader, PageBreak, ShiftCells: OleVariant;

Rng: Range;

Tbl: Table;

InsertRow, Unit_: OleVariant;

i, j: Integer;

Cell_: Cell;

OrgName, MainHumanNameTitle, MainHumanName, AccountHumanNameTitle, AccountHumanTitle,

AccountHumanName: String;

StrValue: String;

tempStr:string;

v:OleVariant;

MyRange:Range;

begin

CollapseEnd:= wdCollapseEnd; // в Word = стрелка вправа после выделенного фрагмента

PageBreak:= wdPageBreak; // в Word = CTRL + Enter

Result:= MessageBox(Handle,

'ВНИМАНИЕ!' + CRLF + CRLF +

'Данная функция работает в ТЕСТОВОМ РЕЖИМЕ!' + CRLF +

'Для начала работы закройте все документы Microsoft Word.' + CRLF + CRLF +

'Продолжить?',

'Предупреждение', MB_YESNO + MB_ICONWARNING);

// Если в вышедшем сообщении нажали НЕТ, то ничего не делаем дальше

if (Result = IDNO) then Exit;

// Инициализируем документ Word

CreateWordDoc('Arial', 11);

// установка полей страницы

with wrdReport do

begin

ActiveDocument.PageSetup.TopMargin:= SmToPixels(2);

ActiveDocument.PageSetup.BottomMargin:= SmToPixels(2);

ActiveDocument.PageSetup.LeftMargin:= SmToPixels(2);

ActiveDocument.PageSetup.RightMargin:= SmToPixels(1);

end;

// установка одинарного интервала

wrdReport.Selection.ParagraphFormat.LineSpacingRule:= wdLineSpaceSingle;

wrdReport.Selection.Collapse(CollapseEnd);

// необходимо после установки одинарного интервала

wrdReport.Selection.Font.Size:= 9;

wrdReport.Selection.Font.Bold:= wdToggle; // жирный

wrdReport.Selection.Font.Size:= 12;

AddString('', wdAlignParagraphCenter);

wrdReport.Selection.Font.Bold:= 1;

AddString('ОТЧЕТ', wdAlignParagraphCenter);

AddString('за ______ _______________ 20__ года', wdAlignParagraphCenter);

wrdReport.Selection.Font.Bold:= 0;

AddString('', wdAlignParagraphCenter);

Tbl:= CreateTable('Arial', 6, 10, 6);

with wrdReport do

begin

Tbl.Range.Rows.Item(1).Select;

Selection.ParagraphFormat.Alignment:= wdAlignParagraphCenter;

Selection.Cells.VerticalAlignment:= wdCellAlignVerticalCenter;

Tbl.Cell(1, 1).Range.Text:= '№ п\п';

Tbl.Columns.Item(1).SetWidth(SmToPixels(1.0), wdAdjustNone);

Tbl.Cell(1, 2).Range.Text:= 'Номер сотрудника';

Tbl.Cell(1, 2).Select;

Selection.Orientation:= 2;

Tbl.Columns.Item(2).SetWidth(SmToPixels(2.5), wdAdjustNone);

Tbl.Cell(1, 3).Range.Text:= 'ФИО';

Tbl.Columns.Item(3).SetWidth(SmToPixels(3.0), wdAdjustNone);

Tbl.Cell(1, 4).Range.Text:= 'Должность';

Tbl.Columns.Item(4).SetWidth(SmToPixels(3.0), wdAdjustNone);

Tbl.Cell(1, 5).Range.Text:= 'Оклад';

Tbl.Columns.Item(5).SetWidth(SmToPixels(3.0), wdAdjustNone);

Tbl.Cell(1, 6).Range.Text:= 'Дата рождения';

Tbl.Columns.Item(6).SetWidth(SmToPixels(3.0), wdAdjustNone);

end;

{дальше в цикле заполняем таблицу необходимыми данными. В данном случае списком сотрудников которые будем брать из соответствующего ADOQuery}

for i:=1 to ADOQuery2.RecordCount do

begin

Tbl.Cell(i,1).Range.Text:= IntToStr(i);

Tbl.Cell(i,2).Range.Text:= ADOQuery2.FieldByName('Номер_сотрудника').AsString;

Tbl.Cell(i,3).Range.Text:= ADOQuery2.FieldByName('Имя').AsString + ADOQuery2.FieldByName('Фамилия').AsString;

... (заполните остальные столбцы. Для наглядности надо будет немножко позаполнять таблицу «Сотрудники».)

end;

Tbl.Select;

wrdReport.Selection.Collapse(collapseEnd);

wrdReport.Selection.InsertBreak(EmptyParam);

wrdReport.Visible:= True;

wrdReport.Disconnect;

end;

4 Постановка задачи

Реализовать все вышеописанные действия.
5 Структура отчета

Отчет должен содержать:

- титульный лист;

- цель работы, задание;

- порядок выполнения лабораторной работы;

- текст программы графического приложения;

- результат работы;

- выводы.





Дата публикования: 2014-11-02; Прочитано: 503 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.023 с)...