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

English home work / ibase

.pdf
Скачиваний:
27
Добавлен:
12.02.2015
Размер:
653.01 Кб
Скачать

www.vr-online.ru

© Шкрыль Андрей

Введение

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

Мы разработаем клиент – серверное приложения «Продажа товара». Напишем его под Interbase! Так что запасись пивом, включи хороший музон и вперед.

О клиент – серверных базах данных

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

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

Перед внесением изменений в б.д.:

1.начинаем транзакцию

2.вносим изменения

3.пытаемся завершить транзакцию

a.Если завершить удалось, то все ОК

b.Если произошла ошибка, то отказываемся от всех изменений и говорим пользователю, типа попал ты браток.

Этого золотого правила тебе будет достаточно для написания любых клиент серверных приложений. И еще тебе понадобятся хотя бы базовые знания языка SQL! Потому все изменения в б.д. лучше вносить использую запросы, как раз, написанные на этом языке. Конкретно нам понадобяться команды Select, Insert, Update и Delete.

www.vr-online.ru

© Шкрыль Андрей

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

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

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

Таблица – ТОВАР (он же справочник ТОВАР)

Название

Описание

Тип данных

 

 

TovarID

Поле – счетчик

счетчик

 

 

Name

Название товара

Текст(100)

 

 

Price

Цена товара

Текст (10), текст удобней чем число, потом сам

 

 

 

все поймешь. 7 – для целой части цены, а 2 для

 

 

 

копеек и один символ для запятой!

 

Таблица – ОРГАНИЗАЦИИ (он же справочник ОРГАНИЗАЦИИ)

 

 

 

 

 

Название

Описание

Тип данных

 

 

FirmID

Поле – счетчик

счетчик

 

 

Name

Название организации

Текст(100)

 

 

Таблица - ПРОДАЖИ

 

 

 

 

 

 

Тип данных

 

Название

Описание

 

 

SaleID

Поле – счетчик

 

счетчик

 

FirmKod

Код фирмы, совершающей покупку

Число

 

TovarKod

Код товара, который купили

Число

 

Rem

Комментарии по покупке

 

Текст(100)

 

www.vr-online.ru

© Шкрыль Андрей

Создание базы данных в Interbase

Я начну описание данного раздела с процесса установки этой СУБД. Даже если ты никогда не видел и не слышал про эту СУБД, установить ее проще пареной репы, проще наверно только играть в «САПЕР». Смотри рис.1.

Рис.1.

За основу возьмем установку 6 версии, но в принципе, установка любой другой ничем не отличается! Жмем дальше Next столько раз, сколько нужно, если есть желание, то можно изменить путь установки, предложенный по умолчанию, но я делать этого не советую! Установка проходит достаточно быстро, жмем FINISH!

Все, теперь вперед в бой – запускаем INTERBASE, для этого нам надо выбрать ярлычок IBCONSOLE. Смотри рис.2.

www.vr-online.ru

© Шкрыль Андрей

Рис.2.

Окно после запуска IBCONSOLE. Смотри рис.3.:

Рис.3.

www.vr-online.ru

© Шкрыль Андрей

Теперь нам надо зарегистрировать новую базу данных, для этого щелкаем на первую иконку слева . Мы увидим следующее окно (рис.4.).

Рис.4.

Так как мы будем создавать базу на своем компе, выбираем LocalServer, если хочется поэкспериментировать и создать базу на удаленном сервере, если он конечно у вас есть,

то выбирайте Remote server.

Вполе Description вводим описание нашего сервака.

Вполе Login Information – вводим логин и пароль админа базы данных, по умолчанию он будет:

User Name: SYSDBA

Password: masterkey

Жмем ок – сервер зарегестрирован.

Теперь создадим рабочую папку для программы – у меня путь к программе следующий C:\WorkIB

www.vr-online.ru

© Шкрыль Андрей

Далее создаем базу данных – выбираем пункт меню Database/Create Database. Появится следующее окно (рис.5.):

Рис.5.

Вполе Alias вводим произвольный псевдоним (этот псевдоним не будет псевдонимом BDE, он играет вспомогательную роль).

Указываем название файла базы данных и его месторасположение, в одной из строк списка Files.

Ввыпадающем списке Default Character Set выбираем пунки WIN1251, это чтоб нормально отображались русские буквы.

Жмем ОК, вуаля, база создана, окно IBCONSOLE приобретает следующий вид

(рис.6.):

www.vr-online.ru

© Шкрыль Андрей

Рис.6.

Теперь переходим к созданию таблиц. Выбираем в дереве Tables (левое окно) и

нажимаем кнопку SQL (5 слева) . Появляется окно (рис.7.):

www.vr-online.ru

© Шкрыль Андрей

Рис.7.

У меня окно уже с введенным запросом на создание таблицы Товары. Рассмотрим особенности этого запроса:

CREATE TABLE "TOVAR"

(

"TOVARID"INTEGER NOT NULL,

"NAME" VARCHAR(100) CHARACTER SET WIN1251 NOT NULL, "PRICE" INTEGER NOT NULL,

PRIMARY KEY ("TOVARID") );

Create table – команда создания запроса, в кавычках название таблицы, дальше в скобках указываются параметры таблицы, потом скобка закрывается и обязательно ставится точка с запятой. В скобках у нас указаны три поля. NOT NULL – означает что поле не может содержать пустых значений – если пользователь попытается сохранить значение NULL для, то произойдет ошибка на уровне СУБД, а обрабатывать вам эту ошибку в своей программе или нет, это уже ваше дело. Поле “Name” имеет текстовое значение в Interbase оно обозначается как VARCHAR и в скобках указывается

www.vr-online.ru

© Шкрыль Андрей

максимальное количество возможных символов, также здесь мы указываем кодировку для символов – это нужно чтобы нормально отображались русские символы.

Жмем кнопку «Высокого напряжения» - третья справа, вуаля, таблица создана. Вид окна IBConsole, после создания таблицы (рис.8.):

Рис.8.

В Interbase нет такого типа как счетчик или autoincrement, выход из этой ситуации обеспечивается созданием, так называемого генератора! Генератор – это хранящаяся в базе данных программа, выдающая при каждом обращении к ней уникальное число. Для каждого автоинкрементного поля в базе данных создается свой генератор.

Вызываем Interactive SQL, пятая кнопка справа. Пишем запрос:

CREATE GENERATOR GEN_TOVAR

Нажимаем выполнить.

При этом запрос выполнится, и окно запросов очиститься. Мы создали генератор GEN_TOVAR. Теперь нам надо установить начальное значение генератора, делается это следующим образом:

SET GENERATOR GEN_TOVAR TO 1

Нажимаем выполнить.

При этом запрос выполнится, и окно запросов очиститься.

www.vr-online.ru

© Шкрыль Андрей

В этом операторе начальное значение не может быть результатом запроса SELECT, поэтому если таблица не пустая, на момент создания генератора, то следующее значение определятся после выполнения следующего запроса:

SELECT MAX(TOVARID)+1 FROM TOVAR – ну это так сказать лирическое отступления, нам эта фишка не понадобиться, так как мы создаем все с нуля.

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

Пишем запрос:

SET TERM !! ;

CREATE TRIGGER "BEF_INS_TOVAR" FOR "TOVAR"

ACTIVE BEFORE INSERT

AS

BEGIN

NEW.TOVARID=GEN_ID(GEN_TOVAR,1);

END!!

SET TERM ; !!

SET TERM ^ ;

Выполняем запрос! Вуаля наш генератор теперь введен в работу. Конструкция SET TERM задает новый разделитель операторов. Если ее не

использовать, то получится, что у тебя и после

NEW.TOVARID=GEN_ID(GEN_TOVAR,1); стоит точка с запятой и после END тоже стоит точка запятой, а INTERBASE это не нравится, почему я так и не понял, но она без конструкции SET TERM отказывается напрочь создавать триггер.

Рассмотрим поподробней, что же мы накодили:

Create Trigger – говорит что мы хотим создать триггер – правило, далее указываем название триггера и для какой таблицы он будет предназначен (FOR “TOVAR”).

Предложение ACTIVE BEFORE INSERT – указывает когда триггер должен выполняться, в данном случае, каждый раз перед созданием новой записи. Слово AS – зарезервированное, открывает тело триггера. Тело триггера всегда (даже если триггер содержит единственный оператор – как в нашем случае) должно ограничиваться парой ключевых слов BEGIN – END. В шестой строке расположен оператор, в котором новому значению (слово NEW) поля TOVARID присваивается значение, полученное от встроенной функции GEN_ID. Двумя параметрами обращения к этой функции указывается имя генератора и то значение, на которое должно увеличиться текущее значение генератора («шаг» генератора).

Соседние файлы в папке English home work