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


 

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

34537. Проблема гуманизма в произведениях А. Де Сент-Экзюпери. «Маленький принц» как сказка-притча 18.04 KB
  Маленький принц как сказкапритча. Маленький принц был написан в 1943 году и трагедия Европы во второй мировой войне воспоминания писателя о разгромленной оккупированной Франции накладывают свой отпечаток на произведение. То что Маленький принц сказка мы определяют по имеющимся в повести сказочным признакам: фантастическое путешествие героя сказочные персонажи Лис Змея Роза. Прообразом литературной сказки Маленький принц можно считать фольклорную волшебную сказку с бродячей фабулой: прекрасный принц изза несчастной любви...
34538. От Сюрреализма к соцреализму. Арагон и Элюар 18.91 KB
  Арагон и Элюар СЮРРЕАЛИЗМ Мировой центр – Париж но среди участников движения были и немцы и чехи и американцы. Участники необычайно имениты: Арагон Ренуар Дали и т. Арагон поэт и романист которому принадлежит видное место во французской литературе социалистического реализма крупный общественный деятель. стала для Арагона первой школой жизни.
34539. Своеобразие мифотворчества Ф. Кафки 18.94 KB
  Странность Грегоранасекомого в том что он начинает превращаться и превращается не в насекомое а в Человека. Звучит абсурдно но мизансцена свидетельствует о том что Грегор трутень на нем паразитирует вся семья. Грегор Замза просыпаясь утром понимает кто он есть на самом деле и образ жука здесь служит символом очищения души ее возрождении и освобождении от гнета. Грегор человек в обличии насекомого; его родичи насекомые в человеческом облике.
34540. Теория эпического театра и Конфликт и его худ. воплощение в пьесах Брехта 17.5 KB
  Среди наиболее знаменитых пьес эмиграции Матушка Кураж и ее дети 1939. В условиях 30х годов Матушка Кураж звучала конечно как протест против демагогической пропаганды войны фашистами и адресовалась той части немецкого населения которая поддалась этой демагогии. Сущность эпического театра становится особенно ясной в связи с Матушкой Кураж . Поэтому в Матушке Кураж столь последовательный и выдержанный даже в мелких деталях подлинный лик жизни.
34541. Тема «потерянного поколения» в литературе 1 половины 20 в. (Э.М. Ремарк, Р. Олдингтон, Ф.С. Фицджеральд, Э. Хемингуэй и др.) 17.11 KB
  и Хемингуэя Прощай оружие. Все вы потерянное поколение эпиграф Хемингуэя затем стал лит. Они индивидуалисты и надеются как герои Хемингуэя лишь на себя на свою волю а если и способны на решительный общественный поступок то сепаратно заключая договор с войной и дезертируя. Хемингуэй рассказал о возвращении с войны сборник рассказов В наше время 1925 о сущности неприкаянной жизни фронтовиков и их подруг об одиночестве невест не дождавшихся возлюбленных Фиеста 1926 о горечи прозрения после первого ранения и утраты...
34542. Тема антифашистского сопротивления в творчестве А. Зегерс 15.34 KB
  Зегерс. Анна Зегерс 19001983 – псевдоним. Роман Седьмой крест давно признан лучшим романом Зегерс. В Седьмом кресте наиболее отчетливо сказалось замечательное умение Анны Зегерс показывать людей в нерасторжимом единстве личного и общественного ставить острые политические вопросы времени обращаясь к частной будничной жизни широких слоев народа.
34543. Исторический роман 13.83 KB
  В пределах этой общей характеристики исторического романа нового типа диапазона переходов и разновидностей достаточно велик: от модернизации истории т. романа в котором исторически достоверны сюжет основные факты описание быта национальный и временный колорит но в конфликты и отношения героев внесены современные мотивировки и проблемы Безобразная герцогиня или Еврей Зюсс Л. романа представляющего собой в сущности исторически костюмированную современность романа намеков и иносказаний в котором в условноисторической оболочке...
34544. Роман воспитания в немецкой литературе 16.13 KB
  Bildungsromn тип романа получивший распространение в литературе немецкого Просвещения. Роман воспитания традиционная разновидность жанра романа в эволюции которой проступает одна из магистральных линий развития немецкой романистики на протяжении нескольких столетий. Уходя своими истоками в глубь времен в рыцарские повествования средневековья и плутовской роман барокко XVII века он получил законченную классическую форму в творчестве великих просветителей Германии К.
34545. Интеллектуальный роман Т. Манна 18.45 KB
  Манна Термин интеллектуальный роман был впервые предложен Томасом Манном. Манна или Г. Манна или Гессе существенно отличается от психологизма например у Дёблина. Манна признает перед собравшимися свою вину.