Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
(спец. 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!