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


 

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

25287. Віра і релігійна віра. Психологічні аспекти осягнення феномену віри 28.5 KB
  Віра і релігійна віра. Психологічні аспекти осягнення феномену віри Поняття віра€ є полісемантичним багатозначним. Віра це особливого роду субєктивний акт те як ми віримо. У змістовному відношенні виділяють: 1 етичну віру віра довіря; напр.
25288. Вчення про Бога: теїзм, деїзм, пантеїзм 28.5 KB
  Вчення про Бога: теїзм деїзм пантеїзм Теїзм від грецького theos бог релігійнофілософське вчення яке визнає існування Бога як надприродної істоти що наділена розумом і волею і таємничим чином впливає на всі матеріальні та духовні процеси. На відміну від деїзму теїзм стверджує безпосередню участь Бога в усіх світових подіях а на відміну від пантеїзму відстоює існування Бога поза світом і над ним. deus бог вчення яке визнає існування Бога в якості першопричини світ який потім розвивається за своїми власними законами. деїзм...
25289. Аналіз доказів буття Бога 32.5 KB
  Аналіз доказів буття Бога Особливості доказів буття Бога: 1 на думку богословів кожен доказ без інших не може бути взятий; 2 вони є непрямими; 3 всі докази не стверджуються з логічною необхідністю вони лише вірогідні. Якщо Бог сукупність всіх досконалостей то суди входить досконалість як Буття а отже Бог існує. Все що ми мислимо то є буття. Кант: з поняття Бога не можна вивести буття Бога бо вони протилежні одне одному.
25290. Зв’язок української філософії з політикою українізації. „Поворот” на філософському фронті України та його наслідки 26.5 KB
  Поворот€ на філософському фронті України та його наслідки. У ній активну участь взяли письменники та літературні діячі України. Зеров відзначає той факт що відбувається відродження шляхом повернення України до Заходу тобто через відновлення віковічних зв'язків з Західною Європою. У столиці тогочасної України у Харкові відбувається організаційне оформлення ідей та позицій.
25291. П.Копнін – засновник київської світоглядно-гносеологічної школи 29.5 KB
  Копнін засновник київської світоглядногносеологічної школи Павло Копнін 19221971. Основні праці Копніна: Боротьба матеріалізму та ідеалізму€ канд. Копніна був найпліднішим у його творчості. Починаючи з Копніна в Україні виникає нове культурне явище.
25292. Основні напрямки філософських пошуків В.Шинкарука 33 KB
  Радіщева€ дисертація Людина та світ людини€ Соціальноісторичні та світоглядові аспекти філософських категорій€. В своїй дисертації Шинкарук висловлює такі думки: людина є внутрішня€ та зовнішня€ де перше визначає друге; зовнішня натура як ієрогліф€ внутрішньої; вирішальна значущість внутрішнього світу людини який уможливлює поставлення себе над усіма випадками€; принцип самопізнання як наріжний для людини; обмеженість опосередкованості розуму та переваги безпосереднього спілкування€ з духовним світом. Відповідно...
25293. Проблема людини і світу у працях українських шестидесятників 32 KB
  Проблема людини і світу у працях українських шестидесятників Парадигмальні зрушення котрі було започатковано в українській філософії 60х років мали значущість не лише науковофілософську а й загальнокультурну й навіть політичну. Цінності культури розглядаються як квінтесенція духовного досвіду людини та як найважливіший регулятив її світовідношення. У центр своїх наукових пошуків Іванов поставив проблему людини. При розгляді цієї проблеми виходив з діяльних аспектів людського буття єдності онтологічних світоглядних та гносеологічних...
25294. Проблема методології та логіки наукового пізнання в Україні 60-80-х років 32.5 KB
  Проблема методології та логіки наукового пізнання в Україні 6080х років Головною орієнтацією наукового пізнання в цей період було звернення до матеріалізму в природознавстві.Копнін засновник світоглядногносеологічної школи орієнтував свою філософію на розкриття світоглядних методологічних і гносеологічних аспектів розвитку наукового пізнання проблеми діалектичної логіки розвиток діалектики як теорії пізнання діалектичного матеріалізму зясування взаємозвязку філософії з іншими науками обґрунтування творчої активності субєкта...
25295. Діалектичний матеріалізм – міф чи реальність 33 KB
  діалектичний матеріалізм міф чи реальність. Діалектичний матеріалізм позначає філософію в офіційній доктрині комуністичних партій але також у деяких її критиків напр. Анрі Лефевр €œДіалектичний матеріалізм€ 1940. Подальше застосування терміна належить Леніну €œМатеріалізм та емпіріокритицизм€ 1908.