Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка. Базы данных (ПОВТ) 2009

.pdf
Скачиваний:
54
Добавлен:
14.02.2015
Размер:
2.1 Mб
Скачать

Cell = Sheet.getCellByPosition( 1, 6 )

Cell.setString("Сидоров Сидор Сидорович")

Cell = Sheet.getCellByPosition( 2, 6 )

Cell.setValue(75)

Cell = Sheet.getCellByPosition( 2, 7 )

Cell.setFormula("=SUM(C5:C7)/3")

FOR i=0 TO 2

Sheet.COLUMNS(i).OptimalWidth =.T.

ENDFOR

*loRange = Sheet.getCellRangeByPosition(0,3,2,6) *Document.getCurrentController().SELECT(loRange)

****Рисуем рамочку для текущей ячейки oBorder = Cell.Tableborder

oBorderline = oBorder.TopLine oBorderline.outerlinewidth = 2 oBorderline.innerlinewidth = 0 oBorderline.linedistance = 0 oBorderline.color = RGB(0,0,0) oBorder.Topline = oBorderline oBorder.Bottomline = oBorderline oBorder.Leftline = oBorderline oBorder.Rightline = oBorderline oBorder.Horizontalline = oBorderline oBorder.Verticalline = oBorderLine oBorder.Distance = 100 Cell.Tableborder = oBorder

****Нарисовали

m.FileName = FULLPATH("")+"proba.ods"

**** Сохраняем файл

LOCAL laArgs(1)

loProperty =CREATEOBJECT( "Empty" ) CoreReflection.forName("com.sun.star.beans.PropertyValue").CREATEOBJECT(@loProperty) laArgs(1) = loProperty

laArgs(1).NAME = "Overwrite" laArgs(1).VALUE = .T.

Document.storeAsURL(convertToURL(fileName), @laArgs)

RETURN .T.

FUNCTION ConvertToURL( lcFilename )

RETURN "file://" + CHRTRAN( IIF (LEFT( lcFilename, 1 ) # "/","/","")+lcFilename, "\", "/" )

Пример главной программы:

CLEAR ALL

IF [EXE] $ VERSION() _Screen.Hide

ENDIF

SET PATH TO PROGS, FORMS, LIBS, ;

MENUS, DATA, OTHER, ;

REPORTS, INCLUDE, HELP, ;

BITMAPS

51

SET POINT TO '.'

SET TALK OFF

SET ESCAPE OFF

SET DATE TO DMY

SET CENTURY ON

SET EXACT ON

SET SAFETY OFF

SET EXCLUSIVE OFF

SET DELETED ON

SET NULL ON

SET HOURS TO 24

IF [EXE] $ VERSION()

DO FORM MAINFORM NOSHOW NOREAD

DO FORM PASSWORD

ELSE

DO FORM MAINFORM

ENDIF

READ EVENTS

_Screen.caption=[Microsoft Visual FoxPro]

SET SYSMENU TO DEFAULT SET SAFETY ON _Screen.Show

RETURN

Порядок выполнения работы

1.Запустить VFP.

2.В командном окне выбрать текущий каталог set default to ?

3.Создать проект: File - New - Project

4.Во вкладке Data (Project Manager) создать БД (new) или добавить ранее созданную

(add).

5. Во вкладке Other создать меню.

Если меню вложенное, то в опции Result указать Submenu, иначе - Command.

Если команд несколько, то в этом случае указывается имя программы (например, do

vihod).

Для верхнего уровня меню необходимо указать “горячие” клавиши. Созданное меню необходимо сгенерировать: Menu - Generate.

6. Во вкладке Сode создать главную программу: CodePrograms - New

С использованием правой кнопки мыши установить опцию Set main для главной программы.

Аналогично создать другие необходимые программы.

Например:

set sysmenu to default clear events.

7. Во вкладке Classes создать классы форм. В окне New Class указать:

Class name: <имя класса>

52

Based on: form

Store In: <где сохранять>

7.1. Создать класс форм для просмотра Установить параметры класса:

Вкладка Layout: AutoCenter=.T.; Caption=<Заголовок>

Вкладка Other: Window type =1(действия выполняются только внутри окна). Добавить объект Grid для просмотра с помощью соответствующей кнопки на панели

инструментов.

Добавить управляющие кнопки (Изменить, Добавить и т.д.) с использованием Command button на панели инструментов. Во вкладке Layout для каждой кнопки подписать название (свойство Caption). Во вкладке Method, (метод Click Event) определить действия, выполняемые при нажатии кнопки .

Например, при удалении

if messagebox(iif(deleted(), “Восстановить?”, “Удалить?”), 4+32+256, “Запрос”)#6 return .f.

else return .t. endif

При выходе thisform.release

7.2. Аналогично создать класс форм для корректировки.

На форме должно быть две кнопки, например, “Принять”, “Отказаться”.

Установить свойства и методы класса, аналогично классу форм для просмотра. Для каждой кнопки во вкладке Methods определить необходимые действия, выполняемые при нажатии кнопки.

Например, для кнопки “Принять”: =TABLEUPDATE(.t.) thisform.Release

Для кнопки “Отказаться”: =TABLEREVERT() thisform.Release

8. На основе разработанных классов создать формы. Для этого выбрать пункт меню

VFP: Tools - Options - Forms - <выбрать нужный класс>.

8.1. Формы для просмотра

Во вкладке Documents добавить новую форму. Для каждой формы задать название

(Layout - Caption).

Находясь в Grid, с помощью правой кнопки мыши выполнить в контекстном меню пункт Builder. Выбрать поля, необходимые для просмотра.

Во вкладке Data (Grid) установить ReadOnly=.T.

Находясь в поле просмотра, с использованием правой кнопки мыши выполнить пункт Edit, исправить названия полей.

Примечание: если названия полей указаны при создании таблиц, то они автоматически заносятся в заголовки столбцов (в VFP8.0).

Во вкладке Layout установить Aligment=0.

На панели инструментов выбрать DataEnvironment для установки свойств таблиц, с которыми работает данная форма. Во вкладке Data (DataEnvironment) установить основную таблицу (параметр InitialSelectedAlias).

Выбрать таблицу; во вкладке Data (таблицы) установить пессимистическую буферизацию, индекс (Order).

53

Если поле для просмотра, выбрано из другой таблицы, то необходимо выполнить следующие действия:

1)на панели инструментов выбрать DataEnvironment;

2)с использованием правой кнопки мыши добавить соответствующую таблицу;

3)удалить существующую связь между таблицами и установить связь от поля внешнего ключа основной таблицы к первичному ключу справочной таблицы;

4)для справочной таблицы также установить пессимистическую буферизацию;

5)закрыть DataEnvironment;

6) выбрать поле в Grid и во вкладке Data в опции ControlSource заменить существующее значение на соответствующее поле из справочника.

Примечание: Для того чтобы правильно отображалась первая запись необходимо во вкладке Methods (формы) переопределить метод ActivateEvent:

=SEEK(<имя внешнего ключа в основной таблице>, "<имя справочной таблицы>", "<первичный ключ в справочной таблице>")

thisform.refresh

Во вкладке Method переопределить методы в ClickEvent для каждой кнопки: “Удалить”:

Select <имя основной таблицы> IF DODEFAULT()

m.tr=recno() IF DELETED() RECALL ELSE DELETE ENDIF ENDIF

go top go bottom go m.tr

thisform.Refresh

“Изменить”:

SELECT <имя основной таблицы> DO FORM corfilm

thisform.Refresh

“Добавить”:

SELECT <имя основной таблицы, например, table1> append blank

DO FORM corfilm thisform.Refresh

8.2. Формы для корректировки Аналогично, используя соответствующий класс, создать формы для корректировки.

Названия полей размещаются на форме с использованием объекта Label(Α). Для каждого объекта Label установить во вкладке Layout свойство AutoSize=.T.

Для ввода данных используется объект TextBox. Во вкладке Data (Textbox) установить ControlSource=<имя таблицы.имя поля>.

Если данные выбираются из справочной таблицы, то используется объект ComboBox. Находясь на объекте ComboBox, с использованием правой кнопки мыши выбрать

пункт Builder:

54

1) во вкладке List Items выбрать необходимую таблицу и поля (название, первичный

ключ);

2)во вкладке Style указать Drop-down list;

3)во вкладке Layout у поля первичного ключа установить нулевую ширину;

4)во вкладке Value выбрать для возврата первичный ключ, а в Field Name указать имя внешнего ключа.

Во вкладке Data (ComboBox) установить свойство Bound to=.T.

Выбрать DataEnvironment и удалить основную таблицу (ту, по которой построен grid).

9. Создайте отчет во вкладке Documents (секция Reports), используя необходимый “Мастер”. Откорректируйте полученный отчет для русификации.

Контрольные вопросы:

1.Создание командных файлов

2.Главная программа

3.Создание меню

4.Работа с переменными

5.Команды управления

6.Организация циклов

7.Массивы переменных

8.Модульность программ

9.Запуск формы

10.Подключение данных в форме (Data Environment, Cursor, Relation, InitialSelectedAlias, BufferModeOverride, Order, Filter )

11.Буферизация

12.Элемент Grid.

13.RecordSource

14.ControlSource

15.Построение таблиц с расшифровкой внешних ключей

16.TABLEREVERT(), TABLEUPDATE()

17.Вызов формы ( DO FORM <name> WITH <сп. параметров> TO <varname> )

18.Передача параметров в форму, возврат значения ( INIT -> PARAMETERS , Unload -> RETURN )

19.Модальные и немодальные окна ( WindowType)

20.Ссылка на объекты ( This, ThisForm, ThisFormSet )

21.Создание EXE-файла ( READ EVENTS )

22.Дополнительные свойства и методы:

Refresh

Activate

Release

Click Event

AvtoSize

Caption

Visible

Name

Enabled

AvtoCenter

ShowWindow ( In Screen, In Top-Level Form, As Top-Level Form)

Data Session

55

23.Классы

24.Отчеты

3.6Лабораторная работа №6

Задание

Используя концептуальную модель из второй лабораторной работы, построить

логическую модель в технологии IDEF1X. Предусмотреть поддержание ссылочной целостности. На основании логической модели разработать физическую модель для СУБД Oracle. Сгенерировать базу данных на сервере, используя созданную модель. Заполнить базу данных. Используя программу SQL Plus продемонстрировать умение составлять различные запросы к базе данных.

Теоретический материал

Модель «сущность-связь»

Одна из наиболее сложных проблем проектирования базы данных связана с тем, что проектировщики, программисты и конечные пользователи, как правило, рассматривают данные и их назначение по-разному. Разработанный проект позволит удовлетворить все требования пользователей только при том условии, что и проектировщики, и пользователи придут к единому пониманию того, как работает данная конкретная организация. Чтобы добиться полного понимания характера данных и способов их использования в организации, необходимо применять в процессе обмена информацией между специалистами общую модель, которая не усложнена техническими подробностями и не допускает двойных толкований. Одним из примеров модели такого типа является модель "сущность-связь" (Entity-Relationship model, или ER-модель). ER-моделирование представляет собой нисходящий подход к проектированию базы данных, который начинается с выявления наиболее важных данных, называемых сущностями (entities), и связей (relationships) между данными, которые должны быть представлены в модели. Затем в модель вносятся дополнительные сведения, например, указывается информация о сущностях и связях, называемая атрибутами (attributes), а также все ограничения, относящиеся к сущностям, связям и атрибутам. ER-модель может быть представлена различными способами. Одним из способов представления является методология IDEF1X.

Методология IDEF1X

Метод IDEF1, разработанный Т.Рэмей (T.Ramey), также основан на подходе П.Чена и позволяет построить модель данных, эквивалентную реляционной модели в третьей нормальной форме. В настоящее время на основе совершенствования методологии IDEF1 создана ее новая версия - методология IDEF1X. IDEF1X разработана с учетом таких требований, как простота изучения и возможность автоматизации. IDEF1X-диаграммы используются рядом распространенных CASE-средств (в частности, ERwin, Design/IDEF,

Toad Data Modeler Freeware).

Объекты модели называются сущностями (Entity). Каждая сущность является множеством подобных индивидуальных объектов, называемых экземплярами. Каждый экземпляр индивидуален и должен отличаться от всех остальных экземпляров. Атрибут выражает определенное свойство объекта. С точки зрения БД сущности соответствует таблица, экземпляру сущности - строка в таблице, а атрибуту - колонка таблицы.

Построение модели предполагает определение сущностей и атрибутов,

Сущность в методологии IDEF1X является независимой от идентификаторов или просто независимой, если каждый экземпляр сущности может быть однозначно идентифицирован без определения его отношений с другими сущностями. Сущность

56

называется зависимой от идентификаторов или просто зависимой, если однозначная идентификация экземпляра сущности зависит от его отношения к другой сущности.

Рис 4 Изображение независимых и зависимых сущностей

Каждой сущности присваивается уникальное имя и номер, разделяемые косой чертой "/" и помещаемые над блоком. Связь является логическим соотношением между сущностями. Каждая связь должна именоваться глаголом или глагольной фразой.

Связь может дополнительно определяться с помощью указания степени или мощности (количества экземпляров сущности-потомка, которое может существовать для каждого экземпляра сущности-родителя). В IDEF1X могут быть выражены следующие мощности связей:

каждый экземпляр сущности-родителя может иметь ноль, один или более связанных с ним экземпляров сущности-потомка;

каждый экземпляр сущности-родителя должен иметь не менее одного связанного с ним экземпляра сущности-потомка;

каждый экземпляр сущности-родителя должен иметь не более одного связанного с ним экземпляра сущности-потомка;

каждый экземпляр сущности-родителя связан с некоторым фиксированным числом экземпляров сущности-потомка.

Если экземпляр сущности-потомка однозначно определяется своей связью с сущностью-родителем, то связь называется идентифицирующей, в противном случае -

неидентифицирующей.

Связь изображается линией, проводимой между сущностью-родителем и сущностьюпотомком с точкой на конце линии у сущности-потомка.

Идентифицирующая связь между сущностью-родителем и сущностью-потомком изображается сплошной линией. Сущность-потомок в идентифицирующей связи является зависимой от идентификатора сущностью. Сущность-родитель в идентифицирующей связи может быть как независимой, так и зависимой от идентификатора сущностью (это определяется ее связями с другими сущностями).

Рис 5 Пример идентифицирующей связи

57

Пунктирная линия изображает неидентифицирующую связь. Сущность-потомок в неидентифицирующей связи будет независимой от идентификатора, если она не является также сущностью-потомком в какой-либо идентифицирующей связи.

Рис. 6 Пример неидентифицирующей связи

Отдельные свойства сущностей называются атрибутами. Например, сущность Staff (Персонал) может быть описана с помощью атрибутов staffNo (Табельный номер работника), name (Имя), position (Должность) и salary (Зарплата). Атрибуты содержат значения, которые описывают каждый экземпляр сущности и составляют основную часть информации, сохраняемой в базе данных.

Атрибуты изображаются в виде списка имен внутри блока сущности. Атрибуты, определяющие первичный ключ, размещаются наверху списка и отделяются от других атрибутов горизонтальной чертой.

Рис 7 Пример определения атрибутов.

Сущности могут иметь также внешние ключи (Foreign Key), которые могут использоваться в качестве части или целого первичного ключа или неключевого атрибута. Внешний ключ изображается с помощью помещения внутрь блока сущности имен атрибутов, после которых следуют буквы FK в скобках.

Рис. 8 Перенос атрибутов

58

Создание модели данных с помощью Toad Data Modeler Freeware

59

Проблемы ER-моделирования

Существуют проблемы, которые принято называть дефектами соединения (connection trap). Они обычно возникают «вследствие неправильной интерпретации смысла некоторых связей». Рассмотрим два основных типа дефектов соединения: дефект типа "разветвление" (fan trap) и дефект типа "разрыв" (chasm trap), а также способы их выявления и устранения в создаваемых ЕR-моделях. В общем случае для выявления дефектов соединения необходимо убедиться в том, что смысл каждой связи определен четко и ясно. При недостаточном понимании сути установленных связей может быть создана модель, которая не будет являться истинным представлением реального мира.

Дефекты типа "разветвление"

Дефект типа "разветвление" имеет место в том случае, когда модель отображает

связь между типами сущностей, но путь между отдельными сущностями этого типа определен неоднозначно.

Дефект типа "разветвление" возникает в том случае, когда две или несколько связей типа 1:* исходят из одной сущности. Потенциальный дефект типа ''разветвление" показан на рис. 9, на котором две связи типа 1:* (Has и Operates) исходят из одной и той же сущности

Division.

60