Работа с базами данных

Создание базы данных о продаваемых товарах и покупателях для отслеживания отпуска товаров со склада, а также автоматическим расчетом стоимости покупки. Администрирование базы данных. Создание псевдонима. Инструментальные средства баз данных Borland.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 06.05.2011
Размер файла 798,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Для первого случая поступим следующим образом:

Во первых, свяжем эти таблицы операционной связью (Relation, Link, Master-Detal) так, чтобы таблица «Товары» всегда была позиционирована на том товаре, который продается согласно текущей строке таблицы «Расход товара». Это позволит «всегда иметь под рукой» цену продаваемого товара.

Для этого установим у объекта TovaryTable (типа TTable) значение свойства MasterSource равным DataSource3 (который управляет таблицей Rasxod через объект RasxodTable) и значение свойства MasterFields (после щелчка на кнопку «…» появится окно редактора связей, в котором надо выбрать ключи связи KOD_TOVAR->KOD_TOVAR). Объявленная связь сразу проявится - DBGrid1 будет показывать только строку таблицы «Товары», соответствующую текущей строке в «Расход товара».

Аналогично можно связать ведомую (Detal-) таблицу «Покупатели» с ведущей (Master-) таблицей «Расход товара».

Теперь для события OnDataChange объекта DataSource3 напишем обработчик.

Object_Pascal

Borland_C++

procedure TForm1. DataSource3DataChange

(Sender: TObject; Field: TField);

var ss:INTEGER;

begin ss:= RasxodTable. FieldByName('Kolvo').Value*

TovaryTable. FieldByName('Zena').Value;

if (RasxodTable. FieldByName('Stoim').Value<>ss) AND

((RasxodTable. State=dsEdit) OR

(RasxodTable. State=dsInsert))

then RasxodTable. FieldByName('Stoim').Value:=ss;

end;

void __fastcall TForm1: DataSource3DataChange (TObject *Sender,

TField *Field)

{int ss;

ss=RasxodTable-> FieldByName («Kolvo»)-> AsInteger * TovaryTable1-> FieldByName («Zena»)-> AsInteger;

if ((RasxodTable-> FieldByName («Stoim»)-> Value!=ss)&&

((RasxodTable->State== dsEdit) ||(RasxodTable-> State==dsInsert)))

RasxodTable-> FieldByName («Stoim»)-> Value=ss;}

При этом естественно значение свойства ReadOnly столбца Stoim объекта DBGrid3 положить равным True, чтобы запретить независимые корректировки этого реквизита. С этой целью необходимо дважды щелкнуть мышью на объекте DBGrid3, вызвать редактор столбцов и манипулируя левой кнопкой мыши получить доступ ко всем столбцам, в появившемся списке выбрать столбец, характеризующий стоимость и в свойстве ReadOnly выбрать значение True.

Остается еще один случай, в котором не обеспечено корректное обновление значение поля «стоимость» - при изменении цены товара в таблице «Товары». Для этого добавим в БД триггер:

CREATE TRIGGER AU_TOVARYI FOR TOVARY AFTER UPDATE POSITION 2

AS BEGIN

IF (OLD.ZENA <> NEW.ZENA) THEN

UPDATE RASXOD SET STOIM=NEW.ZENA*KOLVO

WHERE KOD_TOVAR = OLD.KOD_TOVAR; END

Появление значения OLD.KOD_TOVAR (а не NEW.KOD_TOVAR) в строке условия отбора оператора UPDATE вызвано необходимостью корректно обрабатывать ситуацию, когда одновременно меняются код товара и его цена. это означает, что системное каскадное обновление выполняется после выполнения триггера AU_TOVARYI, а не до (как казалось…).

Теперь установим контроль условия KOLVO>=0 - обработчик события OnValidate поля Kolvo объекта RasxodTable:

Object_Pascal

Borland_C++

procedure TForm1. RasxodTableKOLVOValidate (Sender: TField);

begin

if RasxodTable. FieldByName('Kolvo'). AsInteger<0 then

raise Exception. Create (' «Количество» должно быть неотрицательным')

end;

Здесь raise - оператор языка Object Pascal порождающий исключительную ситуацию (принудительное событие «ошибка»), Exception - класс исключительных ситуаций (определенный в модуле SysUtils), Create - конструктор объектов этого класса.

void __fastcall TForm1: RasxodTableKOLVOValidate (TField *Sender)

{

if (RasxodTable-> FieldByName («Kolvo»)->AsInteger<0)

throw Exception («<Количество> должно быть неотрицательным»);

}

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

Прежде чем двигаться дальше, полезно посмотреть поведение программы в действии:

Как отрабатывает каскадное обновление таблицы «Расход товара» при удалении строки и изменении кода товара в таблице «Товары». Аналогично, для таких же операций с таблицей «Покупатели», ведь реализация каскадного обновления в этих двух случаях разная.

Как отрабатывает контроль ограничений целостности в таблице «Расход товара» при изменении кодов товара или покупателя на отсутствующие в родительских таблицах.

Как отрабатывает контроль условия ZENA>=0 и условия KOLVO>=0.

Обратите внимание: реакция на нарушение первого условия появляется только после попытки покинуть текущую строку таблицы, а для второго условия реакция почти мгновенная - программа не позволяет покинуть поле.

Это связано с тем, что второе условие контролирует Delphi-программа, причем именно в момент выхода из поля. А первое условие контролирует InterBase SQL-сервер, причем только после попытки покинуть текущую строку таблицы - только в этот момент Delphi-программа подтверждает изменения (вызывая метод Post) и посылает запрос InterBase SQL-серверу на проведение соответствующих изменений в реальной таблице.

Как отрабатывает перерасчет «стоимости» при изменении вместе и по отдельности «количества» и «кода товара» в таблице «Расход товара», а также изменении цены товара в таблице «Товары».

Как отрабатывает перерасчет «количества на складе» при таких же изменениях в таблице «Расход товара». И как не выполняется этот перерасчет при изменении «кода товара» в таблице «Товары» и каскадном его изменении в таблице «Расход товара».

Как отрабатывает перерасчет «количества на складе» при удалении и добавлении строк в таблице «Расход товара». И как при добавлении отрабатывает генератор «кода покупки».

Теперь внесем в нашу программу еще несколько изменений. ..\PRG1\SKLAD.DPR

Объявленная нами связь «Detal-ведомая -> Master-ведущая» для таблиц TOVARY->RASXOD ограничила область видимости в Grid таблицы «Товары». Пока мы работаем в Grid таблицы «Расход товара» это возможно даже и очень удобно. Но когда мы переключаемся на Grid таблицы «Товары» хотелось бы видеть весь список товаров. Для устранения этих проблем:

Поместим на экранную форму еще один объект типа TTable, управляющий таблицей TOVARY, и объект типа TDataSource, управляющий ее связью с объектом DBGrid1.

Это легче сделать копированием - щелчок на копируемом объекте, CTRL+C, CTRL+V и мышкой переместить выделенную копию «в сторонку» (осторожно! копия получается точно наложенной на оригинал, но при её перемещении оригинал останется на месте).

Установим имя Name TovaryTable1 у нового объекта типа TTable, а у нового объекта типа TDataSource оставим имя DataSource4, предложенное системой, и на всякий случай проверим, что DataSource4 действительно ссылается (в смысле DataSet=) на TovaryTable1. Теперь разграничим функции объектов TovaryTable и TovaryTable1: пусть за связь Master-Detal с таблицей «Расход товара» отвечает TovaryTable1, а за остальное - TovaryTable.

У объекта TovaryTable: удалим значения свойств MasterSource, MasterFields и IndexFieldName.

У объекта TovaryTable1: удалим вызов обработчиков событий AfterInsert и AfterPost (но не сами процедуры обработки, т. к. они вызываются в объекте TovaryTable).

У объекта DataSource3 (связь с таблицей «Расход товара») внесем изменение в обработчик события OnDataChange: в процедуре DataSource3DataChange заменим

TovaryTable. FieldByName('Zena') на TovaryTable1. FieldByName('Zena').

Теперь обеспечим переключение так, чтобы таблицей «Товары» управлял объект TovaryTable, когда курсор находится в DBGrid1 таблицы «Товары», и объект TovaryTable1, когда курсор находится в DBGrid3 таблицы «Расход товара».

Для этого внесем изменения в текст обработчика события OnEnter объекта DBGrid1: в процедуру DBGrid1Enter (в начало) добавим

Object_Pascal

Borland_C++

DBGrid1. DataSource:=DataSource1;

IF DataBase1. Connected then

TovaryTable. Refresh;

DBGrid1->DataSource= DataSource1;

if (Database1->Connected) TovaryTable->Refresh();

Далее поправим обработчик события OnEnter объекта DBGrid3: в процедуру DBGrid3Enter (в начало) добавим

Object_Pascal

Borland_C++

DBGrid1. DataSource:=DataSource4;

TovaryTable1. Refresh;

DBGrid1->DataSource= DataSource4;

TovaryTable1->Refresh();

Аналогичные преобразования надо провести для таблицы «Покупатели» и её связи с таблицей «Расход товара». Теперь мы будем видеть полный список товаров и покупателей в своем «окне просмотра», а находясь в окне просмотра «Расход товаров» будем видеть информацию только о текущем товаре и покупателе. Причем сохранится правильность расчета стоимости продажи, которая существенным образом основана на связи Master-Detal.

Мы убедились, что при добавлении записей генераторы правильно формируют коды соответствующих элементов таблиц. Можно заметить, что значение полей, описывающих эти коды и необходимых для обеспечения уникальности записей, не носят содержательный характер, и могут быть исключены из состава столбов визуальной компоненты TDBGrid. Также желательно наименования столбцов таблиц выводить на русском языке. Для исключения столбца из состава столбцов визуальной компоненты необходимо выбрать мышью объект DBGrid1, в инспекторе объектов найти свойство Columns, открыть окно редактирования столбцов, через контекстное меню создать список, включающий все поля таблицы (далее можно удалить ненужные столбцы из списка). Каждый столбец, являясь объектом, имеет ряд свойств. Для изменения наименования столбца необходимо исправить для каждого поля свойство Caption, входящее в список подсвойств свойства Title.

Записи в Таблице «Расход товара» не содержат наименований товаров и покупателей, а содержат только коды этих реквизитов. Поскольку код товара не несет содержательной информации, а конечный пользователь привык работать с наименованием товара, желательно при показе таблицы «Расход товара» выводить на экран не коды товара и покупателя, а их наименования. Этого можно достичь, используя поля выбора данных (LookUp-поля). Создадим LookUp-поле для наименования товара. Выберем мышью иконку компоненты Ttable для таблицы «Расход товара» и двойным щелчком вызовем пустой список полей таблицы. Вызвав правой кнопкой мыши контекстное меню, выберем режим добавления всех полей, а также режим добавления нового поля. Появившуюся форму необходимо заполнить, как показано ниже.

На данном экране описана LookUp-связь по ключевому полю KOD_TOVAR с таблицей «Товары». В результате всех этих действий в таблице «Расход товара» образуется новое текстовое поле TOVAR, которое связано по полю KOD_TOVAR с соответствующим полем таблицы «Товары». Совершенно аналогично поступим с полем POKUP. В столбцах компоненты DBGrid3 появляются элементы ComboBox (с наименованием товара и покупателя) через которые можно осуществить выбор значения соответствующего реквизита.

Набор значений полей может быть организован также через компоненты DBText, DBEdit, DBMemo, DBListBox, DBComboBox, DBCheckBox, DBRadioGroup, DBLookUpComboBox и пр. В каждом из этих элементов необходимо настроить свойства DataSource и DataField.

Размещено на Allbest.ru


Подобные документы

  • Разработка базы данных с информацией о сотрудниках, товарах, со справочником типов товаров средствами системы управления базами данных MySQL с помощью SQL-запросов. Разработка инфологической модели предметной области. Структура таблиц, полей базы данных.

    контрольная работа [648,7 K], добавлен 13.04.2012

  • Проектирование базы данных "Автосалон" с использованием Microsoft Access. Создание таблиц с информацией об автомобилях, их стоимости, стране-производителе, покупателях. Построение информационной схемы базы, форм для занесения данных в таблицы и отчета.

    контрольная работа [5,2 M], добавлен 28.06.2011

  • Авторизация с каталогами проектирования базы данных магазина. Задачи базы данных: учет всех товаров, поиск и выдача данных о клиентах, адрес, телефоны, цена и наличие товара. Этапы проектирования базы данных. Схема данных, создание запросов и их формы.

    реферат [1,6 M], добавлен 22.10.2009

  • Создание базы данных. Поиск, изменение и удаление записей. Обработка и обмен данными. Проектирование базы данных. Определение формул для вычисляемой части базы. Редактирование полей и записей. Формы представления информации, содержащейся в базе данных.

    курсовая работа [67,0 K], добавлен 23.02.2009

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

    курсовая работа [185,6 K], добавлен 07.12.2010

  • Основные виды баз данных. Система управления базами данных. Анализ деятельности и информации, обрабатываемой в поликлинике. Состав таблиц в базе данных и их взаимосвязи. Методика наполнения базы данных информацией. Алгоритм создания базы данных.

    курсовая работа [3,1 M], добавлен 17.12.2014

  • Сущность базы данных. Процесс построения концептуальной модели. Построение реляционной модели, создание ключевого поля. Процесс нормализации. Проектирование базы данных в ACCESS. Порядок создание базы данных. Создание SQL запросов и работа в базе данных.

    курсовая работа [185,6 K], добавлен 08.11.2008

  • Цель создания базы данных магазина. Понятие и сущность инфологического моделирования, его применение. Особенности разработки базы данных, создание таблиц, схемы данных, запросов, визуальных и печатных форм. Описание процесса работы с базами данных.

    курсовая работа [1,9 M], добавлен 15.11.2013

  • Создание программ, позволяющих создавать базы данных. Создание таблицы базы данных. Создание схемы данных. Создание форм, отчетов, запросов. Увеличение объема и структурной сложности хранимых данных. Характеристика системы управления базой данных Access.

    курсовая работа [2,1 M], добавлен 17.06.2013

  • Создание таблиц базы данных с помощью MS Access "Страны Азии". Форма базы данных и запросы к выборкам данных. Модификация структуры таблиц, создания связей между главными таблицами, редактирование данных и проектирование форм для реальной базы данных.

    контрольная работа [723,9 K], добавлен 25.11.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.