Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Разработка отчета для выдачи выходного документаСодержание книги
Поиск на нашем сайте
Источником данных для получения выходного документа могут быть таблица или запрос. Для нашего примера создадим выходной документ с информацией об учениках классов с выдачей среднего балла каждого класса. Компоненту TQuery для выдачи данных документа рекомендуется размещать на форме выходного документа. Свойство SQL запроса для нашего примера будет иметь вид select namechi,nameclass,ball from pupil p,class c where p.ncl=c.ncl order by nameclass,namechi,ball Остановимся подробнее на свойстве SQL компоненты TQuery: WHERE может содержать условия соединения (как в предыдущем примере) двух или более таблиц и условия отбора строк, удовлетворяющих условию. ORDER BY имена полей используется для упорядочения полей при выводе (это особенно полезно при создании запроса для выходного документа, если есть группа, см. ниже). Свойство SQL запроса может включать параметры, значения которых устанавливаются перед выполнением запроса. Например, пусть имеется компонента TQuery со свойством SQL: select * from class c, pupil u where c.ncl=u.ncl and u.ball>:ab, с помощью которого отбираются ученики классов с баллом, большим определенного значения. ab – параметр запроса. Список параметров можно увидеть, щелкнув по свойству Params: Каждому параметру, щелкнув по нему, нужно назначить тип данных (Data Type) и тип параметра (ParamType) – обычно входной. Значения параметров должны быть определены каким-либо образом перед выполнением запроса (например, вводиться на какой-либо форме в поле ввода или выбираться из каких-либо данных). Выполнение запроса состоит в присвоении значения параметрам и повторном открытии запроса: DM->CL_Chi->Close(); DM->Cl_Chi->ParamByName(“ab”)->AsFloat=значение; DM->Cl_Chi->Open(); Пункт меню главной формы Вывод документа свяжем с новой формой, на которой будем выводить отчет. Поставим в соответствие этому пункту действие имя формы->QuickRep1->Preview() //Отображение отчета на экране Прежде всего поместим на эту форму экземпляр компоненты QuickRep со страницы QReport и через свойство DataSet свяжем ее с нужным запросом. При проектировании отчета соответствующий НД должен быть открыт (свойство Active установлено в true). Компонента QuickRep имеет ряд свойств. Свойство Bands состоит из множества логических значений, которые определяют присутствие или отсутствие в отчете отдельных составляющих: HasColumnHeader - заголовка столбцов, HasDetail - детальной информации, HasPageFooter - заключительной части страницы, HasPageHeader - заголовка страницы, HasSummary - заключительной части отчета, HasTitle - заголовка отчета. Метод Preview() выводит отчет в окно предварительного просмотра. Если необходимо группировать данные при выводе, то поместим в отчет по одному экземпляру компоненты QRGroup на каждую группу. Свойство Expression этой компоненты позволяет выбрать выражение, при изменении которого выводится заголовок группы (его роль также играет компонента QRGroup). При щелчке по свойству появляется окно построителя выражений, позволяющее сформировать выражение. Это выражение не отображается.
Для создания заключительной части группы на форму помещается экземпляр компоненты QRBand, свойство BandType которой полагается равным rbGroupFooter, а свойство FooterBand компоненты QRGroup выбирается равным имени заключительной компоненты этой группы. Таким образом, можно создать несколько вложенных групп. После этого настраивается весь отчет. При проектировании конкретного выходного документа прежде всего в групповом свойстве Bands компоненты QuickRep следует включить (положить равными true) свойства HasColumnHeader, HasDetail и HasTitle:
Составляющие отчета характеризуются различной частотой вывода. Так, заголовок отчета и заключительная часть отчета выводятся один раз, заголовок страницы, заголовки столбцов и заключительная часть страницы выводятся на каждой странице, заголовок группы выводится при изменении значения выражения, определяющего эту группу, в конце группы выводится заключительная часть группы; детальная информация выводится чаще всего. После размещения на форме отчета различных составляющих отчет примет вид, подобный примеру:
Для отображения в разделах отчета полей следует поместить на них экземпляры компонент QRLabel (статическое поле) с определением свойства Caption и QRDBText (поле НД). Для этой компоненты определяются свойства DataSet (и мя запроса, формирующего НД, например, DM->CL_Chil) и DataField (имя поля НД, например, NAMECLASS). Вместо компоненты QRDBText можно размещать компоненту QRExpr (выражение из полей НД) и определять ее свойство Expression аналогично тому, как это описано для компоненты QRGroup. В заключительной части группы можно размещать выражения, содержащие итоговые функции типа AVERAGE. SUM и т.д. Если считается функция SUM, то для того, чтобы сумма не накапливалась по всем группам, необходимо у компоненты QRExpr задать свойство ResetAfterPrint (очищать после вывода), равным true. Получим экран вида:
При выводе отчета получим документ вида: В некоторых задачах прежде, чем выводить отчет, необходимо выбрать или ввести некоторые параметры. Например, пусть необходимо создать отчет – список учеников указанного класса. В этом случае из главной формы надо вызвать форму для выбора нужного класса из таблицы. На форму следует поместить экземпляр компоненты ComboBox со страницы компонент Standard. Эта компонента хранит набор строк и, возможно, сопровождающих их объектов: В методе OnShow этой формы следует выполнить код для заполнения свойства Items компоненты ComboBox значениями названий классов из таблицы class и сопровождающими их значениями первичных ключей ncl: DM->CL->Open();ComboBox1->Items->Clear();//очистка списка элементов while (!DM->CL->Eof)//пока не конец НД {ComboBox1->Items->AddObject(DM->CL-> FieldByName("Nameclass")-> AsString,(TObject *)DM->CL->FieldByName("NCL")->AsInteger); //добавить в список строку с именем класса и дополнитнльно – номер класса DM->CL->Next(); } ComboBox1->ItemIndex=0;//Установка списка на начало ncl=(int)ComboBox1->Items->Objects[0];//запоминание номера класса для первой записи В событии OnChange компоненты CheckBox следует написать строку ncl=(int)ComboBox1->Items->Objects[ComboBox1->ItemIndex];//Запоминание номера класса для выбранной записи При нажатии кнопки Выдать отчет следует выполнить передачу запросу для вывода документа параметров (например, таким параметром может быть значение поля ncl) и вывод сформированного документа (вызов метода Preview экземпялра компоненты QuckRep.
Лабораторная работа 3 Задание: На основании заданной структуры исходных данных бригада студентов выполняет следующие действия: 1. Создание таблиц (файлов типа Paradox) с помощью программы DatabaseDesktop. 2. Создание приложения в системе CBuilder и включение в его состав модуля данных. 3. Добавление к модулю данных нужных компонент. 4. Добавление к приложению главной формы, имеющей меню с выходом на формы просмотра и корректировки всех таблиц и на формы вывода выходных документов. 5. Создание всех остальных форм и наполнение их функциональностью. Состав отчета: 1. Таблицы базы данных, созданные в DatabaseDesktop. 2. Таблица тестов вида:
3. В качестве тестов должны проверяться как нормальные, так и критические ситуации. 4. Результаты выполнения всех тестов. Технология «клиент-сервер»
Рассмотрим технологию разработки приложений, весьма распространенную в настоящее время – клиент – серверная, которая применима для самых различных предметных областей (офис, банковские системы, управление предприятиями, управление учебным заведением, торговля и т.д.). В условиях, когда многим пользователям нужен доступ к одной и той же базе данных, причем с разными правами (одни имеют право только на просмотр, другие на корректировку определенных видов информации), вполне разумно хранить базу данных на отдельном компьютере (сервере баз данных). При этом все пользователи общаются с базой данных через клиентские приложения, установленные на их компьютерах. Сервер баз данных должен согласовывать действия различных клиентов. Под согласованностью действий понимается следующее: клиент, формирующий отчеты, не сможет воспользоваться данными, которые начал, но еще не закончил формировать другой клиент и, наоборот, клиент, формирующий данные, не сможет выполнить операцию над данными, которыми пользуется другой клиент, начавший, но не закончивший формировать отчет. Клиент, желающий обновить или удалить данные, не сможет выполнить операцию до тех пор, пока не закончится аналогичная операция над теми же данными, которую ранее начал, но еще не закончил другой клиент. При поддержке согласованности действий все результаты, получаемые от информационной системы, будут соответствовать целостному состоянию базы данных, то есть будут достоверны и непротиворечивы. Подобные рассуждения привели к возникновению понятия «классическая транзакция». Классической транзакцией называется последовательность операций изменения базы данных и/или выборки из базы данных, воспринимаемая сервером баз данных как атомарное, неделимое действие. Это означает, что при успешном завершении транзакции сервер баз данных гарантирует наличие в базе данных результатов всех операций изменения, произведенных при выполнении транзакции. Условием успешного завершения транзакции является то, что база данных находится в целостном состоянии. Если это условие не выполняется, то сервер баз данных производит полный откат транзакции, ликвидируя в базе данных результаты всех операций изменения, произведенных при выполнении транзакции. Легко увидеть, что база данных будет находиться в целостном состоянии при начале любой транзакции и останется в целостном состоянии после успешного завершения любой транзакции. Взаимодействие сервера БД и клиентов показано на рис. 12.
Рис. 12 В настоящее время разработано большое число серверов баз данных, к числу которых относятся Interbase, Oracle, Informix, Microsoft SQL, MySQL и другие. Мы рассматриваем сервер Interbase (версия 6.0). Он имеет ряд преимуществ: не требует больших объемов памяти; кроме того, поставляется в составе пакета CBuilder в виде локальной версии, размещаемой на том же компьютере, что и приложение - клиент, и используемой для отладки, и сетевой версии, размещаемой на компьютере - сервере и используемой для промышленной эксплуатации приложения. Серверная часть Генерация БД на сервере с помощью утилиты ERWIN. Для того чтобы пакет ERWIN часть работы по созданию БД взял на себя, следует открыть ранее созданную логическую модель и на ее основе получить соответствующую ей физическую модель. Пример логической модели: При переходе к физической модели (Physical) для выбора сервера БД следует выполнить пункт основного меню Databases, Choose Database. При этом появится окно, в котором следует выбрать нужный сервер (в нашем случае InterBase): В логической модели рассматриваются отношения и атрибуты, а в физической – таблицы и столбцы. Если в логической модели имена отношений и атрибутов были написаны по-русски, то необходимо в физической модели переименовать таблицы и столбцы в латинские эквиваленты. После этого следует конкретизировать размеры строковых полей:
Получится следующая физическая модель:
После этого следует выбрать пункт основного меню Tools, Forward Engineer. Появитсяокно, в котором следует выбрать режимы генерации операторов языка SQL. Рекомендуется отменить генерацию триггеров и исключений (Exception), генерацию видов и процедур. Затем следует нажать кнопку Report. При этом будет сгенерирован текстовый файл с расширением.sql (скрипт).
Корректировка сгенерированного текста скрипта. В результате генерации с помощью ERWIN структуры БД будет создано некоторое количество операторов языка SQL (Structured Query Language). БД содержит различные объекты, из всего многообразия которых мы будем использовать таблицы, генераторы, исключения, просмотры и хранимые процедуры. Эти объекты называются метаданными. Для работы с объектами существуют операторы языка SQL. Рассмотрим эти объекты подробнее: Таблицы. Все данные сохраняются в таблицах. Таблица - это структура данных, содержащая строки, каждая строка содержит одинаковое число столбцов. На пересечении строки и столбца находится поле. Основная мощность реляционных БД достигается за счет определения связей между таблицами. Столбцы. С оздание таблицы включает определение ее столбцов. Основные атрибуты столбца: имя столбца, тип данных столбца, разрешение иметь в столбце нулевое (NULL) значение. Типы данных. Данные в столбцах имеют определенные типы, которые могут быть разбиты на 4 класса: числовые, символьные, даты и BLOB - двоичные данные большого размера (binary large object), которые могут содержать данные неограниченного размера. Они используются для хранения рисунков и других неструктурируемых InterBase данных. Числовые данные подразделяются на: · целые (INTEGER), · числа с плавающей точкой(FLOAT). Символьные данные подразделяются на: · данные фиксированного размера (CHAR(n)), · данные переменного размера (VARCHAR(n)). Данные типа даты могут содержать значения от 1-JAN-100 до 11-DEC-5941. Для создания таблицы БД используется оператор CREATE TABLE, который включается в текст скрипта. В примере создается таблица JOB из 7 столбцов. Каждый столбец имеет имя и тип. Первичный ключ таблицы содержит три столбца; внешний ключ содержит один столбец JOB_COUNTRY для связи с таблицей COUNTRY по полю COUNTRY. Ограничение CHECK позволяет не пропускать записи таблицы, не удовлетворяющие условию: CREATE TABLE JOB (JOB_CODE INTEGER NOT NULL, JOB_GRADE INTEGER NOT NULL, JOB_COUNTRY VARCHAR(20) NOT NULL, JOB_TITLE VARCHAR(25) NOT NULL, MIN_SALARY REAL NOT NULL,MAX_SALARY REAL NOT NULL, JOB_REQUIREMENT BLOB,PRIMARY KEY (JOB_CODE, JOB_GRADE, JOB_COUNTRY), FOREIGN KEY (JOB_COUNTRY) REFERENCES COUNTRY (COUNTRY), CHECK (MIN_SALARY < MAX_SALARY)); В группе CHECK можно определить условие, накладываемое на значения данных во время ввода значений в столбец: <условие> = {VALUE <оператор> <значение> | VALUE [NOT] BETWEEN <значение> AND <значение> | VALUE [NOT] LIKE <значение> | VALUE [NOT] IN (<значение> [, <значение>...]) | VALUE IS [NOT] NULL | VALUE [NOT] CONTAINING <значение> | VALUE [NOT] STARTING [WITH] <значение> | (<условие>)| NOT <условие>| < условие > OR < условие > | < условие > AND < условие >}
<оператор> = = | < | > | <= | >= |!< |!> | <> |!= Пример: CHECK ((VALUE IS NULL) OR (VALUE > 1000)); Следующий пример контроля ограничивает вводимые значения четырьмя определенными значениями: CHECK (VALUE IN ("software", "hardware", "other", "N/A")); Следующий пример контроля позволяет только городам в Калифорнии быть введенными в столбец: CHECK (VALUE LIKE "%, CA"); Таким образом, необходимо скрипт, сгенерированный с помощью ERWIN, пополнить операциями контроля. Скрипт, сгенерированный ERWIN, для примера имеет вид: /*Операторы создания таблиц с первичными и внешними ключами */ CREATE TABLE Predmet (np INTEGER NOT NULL, namepred VARCHAR(20), CONSTRAINT XPKPredmet PRIMARY KEY (np)); CREATE TABLE Teacher (nt INTEGER NOT NULL, nameteacher VARCHAR(20), CONSTRAINT XPKTeacher PRIMARY KEY (nt)); CREATE TABLE Class (ncl INTEGER NOT NULL, nt INTEGER, nameclass VARCHAR(3), np INTEGER, CONSTRAINT XPKClass PRIMARY KEY (ncl), FOREIGN KEY (nt) REFERENCES Teacher, FOREIGN KEY (np) REFERENCES Predmet); CREATE TABLE Pupil (nchi INTEGER NOT NULL, ncl INTEGER, namechi VARCHAR(20), ball INTEGER, dat DATE, CONSTRAINT XPKPupil PRIMARY KEY (nchi), FOREIGN KEY (ncl) REFERENCES Class); Создание БД на сервере InterBase. Общение с сервером InterBase удобно проводить интерактивно с помощью программы IBExpert. Рассматривается версия IBExpert 2.0. При вызове на выполнение этой программы появляется окно, в котором прежде всего следует выполнить пункт меню Database, CreateDatabase:
Регистрация БД на сервере В Interbase существует пользователь SYSDBA с паролем masterkey. После того, как БД создана, с ней можно установить связь (пункт меню Database, Connect to Database). После этого в левой части экрана всегда виден список объектов БД: При выборе пункта меню Tools, Script Executive появится окно: Следует открыть скорректированный скрипт, сгенерированный ERWIN, и выполнить его с помощью пункта меню Script, Run script. Для создания различных объектов БД существуют пункты меню или кнопки; при создании объекта его нужно компилировать (пункт Compile) и подтвердить сделанные изменения (кнопка Commit). Создание генераторов. Генератор - это механизм для создания уникальных значений первичных ключей при добавлении строк к таблицам. Генераторы создаются в тех случаях, когда первичный ключ является невидимым пользователю дополнительным полем. При нажатии кнопки New Generato r появляется окно:
Создание исключений. Исключение – это именованное сообщение, которое вызывается из хранимой процедуры при возникновении какой-либо ситуации. Для создания исключения нужно нажать кнопку New Exception.
Хранимые процедуры. Хранимая процедура - это программа, записанная как процедура в языке процедур InterBase, расширении SQL. Хранимые процедуры могут получать параметры от приложения и возвращать ему значения и могут вызываться из приложения. Преимущества хранимых процедур: * они могут совместно использоваться несколькими приложениями; * при корректировке процедуры изменения автоматически отражаются на всех приложениях, использующих ее; * они выполняются сервером, а не клиентом, что сокращает сетевой трафик. Синтаксис хранимой процедуры: CREATE PROCEDURE имя процедуры [ (параметр тип [, параметр тип …])] [RETURNS (параметр тип [, параметр тип …])] AS <тело процедуры>; <тело процедуры> =[ <список объявлений переменных>] <блок> < список объявлений переменных > = DECLARE VARIABLE переменная тип; [DECLARE VARIABLE переменная тип; …] <блок> = BEGIN <составной оператор> [ <составной оператор> …] END При использовании имени переменной или параметра в операторе SQL этому имени предшествует двоеточие; в других операторах хранимой процедуры двоеточие не нужно. Например, процедура SUB_TOT_BUDGET принимает номер отдела как входной параметр и возвращает сумму, среднее, минимальный и максимальный бюджеты: CREATE PROCEDURE sub_tot_budget (head_dept CHAR(3)) RETURNS (tot_budget DECIMAL(12, 2), avg_budget DECIMAL(12, 2),min_budget DECIMAL(12, 2), max_budget DECIMAL(12, 2)) AS BEGIN SELECT SUM(budget), AVG(budget), MIN(budget), MAX(budget)FROM department WHERE head_dept =:head_dept INTO:tot_budget,:avg_budget,:min_budget,:max_budget; SUSPEND; END Хранимые процедуры делятся на два типа: · процедуры выбора, которые должны возвращать один или несколько выходных параметров и могут использоваться в операторе SELECT аналогично таблице или просмотру; для возврата значений в вызывающую программу используется оператор SUSPEND. Например: CREATE PROCEDURE GET_EMP_PROJ (emp_no SMALLINT) RETURNS (emp_proj SMALLINT) AS BEGIN FOR SELECT PROJ_ID FROM EMPLOYEE_PROJECT WHERE EMP_NO =:emp_no INTO:emp_proj DO SUSPEND;/* Этот оператор возвращает указанные в SELECT значения для каждого шага цикла FOR */ END Вызов такой процедуры происходит с помощью оператора вида SELECT * FROM GET_EMP_PROJ(24); · процедуры выполнения, которые вызываются с помощью оператора EXECUTE PROCEDURE с возможной передачей входных параметров как констант. Такие процедуры выполняют действие, но не возвращают значений. Например, EXECUTE PROCEDURE SUB_TOT_BUDGET (‘stt’); В теле хранимой процедуры можно использовать операторы: · Оператор присваивания переменная = выражение · Переход к последнему оператору END процедуры EXIT · Повторение операторов составного блока, следующих за DO для каждой строки результата оператора SELECT FOR оператор SELECT DO составной оператор Пример: FOR SELECT DEPT_NO FROM DEPARTMENT WHERE HEAD_DEPT =:dno INTO:rdno DO BEGIN EXECUTE PROCEDURE DEPT_BUDGET:rdno RETURNS:sumb; tot = tot + sumb; END
· Проверка условия IF (условие) THEN составной оператор [ELSE составной оператор] · Цикл: пока условие истинно, продолжается выполнение составного оператора. WHILE (условие) DO составной оператор Пример: CREATE PROCEDURE SUM_INT (i INTEGER) RETURNS (s INTEGER) AS BEGIN s = 0; WHILE (i > 0) DO BEGIN s = s + i; i = i - 1; END END
· Оператор добавления данных к таблице: INSERT INTO имя таблицы (столбец1, столбец2,...) VALUES (значение1, значение2,...); Например: INSERT INTO DEPARTMENT (DEPT_NO, DEPARTMENT, HEAD_DEPT, BUDGET,LOCATION,PHONE_NO)VALUES("000","CORPORATE HEADQUARTERS", NULL, 1000000, "MONTEREY","(408) 555-1234") Для использования генератора следует вызывать функцию InterBase GEN_ID(). Эта функция имеет два аргумента: имя вызываемого генератора и шаг изменения. Функция GEN_ID() чаще всего вызывается из процедуры, предназначенной для добавления. CREATE PROCEDURE INS_CLASS (PNAMECLASS varchar(3),PNT INTEGER,PNP INTEGER) AS begin insert into class values GEN_ID(Class,1),:pnt,:pnameclass,:pnp); end · Оператор изменения данных в таблице: UPDATE имя таблицы SET столбец = значение,… WHERE условие Например: UPDATE EMPLOYEE SET SALARY = SALARY + 2000 WHERE JOB_CODE = "Sales" AND HIRE_DATE < "01-Jan-1992" · Оператор удаления данных из таблицы: DELETE FROM имя таблицы [WHERE условие] Если WHERE отсутствует, то удаляются все строки. Например: DELETE FROM EMPLOYEE WHERE JOB_CODE = "Mngr" · Оператор выборки данных из таблиц (одной или нескольких): SELECT [DISTINCT] столбцы или функции от столбцов FROM таблицы WHERE условие [ORDER BY столбец сортировки] Примеры: SELECT * FROM PHONE_LIST SELECT LAST_NAME, FIRST_NAME, PHONE_EXT FROM EMPLOYEE WHERE LAST_NAME = "Green"; SELECT COUNT(EMP_NO), MIN(HIRE_DATE), SUM(SALARY) FROM EMPLOYEE; SELECT D.DEPARTMENT, D.MNGR_NO, E.SALARY FROM DEPARTMENT D,EMPLOYEE E WHERE D.DEPT_NO = S.DEPT_NO)ORDER BY D.DEPARTMENT; Функции, используемые в процедурах InterBase: AVG (значение) – вычисление среднего из числовых значений столбца или выражения: значение - Столбец или выражение, приведенное к числовому типу. CAST( значение AS тип данных ) – преобразование значения в указанный тип данных (число в строку, строку в дату и т.д.). COUNT (* | значение) – вычисление числа строк, которые удовлетворяют условиям запроса: * - Вычисление числа строк в таблице значение - Столбец или выражение. MAX (значение) – вычисление максимального значения в столбце значение - Столбец, константа, переменная, выражение или функция. MIN (значение) – вычисление минимального значения в столбце значение - Столбец, константа, переменная, выражение или функция. SUM (значение) – вычисление суммы значений в столбце значение - Столбец, константа, переменная, выражение или функция. UPPER (строковое значение) – преобразование строки в верхний регистр Для создания процедуры в IBExpert следует нажать кнопку New Procedure. Появится окно с заготовкой процедуры:
При просмотре процедуры в обычном режиме она показывается согласно синтаксису: Ее текст можно корректировать, затем ее надо компилировать; при отсутствии ошибок выполнить нажатием кнопки Execute Procedure. При этом появится окно, в котором будут запрашиваться значения параметров процедуры: Таким образом следует создать процедуры добавления, изменения, удаления для всех таблиц БД и выполнить их для наполнения БД. Их заготовки можно создать, выделив любую таблицу и выбрав в контекстном меню пункт Create SUID procedures (то есть процедуры для выбора, изменения, добавления и удаления). При этом появится окно: При этом процедуры добавления должны иметь в качестве параметра первичный ключ, принимающий любое значение. Его использование на сервере чаще всего не требуется, так как первичный ключ часто создается автоматически с помощью генератора. Однако, как увидим далее, технология разработки клиентского приложения требует передачи всех полей таблицы при добавлении записи. Пример процедуры, вызывающей исключение: CREATE PROCEDURE INS_TEACHER (PNAMETEACHER VARCHAR(20)) AS declare variable v integer; begin select count(*) from teacher where NAMETEACHER=:PNAMETEACHER into:v; if (v=0) then insert into teacher values (GEN_ID(Teacher,1),:pnameteacher); else exception hasteacher; end Создание просмотров или процедур для получения выходных документов. Просмотр - это виртуальная таблица, которая не сохраняется физически в БД, но выглядит точно как реальная таблица. Просмотр может содержать выборочные данные из одной или нескольких таблиц или других просмотров и используется для сохранения наиболее часто используемых запросов к БД. Когда данные в базовых таблицах изменяются, просмотры, использующие эти таблицы, автоматически изменяются. Просмотр может быть создан как: · Вертикальное подмножество столбцов одной таблицы. Например, пусть таблица JOB в БД employee.gdb имеет 8 столбцов: JOB_CODE, JOB_GRADE, JOB_COUNTRY, JOB_TITLE, MIN_SALARY, MAX_SALARY, JOB_REQUIREMENT и LANGUAGE_REQ. Следующий просмотр выводит список продаж (подмножество столбцов) для всех работ (все строки) в таблице JOB: CREATE VIEW JOB_SALARY_RANGES AS SELECT JOB_CODE, MIN_SALARY, MAX_SALARY FROM JOB; · Горизонтальное подмножество строк из одной таблицы. Следующий просмотр выводит все колонки в таблице JOB, но только подмножество строк, в которых MAX_SALARY меньше чем $15000: CREATE VIEW LOW_PAY AS SELECT * FROM JOB WHERE MAX_SALARY < 15000; · Комбинированное вертикальное и горизонтальное подмножество столбцов и строк из одной таблицы. Следующий просмотр выводит только столбцы JOB_CODE и JOB_TITLE и только те работы, в которых MAX_SALARY меньше чем $15000: CREATE VIEW ENTRY_LEVEL_JOBS AS SELECT JOB_CODE, JOB_TITLE, FROM JOB WHERE MAX_SALARY < 15000; · Подмножество строк и столбцов из нескольких таблиц. Следующий просмотр показывает просмотр, созданный из таблиц JOB и EMPLOYEE. Таблица EMPLOYEE содержит 11 столбцов: EMP_NO, FIRST_NAME, LAST_NAME, PHONE_EXT, HIRE_DATE, DEPT_NO, JOB_CODE, JOB_GRADE, JOB_COUNTRY, SALARY, FULL_NAME. Просмотр выводит два столбца из таблицы JOB и два столбца из таблицы EMPLOYEE и только те строки, в которых SALARY меньше чем $15000: CREATE VIEW ENTRY_LEVEL_WORKERS AS SELECT JOB_CODE, JOB_TITLE, FIRST_NAME, LAST_NAME FROM JOB, EMPLOYEE WHERE JOB.JOB_CODE = EMPLOYEE.JOB_CODE AND SALARY < 15000; Для создания нового просмотра в IB Expert следует нажать кнопку New View. При этом появится заготовка нового просмотра:
Можно увидеть данные в просмотре (закладка Data). В ряде случаев, когда выходной документ выдается в зависимости от параметров, представление не дает эффекта и следует воспользоваться хранимой процедурой выполнения. Создание пользователей и присвоение им привилегий. Можно создать нового пользователя с помощью пункта меню Tools, User Manager: При добавлении нового пользователя появляется окно, в котором необходимо указать имя пользователя и его пароль, повторив его:
Необходимо создать столько пользователей, сколько действующих лиц описано в диаграмме Use Case в пакете Rational Rose при описании объектной модели задачи. Пользователи нужны для присвоения им уникальных привилегий – прав на доступ к определенным таблицам для выполнения корректировки и/или просмотра и к определенным процедурам. Информация о пользователях сохраняется в файле isc4.gdb, который расположен на компьютере, где установлен сервер Interbase (обычно в папке Program Files\Borland|Interbase). Для присвоения пользователю привилегий нужно выбрать функцию IB Expert Grant Manager. В появившемся окне для выбранного пользователя можно указать привилегии для каждой таблицы, представления и для каждой процедуры. Для таблиц и представлений привилегии можно назначать на все виды корректировок и на выборку, а для процедур – только на выполнение. Привилегии назначаются и отменяются нажатием курсора мыши или клавиши «пробел». Разработка клиентской части В CBuilder6 имеются страницы компонент, связанных с разработкой приложений баз данных. Это страница BDE, компоненты которой используют программу Borland Database Engine (BDE) для доступа к базе данных, и страница InterBase, компоненты которой получают доступ к базе данных сервера InterBase напрямую, без использования BDE. Это обеспечивает более быструю и эффективную работу с БД, поэтому мы рассмотрим именно эти компоненты при освоении технологии разработки клиентского приложения. Для начала работы по созданию клиентского приложения необходимо иметь БД на сервере в виде набора таблиц, генераторов, исключений, видов и хранимых процедур, записанных в файле с расширением gdb. Ниже представлены этапы разработки клиентского приложения. Вначале нужно создать новое приложение и включить в его состав так же, как и в локальном приложении, пустой модуль данных. Размещение в модуле данных невизуальных компонент для доступа к БД и ее таблицам. Разместим в модуле данных один экземпляр компоненты TIBDatabase для связи с БД. У компоненты TIBDatabase следует установить следующие свойства: * Database Name – значение этого свойства – полное имя файла БД с расширением GDB.; * LoginPrompt - задание этого свойства равным false говорит о том, что в процессе разработки приложения при соединении с БД не будут запрашиваться имя пользователя и пароль; * Connected – признак, определяющий активна ли база данных. Его задают равным false, а в программе, в момент активизации главной формы, задают равным true. Также можно активизировать БД, вызвав метод компоненты Open, а в момент закрытия главной формы – метод компоненты Close; * DefaultTransaction – имя экземпляра компоненты TIBTransaction; * Name – имя компоненты TIBDatabase; * В свойстве Params через редактор следует задать строки: user_name=SYSDBA password=masterkey lc_ctype=WIN1251 (для отображения символов русского алфавита). Также в модуле данных необходимо поместить экземпляр компоненты TIBTransaction для выполнения транзакций. Ее свойство DefaultDatabase следует установить равным имени компоненты TIBDatabase, а свойство DefaultAction = taCommit (что означает, что все операции с БД будут подтверждаться) В модуле данных будут размещаться экземпляры компоненты TIBDataSet для выполнения операторов SQL и связанные с ними экземпляры компоненты TDataSource. Компонента TDataSource представляет собой промежуточное звено для связи невизуальной компоненты TIBDataSet с визуальными компонентами, размещаемыми на формах. Компонента TIBDataSet имеет свойства: · Database - имя компоненты TIBDatabase, оно выбирается из списка доступных имен; · Transaction – имя компоненты TIBTransaction; · SelectSQL - свойство, в котором следует записать оператор SQL для выборки строк и столбцов БД; · DeleteSQL -свойство, в котором следует записать оператор SQL для удаления строк из БД; · InsertSQL -свойство, в котором следует записать оператор SQL для добавления строки к БД; · ModifySQL -свойство, в котором следует записать оператор SQL для изменения строк БД. При проектировании каждого из последних четырех свойств появляется окно вида:
Последние четыре свойства могут вызывать хранимую процедуру для выполнения соответствующего вида корректировки и просмотра. Вызов процедуры корректировки выполняется с помощью оператора вида execute procedure(имя:параметр1,:параметр2,…), а процедуры просмотра - с помощью оператора вида select * from имя (:параметр1,:параметр2,…). Имена параметров процедуры должны совпадать с именами полей таблиц, а порядок следования определяется порядком их появления в заголовке процедуры. Как уже говорилось, в процедуре добавления первичный ключ обязательно должен быть параметром, хотя он в процедуре, как правило, не используется – он генерируется. · Свойство Active компоненты TIBDataSet изначально равно false (набор данных не открыт); он будет открываться вызовом метода компоненты Open при показе соответствующей формы, а закрываться – вызовом метода компоненты Close при закрытии формы. С каждой компонентой TIBDataSet должна быть связана компонента TDataSource, в свойстве DataSet которой нужно выбрать имя соответствующей компоненты TIBDataSet. Для отображения на формах полей из нескольких связанных таблиц необходимо использовать свойство SelectSQL компоненты TIBDataSet. Внем, как уже говорилось, записывается оператор вызова процедуры. Например, для просмотра таблицы class, в которой желательно в
|
||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-12-16; просмотров: 296; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.57.145 (0.015 с.) |