Визуальный построитель запросов на извлечение

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 12.08.2011
Размер файла 152,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Курсовая работа

по дисциплине

Базы данных

тема:

Визуальный построитель запросов на извлечение

Содержание

  • Введение
  • 1. Постановка задачи
  • 2. Язык запросов SQL
    • 2.1 Общие сведения о SQL
    • 2.2 Оператор SELECT
    • 2.2.1 Раздел FROM
    • 2.2.2 Раздел WHERE
    • 2.2.3 Раздел GROUP BY
    • 2.2.4 Раздел HAVING
    • 2.2.5 Агрегатные функции и результаты запросов
  • 3. Программная реализация
    • 3.1 Алгоритм работы приложения
    • 3.2 Интерфейс приложения
  • Заключение
  • Список использованной литературы
  • Приложение А (обязательное) Листинг программы

Введение

В современном мире базы данных применяются повсеместно. Совершенно очевидна необходимость развития технологий хранения и доступа к данным. Создание стандарта SQL было большим прорывом в этом направлении. Но, несмотря на первоначальное желание разработчиков сделать этот язык запросов максимально приближенным к естественному (английскому), это получилось с определенными оговорками.

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

Целью данной работы является создание такого визуального построителя запросов на извлечение данных (с помощью оператора SELECT).

1. Постановка задачи

Задача данной курсовой работы заключается в создании визуального построителя запросов на извлечение - программы, позволяющей создавать SQL-запросы с оператором SELECT визуальным способом (выбором соответствующих параметров запроса).

2. Язык запросов SQL

2.1 Общие сведения о SQL

SQL (англ. Structured Query Language -- язык структурированных запросов) -- универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL является информационно-логическим языком, а не языком программирования.

Существенным свойством языка запросов SQL являются возможность простого формулирования запросов.

Существенной особенностью SQL является возможность указания в запросе потребности группирования отношения-результата по указанным полям с поддержкой условий выборки на всю группу целиком. Такие условия выборки могут содержать агрегатные функции, вычисляемые на группе. Эта возможность SQL главным образом отличает этот язык от языков реляционной алгебры и реляционного исчисления, не содержащих аналогичных средств.

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

Самый общий вид запроса на языке SQL представляет теоретико-множественное алгебраическое выражение, составленное из элементарных запросов.

2.2 Оператор SELECT

SELECT -- оператор языка SQL, возвращающий набор данных (выборку) из базы.

Он используется для выборки нуля или более строк из одной или нескольких таблиц, хранимых процедур, представлений БД. В большинстве приложений SELECT является наиболее часто используемым оператором языка управления данными. При формировании запроса SELECT пользователь описывает ожидаемый набор данных, но не указывает, какие физические операции должны быть произведены для получения этого набора. Определение для запроса оптимального плана является задачей СУБД.

2.2.1 Раздел FROM

Результатом выполнения раздела FROM является расширенное декартово произведение таблиц, заданных списком таблиц раздела FROM. Расширенное декартово произведение (расширенное, потому что в качестве операндов и результата допускаются мультимножества) в стандарте определяется следующим образом:

"Расширенное произведение R есть мультимножество всех строк r таких, что r является конкатенацией строк из всех идентифицированных таблиц в том порядке, в котором они идентифицированы. Мощность R есть произведение мощностей идентифицированных таблиц. Порядковый номер столбца в R есть n+s, где n - порядковый номер порождающего столбца в именованной таблице T, а s - сумма степеней всех таблиц, идентифицированных до T в разделе FROM".

Если табличное выражение содержит только раздел FROM (это единственный обязательный раздел табличного выражения), то результат табличного выражения совпадает с результатом раздела FROM.

2.2.2 Раздел WHERE

Если в табличном выражении присутствует раздел WHERE, то следующим вычисляется он.

Вычисление раздела WHERE производится по следующим правилам.

Пусть R - результат вычисления раздела FROM. Тогда условие поиска применяется ко всем строкам R, и результатом раздела WHERE является таблица, состоящая из тех строк R, для которого результатом вычисления условия поиска является TRUE.

Заметим, что поскольку стандарт SQL/89 допускает наличие в базе данных неопределенных значений, то вычисление условия поиска производится не в булевой, а в трехзначной логике со значениями TRUE, FALSE и UNKNOWN (неизвестно). Для любого предиката известно, в каких ситуациях он может порождать значение UNKNOWN.

Среди предикатов условия поиска в соответствии с SQL/89 могут находиться следующие предикаты: предикат сравнения, предикат BETWEEN, предикат IN, предикат LIKE, предикат NULL, предикат с квантором и предикат EXISTS. Сразу заметим, что во всех реализациях SQL на эффективность выполнения запроса существенно влияет наличие в условии поиска простых предикатов сравнения (предикатов, задающих сравнение столбца таблицы с константой). Наличие таких предикатов позволяет СУБД использовать индексы при выполнении запроса, т.е. избегать полного просмотра таблицы. Хотя в принципе язык SQL позволяет пользователям не заботиться о конкретном наборе предикатов в условии выборки (лишь бы они были синтаксически и семантически правильны), при реальном использовании SQL-ориентированных СУБД такие технические детали стоит иметь в виду.

2.2.3 Раздел GROUP BY

Если в табличном выражении присутствует раздел GROUP BY, то следующим выполняется он.

Если обозначить через R таблицу, являющуюся результатом предыдущего раздела (FROM или WHERE), то результатом раздела GROUP BY является разбиение R на множество групп строк, состоящего из минимального числа групп таких, что для каждого столбца из списка столбцов раздела GROUP BY во всех строках каждой группы, включающей более одной строки, значения этого столбца равны. Для обозначения результата раздела GROUP BY в стандарте используется термин "сгруппированная таблица".

2.2.4 Раздел HAVING

Наконец, последним при вычислении табличного выражения используется раздел HAVING (если он присутствует).

Раздел HAVING может осмысленно появиться в табличном выражении только в том случае, когда в нем присутствует раздел GROUP BY. Условие поиска этого раздела задает условие на группу строк сгруппированной таблицы. Формально раздел HAVING может присутствовать и в табличном выражении, не содержащем GROUP BY. В этом случае полагается, что результат вычисления предыдущих разделов представляет собой сгруппированную таблицу, состоящую из одной группы без выделенных столбцов группирования.

Условие поиска раздела HAVING строится по тем же синтаксическим правилам, что и условие поиска раздела WHERE, и может включать те же самые предикаты. Однако имеются специальные синтаксические ограничения по части использования в условии поиска спецификаций столбцов таблиц из раздела FROM данного табличного выражения.

Эти ограничения следуют из того, что условие поиска раздела HAVING задает условие на целую группу, а не на индивидуальные строки.

Поэтому в арифметических выражениях предикатов, входящих в условие выборки раздела HAVING, прямо можно использовать только спецификации столбцов, указанных в качестве столбцов группирования в разделе GROUP BY. Остальные столбцы можно специфицировать только внутри спецификаций агрегатных функций COUNT, SUM, AVG, MIN и MAX, вычисляющих в данном случае некоторое агрегатное значение для всей группы строк. Аналогично обстоит дело с подзапросами, входящими в предикаты условия выборки раздела HAVING: если в подзапросе используется характеристика текущей группы, то она может задаваться только путем ссылки на столбцы группирования.

Результатом выполнения раздела HAVING является сгруппированная таблица, содержащая только те группы строк, для которых результат вычисления условия поиска есть true. В частности, если раздел HAVING присутствует в табличном выражении, не содержащем GROUP BY, то результатом его выполнения будет либо пустая таблица, либо результат выполнения предыдущих разделов табличного выражения, рассматриваемый как одна группа без столбцов группирования.

2.2.5 Агрегатные функции и результаты запросов

В стандарте SQL/89 определены пять стандартных агрегатных функций (в стандарте они называются функциями над множествами): COUNT - число строк или значений, MAX - максимальное значение, MIN - минимальное значение, SUM - суммарное значение и AVG - среднее значение.

3. Программная реализация

3.1 Алгоритм работы приложения

Задача, которую выполняет визуализатор запросов, состоит в построении SQL-запроса с параметрами, указанными пользователем. Представить алгоритм работы можно в виде схемы (рисунок 1).

Размещено на http://www.allbest.ru/

Рисунок 1 - Алгоритм работы приложения

Из схемы видно, что для составления корректного запроса обязательно указать как минимум необходимые поля и таблицы, из которых будут извлекаться эти поля. Но также могут быть добавлены дополнительные условия - услвия запроса, группировки и сортировки.

3.2 Интерфейс приложения

Приложение было написано в среде разработки Borland Delphi 7. Были использованы стандартные элементы управления (GroupBox, CheckBox, Memo, RadioGroup и т.д.).

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

При запуске программы на экране отображается главное окно, которое содержит элементы управления для изменения параметров составляемого запроса (рисунок 2).

Рисунок 2 - Внешний вид приложения

Программа имитирует работу (создает запросы) с учебной базой данных, содержащей две таблицы - “Преподаватели” и “Студенты”. Возможные атрибуты: порядковый номер, имя, фамилия, факультет, курс.

В списке Извлекаемые поля следует выбрать поля, которые будет содержать результирующая таблица после выполнения запроса. Есть возможность быстрого выбора всех полей - выключатель Все поля. При его включении в запрос вместо перечисления всех полей добавляется ключевой символ «*».

Если включен режим Исключение дубликатов, то в запрос будет добавлено ключево слово DISTINCT и в результирующем отношении будут устранены значения-дубликаты.

В списке Таблицы следует выбрать таблицы, из которых производится извлечение данных (раздел FROM запроса).

В разделе Условия запроса можно накладывать дополнительные условия по выборке данных (раздел WHERE запроса). Для этого следует выбрать из выпадающих списков сопоставляемые величины (или ввести значения вручную) и нужный предикат, а затем нажать кнопку Добавить условие. Также можно менять способ логической связи между условиями (И, ИЛИ). Ненужные (неправильные) условия можно удалить, выбрав соответсвующее условие в списке и нажав кнопку Удалить условие.

В списке Группировка можно добавить поля, по которым будет проводиться группировка результируищих данных (раздел GROUP BY запроса). При этом можно добавлять дополнительные условия для группировки (раздел HAVING запроса) с использовнием агрегирующих функций.

В списке Сортировка можно выбрать поля, по которым будет произведена сортировка (раздел ORDER BY запроса). Также с помощью переключателя Направление можно выбрать направление сортировки - прямое или обратное.

В списке Временные таблицы можно выбрать способ использования вспомогательных таблиц (раздел INTO запроса). При выборе пункта Обычный метод в запрос будет добавлено ключевое слово TEMP. Вариант SCRATCH отличается от TEMP тем, что временная таблица фрагментируется по всем дискам.

В поле SQL-запрос генерируется созданный запрос. Это происходит автоматически при любом изменении параметров запроса.

визуальный построитель selekt запрос

Заключение

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

В результате проведенной работы был рассмотрен теоретический материал по теме SQL-запросов, было написано приложение (визуальный построитель запросов на извлечение).

Список использованной литературы

1. Кузнецов, С.Д. Основы современных баз данных [Текст]: учебное пособие. - М.: Интернет-университет информационных технологий, 2007. - 720 с.

2. Свободная энциклопедия [Электронный ресурс]. - SQL - Википедия. - Режим доступа: http://ru.wikipedia.org/wiki/SQL.

Приложение А (обязательное)

Листинг программы

unit Unit1;

interface

uses

Windows, SysUtils, Graphics, Controls, Forms, StdCtrls, Classes, CheckLst,

Buttons, ExtCtrls, Math;

type

TForm1 = class(TForm)

GroupBox_Querry: TGroupBox;

GroupBox_Tables: TGroupBox;

GroupBox_GroupBy: TGroupBox;

GroupBox_Fields: TGroupBox;

GroupBox_Having: TGroupBox;

GroupBox_OrderBy: TGroupBox;

GroupBox_Where: TGroupBox;

GroupBox_NewCondition: TGroupBox;

Memo_Querry: TMemo;

Memo_Having: TMemo;

CheckListBox_Tables: TCheckListBox;

CheckListBox_GroupBy: TCheckListBox;

CheckListBox_Fields: TCheckListBox;

CheckListBox_OrderBy: TCheckListBox;

CheckBox_Distinct: TCheckBox;

CheckBox_AllFields: TCheckBox;

RadioGroup_OrderBy: TRadioGroup;

RadioGroup_Into: TRadioGroup;

ComboBox_Agg: TComboBox;

ComboBox_Where1: TComboBox;

ComboBox_Where2: TComboBox;

ComboBox_Where3: TComboBox;

SpeedButton_Agg: TSpeedButton;

SpeedButton_NewCondition: TSpeedButton;

SpeedButton_DeleteCondition: TSpeedButton;

SpeedButton_AND: TSpeedButton;

SpeedButton_OR: TSpeedButton;

ListBox_Where: TListBox; ListBox_Logics: TListBox;

procedure CheckListBox_TablesClickCheck(Sender: TObject);

procedure CheckBox_DistinctClick(Sender: TObject);

procedure UpdateSelectedFields;

procedure UpdateSelectedTables;

procedure UpdateSelectedGroups;

procedure UpdateHaving;

procedure UpdateWhere;

procedure UpdateOrder;

procedure UpdateInto;

procedure UpdateQuerry;

procedure CheckBox_AllFieldsClick(Sender: TObject);

procedure SpeedButton_AggClick(Sender: TObject);

procedure CheckListBox_GroupByClick(Sender: TObject);

procedure CheckListBox_FieldsClickCheck(Sender: TObject);

procedure Memo_HavingChange(Sender: TObject);

procedure CheckListBox_OrderByClickCheck(Sender: TObject);

procedure RadioGroup_OrderByClick(Sender: TObject);

procedure RadioGroup_IntoClick(Sender: TObject);

procedure Memo_WhereChange(Sender: TObject);

procedure ComboBox_Where2Change(Sender: TObject);

procedure SpeedButton_NewConditionClick(Sender: TObject);

procedure SpeedButton_DeleteConditionClick(Sender: TObject);

procedure SpeedButton_ANDClick(Sender: TObject);

procedure SpeedButton_ORClick(Sender: TObject);

end;

var

Form1: TForm1;

Distinct,

SelectedTables,

Where,

SelectedFields,

SelectedGroups,

OrderBy,

Into: String;

implementation

{$R *.dfm}

procedure TForm1.UpdateSelectedFields;

var i, count: Byte;

begin

SelectedFields := '';

count := 0;

if CheckBox_AllFields.Checked then begin

SelectedFields := '*';

for i := 0 to 4 do begin

CheckListBox_Fields.Checked[i] := TRUE;

if CheckListBox_GroupBy.Items.IndexOf(CheckListBox_Fields.Items[i]) = -1 then begin

CheckListBox_GroupBy.Items.Add(CheckListBox_Fields.Items[i]);

end;

if CheckListBox_OrderBy.Items.IndexOf(CheckListBox_Fields.Items[i]) = -1 then begin

CheckListBox_OrderBy.Items.Add(CheckListBox_Fields.Items[i]);

end;

if ComboBox_Where1.Items.IndexOf(CheckListBox_Fields.Items[i]) = -1 then begin

ComboBox_Where1.Items.Add(CheckListBox_Fields.Items[i]);

end;

if ComboBox_Where3.Items.IndexOf(CheckListBox_Fields.Items[i]) = -1 then begin

ComboBox_Where3.Items.Add(CheckListBox_Fields.Items[i]);

end;

end;

end else begin

for i := 0 to 4 do begin

if CheckListBox_Fields.Checked[i] then begin

if (count = 0) then begin

SelectedFields := CheckListBox_Fields.Items[i]

end else begin

SelectedFields := SelectedFields + ', ' + CheckListBox_Fields.Items[i];

end;

Inc(count);

if CheckListBox_GroupBy.Items.IndexOf(CheckListBox_Fields.Items[i]) = -1 then begin

CheckListBox_GroupBy.Items.Add(CheckListBox_Fields.Items[i]);

end;

if CheckListBox_OrderBy.Items.IndexOf(CheckListBox_Fields.Items[i]) = -1 then begin

CheckListBox_OrderBy.Items.Add(CheckListBox_Fields.Items[i]);

end;

if ComboBox_Where1.Items.IndexOf(CheckListBox_Fields.Items[i]) = -1 then begin

ComboBox_Where1.Items.Add(CheckListBox_Fields.Items[i]);

end;

if ComboBox_Where3.Items.IndexOf(CheckListBox_Fields.Items[i]) = -1 then begin

ComboBox_Where3.Items.Add(CheckListBox_Fields.Items[i]);

end;

end else begin

if CheckListBox_GroupBy.Items.IndexOf(CheckListBox_Fields.Items[i]) >= 0 then begin

CheckListBox_GroupBy.Items.Delete(CheckListBox_GroupBy.Items.IndexOf(CheckListBox_Fields.Items[i]));

end;

if CheckListBox_OrderBy.Items.IndexOf(CheckListBox_Fields.Items[i]) >= 0 then begin

CheckListBox_OrderBy.Items.Delete(CheckListBox_OrderBy.Items.IndexOf(CheckListBox_Fields.Items[i]));

end;

if ComboBox_Where1.Items.IndexOf(CheckListBox_Fields.Items[i]) >= 0 then begin

ComboBox_Where1.Items.Delete(ComboBox_Where1.Items.IndexOf(CheckListBox_Fields.Items[i]));

end;

if ComboBox_Where3.Items.IndexOf(CheckListBox_Fields.Items[i]) >= 0 then begin

ComboBox_Where3.Items.Delete(ComboBox_Where3.Items.IndexOf(CheckListBox_Fields.Items[i]));

end;

if ComboBox_Where1.Text = CheckListBox_Fields.Items[i] then begin

ComboBox_Where1.Text := '';

end;

if ComboBox_Where3.Text = CheckListBox_Fields.Items[i] then begin

ComboBox_Where3.Text := '';

end;

end;

end;

end;

end;

procedure TForm1.UpdateSelectedTables;

var i, count: Byte;

begin

SelectedTables := '';

count := 0;

for i := 0 to 1 do begin

if CheckListBox_Tables.Checked[i] then begin

if (count = 0) then begin

SelectedTables := ' FROM ' + CheckListBox_Tables.Items[i]

end else begin

SelectedTables := SelectedTables + ', ' + CheckListBox_Tables.Items[i];

end;

Inc(count);

end;

end;

end;

procedure TForm1.UpdateSelectedGroups;

var i, count: Byte;

begin

SelectedGroups := '';

count := 0;

if CheckListBox_GroupBy.Items.Count > 0 then begin

for i := 0 to CheckListBox_GroupBy.Items.Count-1 do begin

if CheckListBox_GroupBy.Checked[i] then begin

if (count = 0) then begin

SelectedGroups := #13#10' GROUP BY ' + CheckListBox_GroupBy.Items[i]

end else begin

SelectedGroups := SelectedGroups + ', ' + CheckListBox_GroupBy.Items[i];

end;

Inc(count);

end;

end;

end;

end;

procedure TForm1.UpdateHaving;

var i: Byte;

begin

if (CheckListBox_GroupBy.Items.Count > 0) AND

(Length(Memo_Having.Text) > 0) then begin

for i := 0 to CheckListBox_GroupBy.Items.Count-1 do begin

if CheckListBox_GroupBy.Checked[i] then begin

SelectedGroups := SelectedGroups + ' HAVING ' + Memo_Having.Text;

break;

end;

end;

end;

end;

procedure TForm1.UpdateOrder;

var i, count: Byte;

begin

OrderBy := '';

count := 0;

if (CheckListBox_OrderBy.Items.Count > 0) then begin

for i := 0 to CheckListBox_OrderBy.Items.Count-1 do begin

if CheckListBox_OrderBy.Checked[i] then begin

if (count = 0) then begin

OrderBy := #13#10' ORDER BY ' + CheckListBox_GroupBy.Items[i]

end else begin

OrderBy := OrderBy + ', ' + CheckListBox_GroupBy.Items[i];

end;

Inc(count);

end;

end;

if (count > 0) then begin

case RadioGroup_OrderBy.ItemIndex of

0: OrderBy := OrderBy + ' ASC';

1: OrderBy := OrderBy + ' DESC';

end;

end;

end;

end;

procedure TForm1.UpdateInto;

begin

case RadioGroup_Into.ItemIndex of

0: Into := '';

1: Into := #13#10' INTO TEMP';

2: Into := #13#10' INTO SCRATCH';

end;

end;

procedure TForm1.UpdateWhere;

var i: Byte;

Logics: String[4];

begin

Logics := '';

if (ListBox_Where.Items.Count > 0) then begin

Where := #13#10' WHERE';

for i := 0 to ListBox_Where.Items.Count-1 do begin

if i > 0 then begin

if ListBox_Logics.Items[i-1] = 'И' then begin

Logics := ' AND';

end else begin

Logics := ' OR';

end;

end;

Where := Where + Logics + ' ' + ListBox_Where.Items[i];

end;

end else begin

Where := '';

end;

end;

procedure TForm1.UpdateQuerry;

begin

UpdateSelectedFields;

UpdateSelectedTables;

UpdateSelectedGroups;

UpdateHaving;

UpdateWhere;

UpdateOrder;

UpdateInto;

if CheckBox_Distinct.Checked then Distinct := 'DISTINCT '

else Distinct := '';

Memo_Querry.Text := 'SELECT ' + Distinct + SelectedFields + SelectedTables + Where + SelectedGroups + OrderBy + Into;

end;

procedure TForm1.ComboBox_Where2Change(Sender: TObject);

begin

if ComboBox_Where2.ItemIndex = 9 then begin

ComboBox_Where3.Text := '';

ComboBox_Where3.Enabled := FALSE;

end else begin

ComboBox_Where3.Enabled := TRUE;

end;

end;

procedure TForm1.SpeedButton_NewConditionClick(Sender: TObject);

var S, S1, S2: String;

n: Integer;

begin

if (Length(ComboBox_Where1.Text) > 0) AND

(Length(ComboBox_Where3.Text) > 0) then begin

if (TryStrToInt(ComboBox_Where1.Text, n)) OR

(ComboBox_Where1.ItemIndex >= 0) then begin

S1 := ComboBox_Where1.Text;

end else begin

S1 := '''' + ComboBox_Where1.Text + '''';

end;

if (TryStrToInt(ComboBox_Where3.Text, n)) OR

(ComboBox_Where3.ItemIndex >= 0) then begin

S2 := ComboBox_Where3.Text;

end else begin

S2 := '''' + ComboBox_Where3.Text + '''';

end;

S := S1 + ComboBox_Where2.Text + S2;

if ListBox_Where.Items.IndexOf(S) = -1 then begin

ListBox_Where.AddItem(S, nil);

if ListBox_Where.Items.Count > 1 then begin

ListBox_Logics.Items.Add('И');

end;

end;

end;

UpdateQuerry;

end;

procedure TForm1.SpeedButton_DeleteConditionClick(Sender: TObject);

begin

if ListBox_Where.ItemIndex <> -1 then begin

if ListBox_Where.ItemIndex = ListBox_Where.Items.Count-1 then begin

ListBox_Logics.Items.Delete(ListBox_Where.ItemIndex-1);

end else begin

ListBox_Logics.Items.Delete(ListBox_Where.ItemIndex);

end;

ListBox_Where.Items.Delete(ListBox_Where.ItemIndex);

end;

UpdateQuerry;

end;

procedure TForm1.SpeedButton_ANDClick(Sender: TObject);

begin

if (ListBox_Where.ItemIndex <> -1) AND

(ListBox_Where.ItemIndex <> ListBox_Where.Items.Count-1) then begin

ListBox_Logics.Items[ListBox_Where.ItemIndex] := 'И';

end;

UpdateQuerry;

end;

procedure TForm1.SpeedButton_ORClick(Sender: TObject);

begin

if (ListBox_Where.ItemIndex <> -1) AND

(ListBox_Where.ItemIndex <> ListBox_Where.Items.Count-1) then begin

ListBox_Logics.Items[ListBox_Where.ItemIndex] := 'ИЛИ';

end;

UpdateQuerry;

end;

procedure TForm1.SpeedButton_AggClick(Sender: TObject);

begin

if ComboBox_Agg.ItemIndex <> -1 then begin

Memo_Having.Text := Memo_Having.Text + ComboBox_Agg.Text;

end;

end;

procedure TForm1.CheckListBox_TablesClickCheck(Sender: TObject);

begin

UpdateQuerry;

end;

procedure TForm1.CheckBox_DistinctClick(Sender: TObject);

begin

UpdateQuerry;

end;

procedure TForm1.CheckListBox_FieldsClickCheck(Sender: TObject);

begin

UpdateQuerry;

end;

procedure TForm1.CheckBox_AllFieldsClick(Sender: TObject);

begin

UpdateQuerry;

end;

procedure TForm1.CheckListBox_GroupByClick(Sender: TObject);

begin

UpdateQuerry;

end;

procedure TForm1.Memo_HavingChange(Sender: TObject);

begin

UpdateQuerry;

end;

procedure TForm1.CheckListBox_OrderByClickCheck(Sender: TObject);

begin

UpdateQuerry;

end;

procedure TForm1.RadioGroup_OrderByClick(Sender: TObject);

begin

UpdateQuerry;

end;

procedure TForm1.RadioGroup_IntoClick(Sender: TObject);

begin

UpdateQuerry;

end;

procedure TForm1.Memo_WhereChange(Sender: TObject);

begin

UpdateQuerry;

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Понятие запросов как объектов СУБД Access, предназначенных для отбора данных и удовлетворяющих заданным условиям. Основные виды запросов: простой, перекрестный, с параметром, группировкой, вычисляемым полем. Отличия запросов-действий от других запросов.

    контрольная работа [2,9 M], добавлен 29.06.2015

  • Теоретические сведения и основные понятия баз данных. Системы управления базами данных: состав, структура, безопасность, режимы работы, объекты. Работа с базами данных в OpenOffice.Org BASE: создание таблиц, связей, запросов с помощью мастера запросов.

    курсовая работа [3,2 M], добавлен 28.04.2011

  • Рабочая среда MS Access. Окна, меню и панели инструментов. Основные режимы работы с таблицами. Создание таблиц. Создание первичных ключей и связей. Создание простого запроса с помощью мастера запросов. Изменение запроса с помощью конструктора запросов.

    практическая работа [1,5 M], добавлен 03.06.2008

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

    лабораторная работа [183,9 K], добавлен 13.06.2014

  • Работа с хранящейся в базах данных информацией. Язык описания данных и язык манипулирования данными. Распространение стандартизованных языков. Структурированный язык запросов SQL. Язык запросов по образцу QBE. Применение основных операторов языка.

    презентация [76,2 K], добавлен 14.10.2013

  • Обработка распределенных данных и запросов. Многопотоковые и многосерверные архитектуры. Основные типы параллелелизма при обработке запросов. Структура компонентов поддержки удаленного доступа. Доступ к базам данных в двухзвенных моделях клиент-сервер.

    презентация [123,1 K], добавлен 19.08.2013

  • Инструменты для поиска "плохих запросов". Причины снижения производительности. Способы оптимизации запросов. Табличные переменные и временные таблицы. Техника написания "быстрых" запросов. Анализ плана выполнения. Соединение вложенных циклов nested loop.

    презентация [105,2 K], добавлен 06.01.2014

  • Основные сведения об SQL Server. Логическая структура реляционной базы данных. Создание базы данных Server. Обработка элементов оператора SELECT. Структура таблиц inserted и deleted. Ввод данных в таблицу "Клиенты". Краткая справка по языку запросов SQL.

    курсовая работа [2,9 M], добавлен 11.05.2012

  • Разработка структуры базы данных в приложении Access. Создание запросов. Создание отчета для эффективного представления данных в печатном формате. Панель элементов, используемых при создании формы. Обработка данных с помощью языка запросов в SQL.

    курсовая работа [1,7 M], добавлен 09.05.2012

  • Общая характеристика и состав информационных запросов к проектируемой базе данных, требования к ней и внутренняя структура, принципы нормализации и разработка логической модели. Создание таблиц и связей между ними. Язык структурированных запросов.

    курсовая работа [985,6 K], добавлен 22.05.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.