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.  Реализовать «клон» проекта с программным созданием таблиц.


 

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

49873. Расчет полосового активного фильтра первого порядка 502.5 KB
  Цель работы: изучить основные принципы работы полосового активного фильтра первого порядка. Провести расчет нестабильности параметров полосового фильтра в зависимости от нестабильности параметров элементов схемы. При объединении фильтра низких и фильтра высоких частот получается полосовой фильтр пропускающий сигналы в диапазоне частот от до ; Его схема и ЛАЧХ на Рис.
49875. Усилитель звуковой частоты 3.16 MB
  ВЫБОР ОБОСНОВАНИЕ И РАСЧЕТ СТРУКТУРНОЙ СХЕМЫ УСИЛИТЕЛЯ. РАСЧЕТ АЧХ УСИЛИТЕЛЯ. По номинальному входному напряжению 100 мВ и внутреннему сопротивлению источника сигнала 700 Ом можно предположить что источником сигнала для данного усилителя является микрофон. ВЫБОР ОБОСНОВАНИЕ И РАСЧЕТ СТРУКТУРНОЙ СХЕМЫ УСИЛИТЕЛЯ.
49877. Усилитель звуковой частоты. Расчет АЧХ усилителя 3.16 MB
  ВЫБОР ОБОСНОВАНИЕ И РАСЧЕТ СТРУКТУРНОЙ СХЕМЫ УСИЛИТЕЛЯ. РАСЧЕТ АЧХ УСИЛИТЕЛЯ. По номинальному входному напряжению 20 мВ и внутреннему сопротивлению источника сигнала 250 Ом можно предположить что источником сигнала для данного усилителя является микрофон. ВЫБОР ОБОСНОВАНИЕ И РАСЧЕТ СТРУКТУРНОЙ СХЕМЫ УСИЛИТЕЛЯ.
49879. Применение нейронных сетей при оценке платежеспособности заемщика банка Драгоценности Урала 1.99 MB
  Искусственные нейронные сети. Нейросети в финансах и банковском деле Нейронные сети и нейрокомпьютеры это одно из направлений компьютерной индустрии в основе которого лежит идея создания искусственных интеллектуальных устройств по образу и подобию человеческого мозга. Искусственный нейронные сети в значительной мере заимствуют принципы работы головного мозга.
49880. Исследование моделей представления знаний и разработка прототипа экспертной системы поддержки принятия решений для предметной области управления сборкой двигателей внутреннего сгорания 3.43 MB
  Укомплектовать объект: ДВС субъект: УСД компоненты: Комплектующие Узел поддействия: условия активизации: Комплектующие Объеденены = flse Узел У_Находится_в = Склад готовой продукции результат: УСД Укомплектован ДВС = истина Комплектующие Объеденены = true Комплектующие Объеденены ДВС = истина ДВС Укомплектован = true Узел Объеденен Узел = истина Узел У_Укомплектованность = Продукт действие верхнего уровня: 1.2 Упаковать объект: Готовый_продукт субъект: УСД компоненты: Коробка ДВС поддействия: условия активизации: УСД...
49881. Cинтез и анализ цифрового фильтра 1.09 MB
  Дискретная обработка аналогового сигнала. Математическая модель сигнала. Расчёт спектральной плотности сигнала. Дискретизация сигнала.