35139

Поддержка сложных запросов в файл-серверной информационной системе с использованием технологий Borland

Практическая работа

Информатика, кибернетика и программирование

Способным работать независимо от того отсутствуют ли требуемые таблицы или наличествуют и заполнены данными. Например: SELECT fio FROM stud; выборка поля fio из всех записей таблицы stud SELECT fio n_spect FROM stud; выборка полей fio n_spect из таблицы stud SELECT FROM stud; выборка всех полей из таблицы stud SELECT s. FROM stud S s; выборка всех полей из таблицы stud с присваиванием таблице псевдонима s SELECT s.n_spect S spect FROM stud S s; выборка из таблицы stud полей fio и n_spect с присваиванием им...

Русский

2013-09-09

59.5 KB

0 чел.

Практическая работа №3

Поддержка сложных запросов в файл-серверной информационной системе с использованием технологий Borland

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

Использование сложных запросов

Для формирования сложных SQL-запросов, в частности для связывания нескольких таблиц, фильтрации, сортировки и т.п., используют компонент TQuery. В его свойство SQL вписывают текст запроса и выполняют его установкой в true свойства Active. Текст формируется в соответствии с общими нотациями SQL. Текст запроса может как задаваться разработчиком однократно, так и формироваться в программе в зависимости от сделанных установок.

Компонент TQuery может использоваться не только для выборки, но и для модификации данных. При этом применяется его метод ExecSQL.

Синтаксис SQL

Оператор SELECT

Оператор SELECT предназначен для выборки данных из БД. Его общий синтаксис:

SELECT [DISTINCT] <список полей>

FROM <список источников>

[WHERE <условие отбора>]

[GROUP BY <группирующее выражение>

[HAVING <условие группировки>]]

[ORDER BY <сортирующее выражение>]

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

<список полей> представляет собой одно имя поля или перечень имен полей, разделенных запятыми. Например:

SELECT fio FROM stud; – выборка поля fio из всех записей таблицы stud

SELECT fio, n_spect FROM stud; – выборка полей fio, n_spect из таблицы stud

SELECT * FROM stud; – выборка всех полей из таблицы stud

SELECT s.* FROM stud AS s; – выборка всех полей из таблицы stud (с присваиванием таблице псевдонима s)

SELECT s.fio AS s_f, s.n_spect AS spect FROM stud AS s; – выборка из таблицы stud полей fio и n_spect с присваиванием им псевдонимов.

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

Как понятно из вышеприведенных примеров, <список источников> представляет собой одно или несколько имен таблиц (разделенных запятыми), из которых производится выборка данных. Если имена таблиц перечисляются через запятую, то результатом такой выборки будет так называемое полное соединение (аналог декартового произведения множеств), т.е. каждой строке одной исходной таблицы будет сопоставлена каждая строка другой исходной таблицы. Практическая необходимость в выполнении выборок такого рода имеется далеко не всегда. Для ограничения соединений используют выражение WHERE. Например:

SELECT st.fio, sp.name_s

FROM stud AS st, spect AS sp

WHERE st.n_spect = sp.n_spect;

Здесь выбирается поле fio из таблицы stud и поле name_s из таблицы spect. Причем, в результирующий набор записей входят только такие сочетания записей из двух исходных таблиц, для которых выполняется условие WHERE. Для выполнения соединений таблиц используется также синтаксис, расширяющий <список источников> путем использования выражений семейства JOIN. В <условии отбора> могут также использоваться различные арифметические и логические выражения.

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

Более подробное рассмотрение синтаксиса SELECT выходит за пределы данной работы.

Оператор INSERT

Оператор INSERT предназначен для вставки записей в таблицы. Синтаксис:

INSERT INTO <имя таблицы> (<список полей>) VALUES (<список значений>)

Например:

INSERT INTO stud (nz, fio, data_p, n_fclt, n_spect, kurs, n_grup n_pasp) VALUES (‘000001’, ‘Иванов Иван Иванович’, ’01.07.2012’, 2, ‘ИТ’, 1, ‘12’, ’44 00 123456’);

Оператор UPDATE

Оператор UPDATE предназначен для модификации записей таблицы. Синтаксис:

UPDATE <имя таблицы> SET <список выражений присваивания> [WHERE <условие>]

<список выражений присваивания> состоит из однотипных выражений, разделенных запятыми, каждое из которых представляет собой следующую конструкцию: <имя поля> = <значение>. Установка значений выполняется только для тех записей, для которых выполняется <условие>. Например:

UPDATE stud SET kurs=2, n_grup=’22’ WHERE n_grup=’12’;

Оператор DELETE

Оператор DELETE предназначен для удаления записей таблицы. Синтаксис:

DELETE FROM <имя таблицы> [WHERE <условие>]

Создание вычисляемых полей

Для создания вычисляемого поля в редакторе полей создается новое поле командой New Field. При этом в окне New Field указывают: FieldTypeCalculated, Name – имя вычисляемого поля, Component – имя соответствующего невизуального компонента (можно не изменять), Type – тип значения поля, Size – размер.

После этого определяется событие OnCalcFileds соответствующего компонента TTable или TQuery. В создаваемой при этом процедуре вычисляется значение поля.

Создание полей Lookup

При реализации связей «один-к-одному» возникает задача получения при навигации по главной таблице значения некоторого поля связанной с ней подчиненной. Для этого используются Lookup-поля. Для определенности установим, что поле связки в главной таблице Master называется MasterKeyField, поле связки в подчиненной таблице DetailDetailKeyField, поле в подчиненной таблице, доступ к которому необходим из главной, – DetailDataField.

В редакторе полей главной таблицы создается новое поле командой New Field. В окне New Field устанавливаются: FieldTypeLookup, Name – имя поля, Component – имя компонента, Type – тип значения поля (должен совпадать с типом DetaildataField), Key FieldsMasterKeyField, LookupKeysDetailKeyField, DatasetDetail, Result FieldDetailDataField.

Программный доступ к БД

Простейшая форма доступа к таблицам – просмотр и редактирование таблицы при помощи компонента TDBGrid, а также навигация при помощи компонента TDBNavigator. Все те же операции навигации и редактирования можно выполнять программно.

Открытие и закрытие таблиц и запросов осуществляется при помощи свойства Active и методов Open и Close. Навигация выполняется при помощи методов First – переход к первой записи, Last – переход к последней записи, Prior – переход к предыдущей записи, Next – переход к следующей записи, Locate – поиск записи по значению полей.

Поиск записи при помощи метода Locate выполняется следующим образом:

Пример 1:

Variant  FieldValue;  // искомое значение

TLocateOptions Opts;   // настройки поиска

TQuery  Q;   // запрос

 Opts.Clear(); // очистка настроек поиска

 // инициализация значения FieldValue

if (Q->Locate ( "FNAME", FieldValue, Opts ) )

 {

 // запись найдена

}

Пример 2:

Variant  Values [2];

TLocateOptions Opts;

TQuery  Q;

Opts.Clear();

Values[0] = …; //инициализация искомых значений

 Values[1] = …;

if ( Q->Locate ( "FNAME1;FNAME2", VarArrayOf (Values, 1), Opts ) )

{

 // запись найдена

}

В первом примере осуществляется поиск записи, в которой значение поля FNAME равно искомому. Во втором примере осуществляется поиск записи в которой значения полей FNAME1, FNAME2 равны элементам массива Values.

Вставка записей в таблицу осуществляется при помощи методов Append и Insert. Запуск любого из этих методов переводит таблицу в режим вставки новой записи. Все изменения значений полей, которые после этого будут сделаны, фиксируются методом Post.

Редактирование записей в таблице осуществляется при помощи метода Edit. Он переводит таблицу в режим редактирования текущей записи. Все изменения значений полей, которые после этого будут сделаны, также фиксируются методом Post.

Пример :

Table1->Edit();

Table1->FieldByName(“FIELD1”)->AsString = “string”;

Table1->FieldByName(“FIELD2”)->AsInteger = 5;

Table1->Post();

Table1->Insert();

Table1->FieldByName(“FIELD1”)->AsString = “str”;

Table1->FieldByName(“FIELD2”)->AsInteger = 10;

Table1->Post();

Использование объекта TDataModule

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

Класс TDataModule имеет, кроме конструктора, всего два события: OnCreate – при создании объекта и OnDestroy – при удалении объекта. Рекомендации по использованию этих процедур:

  1.  В конструкторе закрыть все наборы данных и БД. Это делается с целью устранить ситуацию, когда неверно настроенные наборы данных были по ошибке оставлены разработчиком активизированными.
  2.  В методе OnCreate открыть/создать необходимые БД и наборы данных с контролем корректности открытия.
  3.  В методе OnDestroy сохранить и закрыть все наборы данных и БД.

Такой подход позволяет программно настраивать обращение к БД (например, брать путь из конфигурации и т.д.) и контролировать ошибки.

Программное создание таблицы

Таблица может быть создана не только при помощи DBD, но и программно. Программное открытие/создание таблицы демонстрирует пример:

Open = true;

Table->TableName = “T.DBF”;  //устанавливаем имя таблицы

try

{

Table->Active = true;  // попытка открытия таблицы

}

catch (…)

{

 Open = false; // сброс флага удачного открытия

}

if (!Open)  // не удалось открыть таблицу

 try

{

 Table->TableType = ttFoxPro;  // тип - FoxPro

 TFieldDef *pDef = Table->FieldDefs->AddFieldDef(); //поля

 pDef->Name = “FIELD1”;

 pDef->DataType = ftInteger;

 pDef = Table->FieldDefs->AddFieldDef();

 pDef->Name = “FIELD2”;

 pDef->DataType = ftString;

 pDef->Size = 15;

 …

 Table->CreateTable();

 Table->Active = true;

 }

 catch (…)

{

 // неудачное создание таблицы

}

Задание

Для выполнения задания воспользоваться вариантом практической работы №1 и базами данных, разработанными в ходе ее выполнения.

  1.  Создать проект, разместив в нем все компоненты доступа к данным в контейнере DataModule. Выборку данных из таблиц выполнить с использованием компонента TQuery. Изучить возможности модификации данных в компоненте TDBGrid, выбранных при помощи TQuery (выборка из одной таблицы, нескольких таблиц, настройки компонента TQuery и т.п.).
  2.  Реализовать формы редактирования и добавления записей в таблицу с использованием компонентов TQuery и запросов INSERT, UPDATE, DELETE.
  3.  Реализовать «клон» проекта с программным созданием таблиц.


 

А также другие работы, которые могут Вас заинтересовать

50512. АРХИВИРОВАНИЕ ДАННЫХ. РАБОТА С АРХИВАТОРАМИ КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ 159 KB
  Наиболее известные архиваторы Название Описание 7ZIP http: 7zip. Он поддерживает ZIP 7z RR CB GZIP BZIP2 и TRархивы. Степень сжатия которая достигается этим архиватором чрезвычайно высока при использовании родного формата 7zip но при использовании опций обычного ZIPформата степень сжатия меньше. LZip Мощная программа для работы как с Zipфайлами так и с архивами других форматов всего 35 и компрессирование разных форматов.
50513. Изучение затухающих электромагнитных колебаний в колебательном контуре с помощью осциллографа 519.5 KB
  Цель работы: Изучение с помощью электронного осциллографа электромагнитных колебаний возникающих в колебательном контуре содержащем индуктивность емкость и активное сопротивление; изучение условий возникновения затухающих колебаний в контуре; расчет основных физических...
50514. Использование СУБД ACCESS для публикация данных в Web 58 KB
  Результат создания страницы доступа к данным просмотреть в Web броузере. Статические HTMLстраницы Такая Webстраница содержит некоторые неизменяемые данные полученные путем преобразования данных таблицы или запроса CCESS в документ формата HTML. При создании такой страницы создается один документ для каждой таблицы формы или страницы отчета CCESS.
50515. Создание запроса к внешним источникам данных 109.5 KB
  Регион адрес Город адрес Улица адрес Предприятие Статус предпр. Регион адрес Город адрес Улица адрес Семестр Учебный год Задолженность экзамены Задолженность зачеты Задолженность оплата Пол Задание 2.
50516. Безопасность систем баз данных. Методические указания 200 KB
  Методические указания к лабораторным работам по дисциплине Безопасность систем баз данных Для студентов специальности 090105 Комплексное обеспечение информационной безопасности автоматизированных систем Ижевск 2007 УДК. Методические указания предназначены для выполнения лабораторных работ по дисциплине Безопасность систем баз данных для студентов специальности 090105 Комплексное обеспечение безопасности автоматизированных систем Данные методические указания предназначены для проведения...
50517. Реализация диалогового интерфейса в СУБД FoxPro. Язык запросов SQL 212 KB
  Форму можно создать с помощью мастера формы Form Wizrd Мастер формы. Создать структуру файла БД в соответствии с вариантом См. Создать форму с помощью мастера. Создать форму с помощью конструктора см.
50518. Безопасность жизнедеятельности. Лабораторный практикум 244.5 KB
  Оптимальные и допустимые величины показателей микроклимата устанавливаются в зависимости от: 1 периода года; холодный период года характеризуется среднесуточной температурой наружного воздуха 10оС и ниже теплый выше 10оС; 2 категории работ по уровню энергозатрат организма.54896 устанавливает что при температуре воздуха на рабочих местах 25 оС и выше...
50519. Закрытый склад. Расчет деревянной конструкции 373.77 KB
  В курсовом проекте произведен расчет деревянных конструкций гнутоклееной рамы. Определены расчетные и нормативные нагрузки на перекрытие и поперечную раму здания. Подобрано сечение элементов поперечника. Выбраны конструктивные решения. Осуществлены расчеты узлов поперечника.
50520. Исследование процессов во влажном воздухе 138.5 KB
  Изучение процессов изменения состояния влажного воздуха приобретение навыков измерения влажности с помощью аспирационного психрометра и Id диаграммы. Смесь сухого воздуха с водяным паром называется влажным воздухом. Соответственно этому влажный воздух бывает: насыщенным влажным воздухом смесь сухого воздуха с насыщенным водяным паром; ненасыщенным влажным воздухом смесь сухого воздуха с перегретым водяным паром. При дальнейшем охлаждении влажного воздуха происходит конденсация пара.