Программная организация связи данных

Существует множество способов программной организации связи данных. Один из них базируется на использовании команды SET RELATION TO. При этом в процессе работы система устанавливает временную (будет существовать до закрытия таблиц или насильственного сброса связи) связь двух таблиц, даже при отсутствии таковой в базе данных. Однако, при использовании этой команды необходимо организовать систему индексов в подчиненной таблице, т.к. указать связь по двум полям невозможно. Следующий программный код устанавливает связь между таблицами Customer и Orders, где Orders является подчиненной таблицей:

 

USE Customer

USE Orders

SELECT Orders

*установка текущего индексного тэга для таблицы Orders

SET ORDER TO TAG Cust_ID

SELECT Customer

*установка связи между таблицами

SET RELATION TO Cust_ID INTO Orders

При такой организации работы явным преимуществом является автоматическое поддержание целостности данных на уровне системы и сравнительно небольшой программный код. Однако использование индексов делает работу менее приятной, т.к. иногда файлы индексов повреждаются и работа становится затруднительной. Возникает необходимость процедуры переиндексации таблиц, что увеличивает сложность алгоритмов проекта и объем программного кода.

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

Для визуальной эмуляции связи данных удобно использовать команду установки фильтра данных SET FILTER TO <условие>, например:

 

SET FILTER TO ordsaled.icdorder=ordsalem.icdorder IN ordsaled

thisform.Refresh()

 

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

 

 

Располагать код эмуляции связи можно в произвольном месте, однако наиболее выгодным при использовании Grid’ов является метод AfterRowColChange, который выполняется автоматически после выбора строки в Grid. Программный код следует расположить в методе Grid’а, отвечающего за отображение данных из главной таблицы, (на рис. 14 он располагается в методе AfterRowColChange левого Grid’а).

Недостатком такого метода можно считать то, что данные на экране во втором Grid будут представлены в полном объеме, пока пользователь не произвел выбор строки в первом. Однако это можно обойти, предусмотрев насильственную установку связи в автоматически выполняемом методе (например, метод Load формы, который выполняется при запуске экранной формы). Кроме того, второй Grid и элементы его управления изначально можно сделать невидимыми (установив значение их свойства Visible равным False), а показывать только после выбора строки в первом Grid.

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

При добавлении данных в подчиненную таблицу не следует забывать, что по–умолчанию добавляется пустая строка. Соответственно, она никак не может удовлетворять условиям наложенного фильтра и отображаться на экране не будет. В этом случае необходимо насильственно присвоить значение поля, используемого для эмуляции связи, например:

 

*выбираем главную таблицу

SELECT ordsalem

*сохраняем значение поля связи во временной переменной temp

temp=ordsalem.icdorder

*возвращаемся к подчиненной таблице

SELECT ordsaled

*добавляем ПУСТУЮ запись

APPEND BLANK

*присваиваем в подчиненной таблице значение поля связи

REPLACE ordsaled.icdorder WITH temp

*обновляем форму

thisform.Refresh()

в данном случае полю icdorder в подчиненной таблице сразу после добавления записи присваивается значение, совпадающее со значением поля связи из главной таблицы. Новая строка удовлетворяет условию фильтрации и будет отображена на форме. Представленный код прописывается в кнопке «Добавить товар в заказ» на рис. 14.

Примечания:

1. При выборе типа источника данных для элемента Grid RecordSourceType = Alias, источник содержимого рабочей области не важен. Это может быть и таблица базы данных, и представление данных (как локальное, так и удаленное), и результат выполнения команды SELECT – SQL. Это важно в случаях, если в таблицах хранятся данные малопонятные пользователю.

2. Не стоит увлекаться использованием элементов табличного представления, иногда достаточно простых листовых вкладок (компонент PageFrame).

3. Следует помнить, что конечный пользователь может не обладать достаточной компетенцией как оператор ЭВМ, и снабжать все функциональные элементы подробными надписями об их действии (надпись на кнопке должна быть не просто «Добавить», а «Добавить товар»).

4. Не забывайте, что любое изменение данных в таблицах будет отображено на форме только после ее перерисовки. Можно использовать команду thisform.Refresh().

5. Позиция курсора в Grid и таблице, являющейся источником данных для него, совпадают. Т.е. не стоит слишком стремиться к получению значения из Grid’a, достаточно взять значение поля из таблицы (<переменная> = <таблица>.<поле>).

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

 

Задания

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

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

3. Создайте форму, реализующую предыдущее задание в конструкторе. Для отображения данных из главной таблицы используйте набор текстовых полей, а для подчиненной – Grid.

4. Видоизмените форму из предыдущего задания в конструкторе. Используйте для каждой таблицы отдельный компонент Grid.

5. Проведите сравнительный анализ форм, созданных в заданиях 2–4. Выделите и отразите в отчете достоинства и недостатки каждой формы.


Список литературы

1. Информационные системы: Учебное пособие для студентов вузов по специальности «Информационные системы в экономике» / под ред. Волкова В.Н. – СПб.: изд – во СПБГТУ, 1998.

2. Каратыгин С.А., Тихонов А.Ф., Тихонова Л.Н. «Visual FoxPro 6.0» – М.: ЗАО «Издательство БИНОМ», 2000.

3. Ложе И. Информационные системы. Методы и средства. – М.: изд-во «Мир», 1979.

4. Тихонов А.Ф., Тихонова Л.Н. «Visual FoxPro 5.0 (без проблем!)» – М.: Восточная Книжная Компания, 1997.

5. Методические указания для выполнению лабораторных работ по Visual FoxPro 9.0. / сост. Л.К. Скодорова, А.А. Ляху. Рыбница, 2010.

6. http://referat.ru/pub/item/23122

7. http://www.bankreferatov.ru

8. http://referat.ru/pub/item/15853

9. http://yurkovs.narod.ru/Ekolek/Tema5.htm

10. http://www.studzona.com/referats/view/13697

11. http://www.studzona.com/referats/view/13697

12. http://www.bntu.info/referat/work_6450.html

13. http://www.5ballov.ru/referats/preview/38041

14. http://www.aup.ru/books/m67/4.htm

 

 

 

 

Учебное издание

Составители: Л.К. Скодорова, А.А. Ляху

 








Дата добавления: 2015-10-29; просмотров: 749;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.011 сек.