
- •«Современные методы разработки программ». Этапы решения задачи
- •Постановка задачи.
- •Техническое задание
- •Разработка структуры базы данных
- •Написание кодов
- •Отладка и внедрение
- •База данных
- •Поля таблицы
- •Ключи и индексы.
- •Способы доступа к данным.
- •Связь между таблицами.
- •Создание базы данных
- •Псевдонимы базы данных
- •Создание таблицы
- •Задание полей
- •Задание свойств таблицы (Table properties)
- •Свойство Validity Checks – проверка правильности значений.
- •Свойство Table Lookup – таблица просмотра
- •Свойство Table Language – язык таблицы
- •Изменение структуры таблицы с помощью Database Desktop
- •Изменение в реестре для корректного отображения русского языка
- •О бзор компонентов Delphi, используемых для связи с бд.
- •Форма модуль данных Data Module
- •Компонент Database
- •Компонент Table
- •Свойства, которые доступны программным путем
- •Методы компонента tTable
- •События компонента tTable.
- •К омпонент Query
- •Свойство sql
- •Query и Параметры
- •К омпонент DataSource
- •Свойства
- •События
- •Компонент dbNavigator
- •Компоненты визуализации и управления данными со страницы Data Control Компонент dbGrid
- •События
- •Другие компоненты визуализации
- •П ример простейшего приложения с использованием компонента Table
- •Основы языка sql. Общие сведения.
- •Отбор данных из таблиц. Оператор выбора Select
- •Совокупные характеристики
- •Вложенные запросы.
- •Объединение таблиц.
- •Соединение union
- •Модификация записей Вставка записи
- •Values(‘Орлов’,’Александр’,’Иванович’,’м’,’23.04.1981’,’Гродно’)
- •Редактирование записи
- •Удаление записи
- •Операции с таблицами Создание таблицы
- •Изменение структуры таблицы
- •Удаление таблицы
- •Операции с индексами
- •Создание индекса
- •Удаление индекса
П ример простейшего приложения с использованием компонента Table
Построим простейшее приложение, работающее с базой данных. В качестве базы данных используем, имеющуюся в наличии базу данных DBdemos. Загрузим Delphi 7. На форме расположим компоненту Table. У компоненты Table в объекте инспектора установим свойство DatabaseName – DBdemos; свойство TableName – Biolife.bd; свойство Active - True. Сделаем двойной щелчок по компоненте Table. Откроется пустое окно (рис.1). Стоя в этом окне, нажмите правую кнопку мыши и выберите Add all fields. После этого окно заполнится всеми полями таблицы biolife.bd. Затем выделите все поля (используя клавишу Shift) и перетащите их мышкой на форму. После этого на форме появится компонента DataSource, свойство DataSet которой Table1, а также появятся и соответствующие типу полей компоненты, визуально отображающие первую запись данных из таблицы. «Бросим» на форму компоненту DBNavigator. Изменим его свойство DataSource на DataSource1. Наше первое приложение готово. Запустим его на выполнение (рис.2).
Основы языка sql. Общие сведения.
Язык SQL (Structured Query Language – язык структурированных запросов) был создан Microsoft в конце 70-ых годов и получил через некоторое время широкое распространение. Язык SQL имеет несколько стандартов, из которых наиболее распространенными среди производителей программных продуктов являются стандарты SQL-89 и SQL-92. Стандарт SQL-92, поддерживаемый Американским национальным институтом стандартов (ANSI – American National Standards Institute), также называют стандартом ANSI. Наличие нескольких стандартов и различная их интерпретация породили множество диалектов языка SQL, которые в большей или меньшей степени отличаются друг от друга.
Язык SQL позволяет формировать весьма сложные запросы к базам данных. Запрос – это вопрос к базе данных, возвращающий запись или множество записей, удовлетворяющих вопросу.
Набрать
и выполнить в интерактивном режиме
текст SQL-
запросов позволяют инструментальные
программы, поставляемые вместе с Delphi,
например SQL
Explorer.
Открыть программу SQL
Explorer
можно в Delphi,
выбрав меню Database
– Explorer.
Затем на закладке Database
выбрать нужный псевдоним БД и раскрыть
узел псевдонима. На закладке Enter
SQL
ввести запрос и для выполнения запроса
нажать кнопу Execute
Query
(рис.1). В этой программе, кстати, можно
получить справочную информацию по
синтаксису используемого языка SQL.
Отбор данных из таблиц. Оператор выбора Select
Этот оператор возвращает одно или множество значений, которые могут представлять собой значения указанных полей записей, удовлетворяющих указанному условию и упорядоченных по заданному критерию. Оператор SELECT имеет следующий синтаксис:
Select [DISTINCT] {* | <список полей>}
from <список таблиц>
[where <условие отбора>]
[order by <список полей для сортировки>]
[group by <список полей для группирования>]
[having <условия группирования>]
[union <вложенный оператор SELECT>]
В оператор SELECT обязательно включается список полей и операнд FROM, остальные операнды могут отсутствовать. В списке операнда FROM перечисляются имена таблиц, для которых отбираются записи. Список должен содержать как минимум одну таблицу.
Например, оператор
Select fam, name, otch from osndan
указывает, что надо вернуть только поля fam, name, otch из таблицы osndan
Например, оператор
Select * from osndan
указывает, что надо вернуть все поля из таблицы osndan.
В списке могут быть не только сами поля, но любые выражения от них с арифметическими операциями +, -, *, /. После выражения может записываться псевдоним выражения в форме: as <псевдоним>. Например
Select syma, syma/1250 as sym_v_dol from opl
Этот оператор создает поле sym_v_dol, вычисляемое по формуле syma/1250.
Синтаксис ряда систем не требует для введения псевдонима ключевого слова as, например
Select syma, syma/1250 sym_v_dol from opl
В выражениях для полей могут использоваться строковые константы и операция “||”, означающая сцепление строк. Например, оператор
Select “ФИО: “ || fam || im|| otch from Osndan будет выдавать строки вида ФИО: ИвановИванИванович
Язык SQL, как и другие языки, предоставляет для использования ряд функций:
Функции для работы со строками:
UPPER(Str) – преобразование символов строки Str к верхнему регистру;
LOWER(Str) ) – преобразование символов строки Str к нижнему регистру;
TRIM(Str) ) – удаление пробелов в начале и в конце строки Str;
SUBSTRING(Str FROM n1 FOR n2) – выделение из строки Str подстроки, которая включает в себя символы, начиная с номера (позиции) n1 и заканчивая номером n2.
Например, оператор:
select Upper(Fam)||' '||
Upper(substring(im from 1 for 1))||'.'||
Upper(substring(otch from 1 for 1))||'.'
from osndan
будет выдавать строки вида : Иванов И.И.
CAST(<Expression> AS <Type>) – приведение выражения Expression к типу Type
Например, оператор
Select “ФИО: “ || fam || im|| otch || “ дата рождения : ” || Cast(datar as char(10) ) from Osndan будет выдавать строки вида ФИО: ИвановИванИванович дата рождения : 02.10.1978, где функция Cast преобразует значения поля типа дата в строку из 10 символов.
Функции декодирования даты и времени:
EXTRACT(<Элемент> FROM <Выражение>) – из выражения, содержащего значения даты или времени, извлекается значение, соответствующее указанному элементу. В качестве элемента даты или времени можно указывать значения: YEAR, MONTH, DAY, HOUR, MINUTE или SECOND.
Например, оператор select extract(year from datar) from osndan вернет только года
После ключевого слова Select в оператор могут вставляться ключевые слова DISTINCT или ALL. Первое из них означает, что в результирующий набор данных не включаются повторяющиеся записи. Повторяющимися считаются те записи, в которых совпадают значения полей, перечисленных в списке оператора Select. Ключевое слово ALL означает включение всех записей. Оно подразумевается по умолчанию, так что вставлять его в оператор не имеет смысла.
Например, если в таблице osndan имеется 2 мужчин и 3 женщины, родившихся в Минске то оператор select distinct mestor from osndan выдаст список всех неповторяющихся мест рождения, причем Минск выведется 1 раз; а оператор select distinct mestor,sex from osndan выдаст список всех неповторяющихся мест рождения с учетом пола, т.е. Минск выведется 2 раз
Операнд WHERE задает условие (критерий) отбора, которым должны удовлетворять записи. Выражение, описывающее условия отбора, является логическим, т.е. оператор Select отбирает только те записи, в которых заданное условие истинно. Условие может включать имена полей (кроме вычислимых полей), константы, логические выражения, содержащие арифметические операции, логические операции and, or, not и операции отношения: =; > ; >= ; < ; <= ; <> ; like ; starting with ; between… and ; in. Например
Select fam, im, otch from osndan where sex=’ж’ and datar < ’01.01.1980’ отберет записи, относящиеся к женщинам, родившимся до 1980 года.
Операция Like имеет синтаксис: <поле> like ‘<последовательность символов>’. Эта операция применима к полям типа строк и возвращает true, если в стоке встретился фрагмент, заданный в операции как <последовательность символов>. Заданным символам может предшествовать и их может завершать символ процента “%”, который означает – любое количество любых символов. Если символ процента не указан, то заданная последовательность символов должна соответствовать только целому слову. Например, условию fam like ‘%ван%’ будет удовлетворять фамилии, в которые входит последовательность символов «ван».
Операция Starting with (не поддерживается Paradox) имеет синтаксис: <поле> Starting with ‘<последовательность символов>’. Эта операция применима к полям типа строк и возвращает true, если строка начинается с фрагмента, заданного в операции как <последовательность символов>. Например, условию fam starting with ‘ИВ’ будет удовлетворять фамилии, которые начинаются с «ИВ».
Операция Between … and имеет синтаксис: <поле> between <значение> and <значение> и задает для указанного поля диапазон отбираемых значений. Например, оператор
Select fam, im, otch from osndan where sex=’ж’ and datar between ’01.01.1980’ and ’31.12.1980’ отберет записи, относящиеся к женщинам, родившимся в 1980 году.
Операция in имеет синтаксис: <поле> in (<множество>) и отбирает записи, в которых значение указанного поля является одним из элементов указанного множества. Например, оператор
Select fam, im, otch from osndan where fam in (’Иванов’,’Петров’,’Сидоров’) отберет записи с заданными фамилиями
Select kurs from obuch where kurs in (2,4,6) отберет записи с заданными курсами.
Элемент оператора Select, начинающийся с ключевых слов ORDER BY, определяет упорядочивание (сортировку) записей. После этих ключевых слов следует список полей, определяющих сортировку. Можно указывать только поля, фигурирующие в списке отобранных (в списке после ключевого слова select). Причем эти поля могут быть и вычисляемыми. Например, оператор:
Select fam, im, otch, datar from osndan order by fam, im, otch задает упорядочивание возвращаемых значений по фамилии, имени, отчеству. Например, оператор:
Select fam, im, otch, datar from osndan order by datar задает упорядочивание возвращаемых значений по нарастанию даты рождения. Если желательно располагать результаты по убыванию значений, то после имени поля добавляется ключевое поле DESC: Например, Select fam, im, otch, datar from osndan order by datar desc
Операнд GROUP BY позволяет выделять группы записей в результирующем наборе данных. Группой являются записи с одинаковыми значениями в полях, перечисленных за операндом GROUP BY. Выделение групп необходимо для выполнения групповых операций над записями. Например, оператор:
Select fam, im, otch from osndan group by fam, im, otch задает группировку записей по фамилии, имени, отчеству. Отличие сортировки от группировки состоит в следующем: например, если в таблице имеется 100 записей и у двоих слушателей совпадают фамилия, имя и отчество, то сортировка по фамилии, имени, отчеству вернет 100 записей, а группировка по этим же полям вернет 99 записей.
Операнд HAVING действует совместно с операндом GROUP BY и используется для отбора записей внутри групп. Правила записи условий группирования аналогичны правилам формирования условий отбора в операнде WHERE.