База данных в Delphi

База  данных в Delphi.     

 С точки  зрения пользователей, база данных Delphi – это программа, которая обеспечивает работу с информацией, в нашем случае - с информацией в электронном виде. При работе с такой программой, которая как правило выдаёт на экране монитора таблицу, пользователь просматривая её может найти интересующую его информацию. Если программа, база данных Delphi,  позволяет, то он может внести изменения или дополнить новую информацию, а так же удалить ненужную.  
С точки зрения программиста, база данных Delphi  - это набор файлов, содержащих информацию. 
Разрабатывая  базу данных
Delphi для пользователей, программист создаёт программу, которая обеспечивает работу с файлами данных. 
В наше время существует достаточно большое количество программных систем, позволяющих создавать и использовать
локальные (dBASE, FoxPro, Access, Parandox) и удалённые (Interbase, Oracle, Sysbase, Infomix, Microsoft SQL Server) базы данных Delphi.  
В состав Delphi входят компоненты, позволяющие создавать программы работы с файлами данных, созданными различными системами: от dBASE до Infomix и  Oracle. Delphi так же позволяет программисту, используя утилиту Borland Database Desktop, создавать файлы баз данных в различных форматах.

Локальная база данных Delphi. 
 
Локальная база данных Delphi – это файлы данных, то есть базы находятся на одном (локальном) устройстве, в качестве которого может выступать  диск компьютора или сетевой диск (другого компьютора работающего в сети). 
Для обеспечения разделения данных (доступа к данным) между несколькими пользователями, в качестве которых выступают программы работающие на одном или нескольких компьюторах, в локальных базах данных применяется метод – блокировка файлов. Суть этого метода в том, что пока данные используются одним пользователем, другой  пользователь не может работать с этими данными, то есть данные для него закрыты, заблокированы. 
Access, dBASE, FoxPro, Parandox – это локальные базы данных. 
 
Удалённая база данных Delphi.  
 
Файлы удалённой базы находятся на удалённом компьюторе. При этом каталоги удалённого компьютора не могут рассматриваться как сетевые диски. 
Программа работы с удалённой базой данных Delphi  состоит из двух частей: клиентской и серверной. Клиентская часть программы, работающая на компьюторе пользователя, обеспечивает взаимодействие с серверной программой: посредством запросов, передаваемых на удалённый компьютор, предоставляет доступ к данным.  
Серверная часть программы, работающая на удалённом компьюторе, принимает запросы, выполняет их и пересылает данные клиентской программе. Запросы  представляют собой команды, представленные на языке SQL (Structured Query Language) – языке структурированных запросов. 
Программа, работающая на удалённом сервере, проектиркется таким образом, чтобы обеспечить одновремнный  доступ к информации нескольким пользователям. При этом для обеспечения доступа  к данным вместо механизма блокировки файлов используют механизм транзакций. 
Транзакция = это некоторая последовательность действий, которая должна быть обязательно выполнена над  данными перед  тем , как они будут переданы. В случае обнаружения ошибки во время выполнения любого из действий вся последовательность действий , составляющая транзакцию, повторяется снова. Следовательно, механизм транзакций обеспечивает защиту от аппаратных сбоев. Он так же обеспечивает возможность многопользовательского  доступа к данным.

Delphi работа с базами.

База  данных Delphi – это набор файлов (таблиц), в которых находится информация. Как правило, база данных Delphi состоит из нескольких таблиц, которые размещают в одном каталоге. Каталог для новой базы создаётся обычным образом средствами Windows. Таблицу можно создать, воспользовавшись входящей в состав Delphi утилитой Borland Database Desktop или организовав SQL – запрос к серверу базы данных. 
Так как для доступа к файлам (таблицам) базы данных библиотека BDE использует не имя каталога, в котором находятся файлы, а его псевдоним, то перед тем, как приступить к созданию таблиц новой базы данных, необходимо создать псевдоним для этой базы данных. 
Таким образом Delphi работа с базами представляет собой  процесс создания базы данных Delphi , который может быть представлен как последовательность следующих шагов:

  • Создание каталога.
  • Создание псевдонима.
  • Создание таблиц. 
 

     Создание каталога базы данных Delphi 
Для Delphi работы с базами  необходимо создать каталог (папку) для файлов базы данных , которая создаётся обычным образом, например при помощи Проводника. Обычно файлы локальной базы данных помещают в отдельном подкаталоге каталога программы работы с базой данных.

Создание  псевдонима базы данных Delphi.

Так же для  Delphi работы с базами  неоходим псевдоним базы данных Delphi, которвый создаётся при помощи входящей в Delphi утилиты BDE Administrator, которая запускается из Windows выбором из меню Программы/Borland Delphi 7 команды BDE Administrator.  
Ниже  на рисунке показан вид диалогового окна BDE Administrator. 

В левой части  окна, на вкладке Databases, перечислены  псевдонимы, зарегистрированные на данном компьюторе. Для того чтобы создать новый псевдоним, нужно из меню Object выбрать команду New.Затем в открывшемся диалоговом окне New Database Alias (новый псевдоним базы данных) из списка Database Driver Name, в котором перечислены зарегистрированные в системе драйверы доступа к базам данных, нужно выбрать драйвер для создаваемой базы данных, фактически выбрать тип создаваемой базы данных. 
При создании псевдонима по умолчанию предлагается драйвер STANDART (default driver), который обеспечивает доступ к таблицам в формате Parandox. 

После выбора драйвера и щелчка на на кнопке OK в список псевдонимов будет добавлен новый  элемент. См. рис. ниже Регистрация нового псевдонима. 

После этого  нужно изменить автоматически созданное  администратором имя псевдонима и задать путь к файлам базы данных, для которой создаётся псевдоним. 
Имя псевдонима можно изменить обычным способом для Windows,  то есть щёлкнуть правой кнопкой мыши на имени псевдонима (на вкладке Database), и в появившемся контекстном меню выбрать команду Rename(переименовать) и в открышемся диалоговом окне ввести новое имя. 
Путь к файлам базы данных можно ввести на вкладке Definition в поле Path с клавиатуры или воспользоваться стандартным диалоговым окном Select Directory (выбор каталога), которое открывается щелчком на кнопке с тремя точками, находящейся в конце поля Path. 
Ниже в качестве примера приведён вид окна BDE Administrator после создания псевдонима Peterburg для базы данных « Архитектурные памятники  Санкт - Петербурга». 
Для того чтобы созданный псевдоним был зарегистрированный в файле конфигурации (Idapi.cfg), необходимо в меню Object выбрать команду Apply (применить). В открывшемся диалоговом окне Confirm следует подтвердить необходимость сохранения изменений в файле конфигурации.

Delphi создать базу.

Delphi создать базу – это прежде всего создании таблицы  базы данных. Важным моментом при создании таблицы  базы данных Delphi является распределение информации между полями записи. Так как информация между полями может быть распределена различным образом. 
Например, сведения об исторических памятниках  Санкт - Петербурга могут быть организованы в виде записей, состоящих из полей
«Памятник» и «Историческая справка» или из полей «Памятник», «Архитектор», «Год» и «Историческая справка»
В первом варианте поле «Памятник» будет содержать название памятника, например Эрмитаж, а поле «Историческая справка» - всю остальную информацию, Пользователь  сможет найти информацию об интересующем его памятнике только по названию. При втором варианте организации записи пользователь сможет найти информацию о памятниках, архитектором которых является конкретный зодчий, или о памятниках, возведённых в данный исторический период. 
После всего этого можно сформулировать следующее правило: если предполагается , что во время использования базы данных будет выполнятся выборка информации по некоторому критерию, то информацию, обеспечивающую возможность этой выборки, следует поместить в отдельном поле.

Далее после  того как определены поля записи, необходимо выполнить распределение полей  по таблицам. В простой базе данных (как в нашем случае) все поля можно разместить в одной таблице. В сложной базе данных  поля распределяют  по нескольким таблицам, и вводом некоторой дополнительной информации, однозначно иденфицирующую каждую запись, обеспечивающую связь между таблицами, такая база данных называется реляционной. 
В Delphi создать базу, таблицу можно только после того как определена структура записей базы данных. Таблицы создаются при помощи входящей в состав
Delphi утилиты Database Desktop.  Утилита  Database Desktop позволяет выполнить все необходимые при работе с базами данных действия. Утилита обеспечивает создание, просмотр и модефикацию таблиц баз данных различных форматов (Access, dBASE, FoxPro, Parandox). Кроме того, утилита позволяет выполнять выборку информации путём создания запросов.  
Для того чтобы создать новую таблицу, нужно выбором из меню Tools команды Database Desktop запустить Database Desktop. Затем в появившемся окне Утилита  Database Desktop надо из меню File  выбрать команду New и в появившемся списке выбрать тип создаваемого файла – Parandox. Ниже находится рисунок диалогового окна Database Desktop. 

 
Затем в открывшемся диалоговом окне Create Table  следует выбрать тип создаваемой таблицы (по умолчанию – Parandox) 

В результате открывается  диалоговое окно Create Parandox 7 Table, где можно определить структуру записей таблицы. 

Для каждого  поля таблицы необходимо задать имя, тип и, если нужно, размер поля. Имя  поля необходимо для доступа к данным. В качестве имени поля, которое вводится в колонке Field Name, можно использовать последовательность из букв латинского алфавита и цифр длиной не более 25 символов. 
Тип поля определяет тип данных, которые могут быть помещены в поле. Тип задаётся вводом в колонку Type символьной константы.  
 
Типы полей и соответствующие им константы см. таблицу.

Тип Константа Содержимое  поля
Alpha A Строка  символов. Максимальная длина строки определяется 
характеристикой Size, значение которой  
находится в диапазоне 1 - 255
Number N Число из диапазона 10 - 10 с 15-ю значащими  цифрами
Money $ Число в денежном формате. Цифры числа  делятся 
на группы при помощи разделителя групп разрядов. 
Также выводится знак денежной единицы
Short S Целое число из диапазона - 32767 - 32767
Long 
Integer
I Целое число из диапазона - 2 147 483 648 - 2 147 483 647
Date D Дата
Time T Время с полуночи, выраженное в милисекундах
Timestamp @ Время и дата
Memo M Строка  символов произвольной длины. Поле типа 
Memo используется для хранения текстовой  
информации, которая не может быть сохранена в поле типа 
Apha. Размер поля (1-240) определяет, сколько  
символов хранится в таблице. Остальные символы  
хранятся в файле, имя которого совпадает с именем 
файла таблицы, а расширение файла - mb
Formatted 
Memo
F Строка  символов произвольной длины (как у  типа 
Memo). Имеется возможность указать тип и размер 
шрифта, способ оформления и цвет символов
Graphic G Графика
Logical L Логическое  значение "истина" (True) или "ложь" 9 False)
Auto-increment + Целое число. При добавлении к таблице  очередной 
записи в поле записывается число на единицу 
больше, чем находится в соответствующем поле 
последней добавленной записи
Bytes Y Двоичные  данные. Поле этого типа используется 
для хранения данных, которые не могут быть 
интерпретированы в Database Desktop
Binary B Двоичные  данные. Поле этого типа используется для 
хранения данных которые не могут быть 
интерпретированы в Database Desktop. Как и данные типа Memo,  
эти данные не находятся в файле таблицы. Поля 
типа Binary, как правило, содержат audio-данные

Константа, определяющая тип поля, может быть введена с  клавиатуры или путём выбора типа поля из списка (см. рис), который появляется при щелчке правой кнопки мыши в  колонке Tepe или при нажатии клавиши  «пробел». 
Рис. 
Одно или несколько полей можно поместить как ключевые. Ключевое полеопределяет логический порядок следования записей в таблице. Например, еслисимвольное (тип Alpha) поле Fam (фамилия) поместить как ключевое, то при выводе таблицы записи будут упорядочены в соответствии с алфавитным порядком фамилий. Если поле Fam  не помечать как ключевое, записи будут выводится в том порядке, в котором они были внесены в таблицу. Следует обратить внимание на то, что в таблице не может быть двух записей с одинаковым содержанием ключевых полей. Поэтому в рассматриваемом примере ключевыми полями должны быть поля  Fam (Фамилия) или  Name (Имя). Тогда в таблицу можно внести информацию об однофамильцах. Однако по прежнему нельзя внести информацию об однофамильцах , у которых совпадают имена. Поэтому на основании выше изложенного в качестве ключевого поля обычно выбирают поле, которое содержит уникальную информацию. В качестве примера ,для таблицы , содержащей список людей, в качестве ключевого поля можно выбрать поле Pass (Паспорт). 
Для того чтобы пометить поле как ключевое, необходимо выполнить двойной щелчок в колонке Key. Следует так же обратить внимание на то, что ключевые слова должны быть сгруппированы в верхней части таблицы. 
Если данные, для хранения которых предназначено поле, должны обязательно присутствовать в записи, то следует установить флажок Required Field. Например, очевидено, что поле Fam (Фамилия) обязательно должно быть заполнено, в то время как поле Tel (Телефон) может оставаться пустым. Если значение, записываемое в поле, должно находится в определённом диапазоне, то вводом значений в поле Minimum value (Минимальное значение) и Maximum value(Максимальное значение) можно задать границы диапазона.  
Поле Default value позволяет задать значение по умолчанию, которое будет автоматически записываться в поле при добавление к таблице новой записи. 
Поле Picture позволяет задать шаблон, используя который можно контролировать правильность вводимой в поле информации. Шаблон представляет собой последовательность обычных и специальных символов. Спициальные символы приведены в таблице ниже.

Символ  шаблона Допустимый  при вводе символ
# Цифра
? Любая буква (прописная или строчная).
& Любая буква (автоматически преобразуется  в прописную)
- Любая буква (автоматически преобразуется в строчную)
@ Любой символ
! Любой символ (если введена буква, то она  автоматически  
преобразуется в прописную)
; Символ, следующий за символом "точка  с запятой", интерпретируется 
как обычный символ, а не символ шаблона
* Любое количество повторяющихся, определяемых следующим  
за "звёздочкой" сиволом шаблона

Во время ввода  информации в позицию поля, которой  соответствует специальный символ, будут появлятся только символы, допустимые для данного символа  шаблона. Например, если в позиции  шаблона стоит символ# , то в соответствующую этому символу позицию можно ввести только цифру. Если в позиции шаблона стоит обычный символ, то во время ввода информацииВ данной позиции буде т будет автоматически появляться указанный символ. 
Например, пусть поле Tel типа A (строка символов) предназначено для хранения номера телефона, и программа, работающая с базой данных,предполагает, что номер телефона должен быть представлен в обычном виде, то есть в виде последовательности сгруппированных, разделённых дефисами цифр. В этом случае в поле Picture следует записать шаблон : ###-##-##. При вводе информации в поле Tel будут появлятся только цифры (нажатие клавиш с другими символами игнорируются), причём после ввода третьей и пятой цифр в поле будут автоматически добавлены дефисы. 
Некоторые элементы данных поля могут быть необязательными, например, код города для номера телефона. Элементы шаблона, обеспечивающие ввод необязательных данных, заключаются в квадратные скобки. Например, шаблон [(###)] ###-##-## позволяет вводить в поле номер телефона как заключённым в скобки кодом города, так и без кода. 
Шаблоны позволяют не только контролировать правильность вводимых в поле данных путём блокирования ввода неверных символов, но так же обеспечивает автоматизацию ввода данных. Это достигается путём указания в шаблоне в квадратных или фигурных скобках списка допустимых значений содержимого поля. 
Например, если полю Address  задать шаблон {Санкт – Петербург, Москва, Воронеж}*@ или [Санкт – Петербург, Москва, Воронеж] *@,то во время вводаданных в это поле названия соотвествующего города будет появлятся сразу после ввода одной из букв: с, м или в. Отличие фигурных скобок от квадратных, а следовательно и этих шаблонов состоит в том , что в первом шаблоне содержимое поле должно обязательно начинаться с названия одного из перечисленных в списке городов, а во втором – город может называться по другому, но его название придётся вводить полностью. 
После того как  будет определена структура  таблицы, таблицу нужно сохранить. Для этого небходимо нажать кнопку Save As (см. рис.). В результате открывается окно Save Table As. В этом окне из списка Alias  нужно выбрать псевдоним базы данных, частью которой является созданная таблица, а поле имя файла ввести имя файла, в котором нужно сохранить созданную таблицу(см. рис.) 
рис.. 
Перед тем как нажать кнопку сохранить и установить флажок Display table , то в результате нажатия кнопки сохранить открывается диалоговое окно Table (см. рис.), в котором можно внести данные в только что созданную таблицу.  

Если таблица  базы данных не доступна, то для того чтобы ввести данные в таблицу  её нужно открыть . Для этого нужно  из меню File выбрать команду Open|Table, затем в появившемся диалоговом окне Open Table в спискеAlias выбрать псевдоним нужной базы данных и таблицу. Следует обратить внимание, что таблица будет открыта в режиме просмотра, в котором содержимое таблицы изменить нельзя.

Запись  в базу данных в Delphi

Чтобы  в таблицу можно было вводить данные,  то есть  сделать запись в базу данных Delphi нужно активировать режим редактирования таблицы, для этого необходимо из меню Table выбрать команду Edit Data
Данные в поля записи вводятся с клавиатуры обычным образом. Для перехода к следующему полю нужно нажать клавишу “Enter”. Если поле является последним полем последней записи, то в результате нажатия клавиши  “Enter” в таблицу будет добавлена ещё одна запись. 
Если во время заполнения таблицы необходимо внести изменения в какое то уже заполненное поле, то следует выбрать это поле , воспользовавшись клавишами перемещения курсора, нажать клавишу “F2” и внести нужные изменения, то есть  сделать запись в базу данных Delphi.

Если при вводе  данных в таблицу буквы русского алфавита отображаются неверно, то надо изменить шрифт. Для этого необходимо в меню Edit выбрать команду Preferens  и в появившемся диалоговом окне, во вкладке General , щёлкнуть на кнопке Change. В результате этих действий открывается диалоговое окно Change Font (см.рис.), в котором нужно выбрать русифицированный шрифт.  

 
Следует обратить внимание , что Windows XP используется шрифты типа Open Type, в то время как
программа Database Desktop ориентирована на работу со шрифтами  True Type. После этого надо завершить работу с Database Desktop, так как внесённые в конфигурацию изменения будут действительны только после перезапуска утилиты.

Программа управления базой  данных.

Процес создания программы управления базой данных рассмотрим на примере создания базы данных «Архитектурные памятники  «Санкт-Петербурга»( см табл.). 
Перед тем как приступить непосредственно к разработке программы управления базой данных, необходимо, используя утилиту Database Desktop, создать файл данных (таблицу) и
добавить в неё несколько записей. Ниже  перечислены поля таблицы monuments (монументы, памятники). В таблицу monuments  можно внести информацию о памятниках  «Санкт-Петербурга»(см табл.).

Поле Тип Размер Содержимое
Monument А 60 Название архитектурного памятника
Architect А 40 Имя архитектора
Note А 255 Краткая историческая справка
Photo А 12 Имя файла иллюстрации
 
 
Памятники Сант-Петербурга
Памятник Архитектор Историческая  справка Иллюстрация
Адмиралтейство А. Д. Захаров Здание Адмиралтейства  
(1806-1823г.). Высота-72 м.
-
Александровская 
колонна
Огюст Монферран Памятник победы России над  
войсками Наполеона-1812 году . 
(30 августа 1834 г, 47,5м,600 т.)
-
Зимний  дворец Ф.Б. Растрелли Зимний дворец много раз  
менял свой облик. 
Последний раз по проекту  
Растрелли(1754-1762г.)
rostr.bmp
Исаакиевский  собор Огюст Монферран Исаакиевский  собор 4 ый  
по счету, стали возводить 
в 1818 году по 1858 год. (40 лет.)
isaak.bmp

Примечание. В  папке «Питер- data» есть файлы с  изображением памятников Санкт –  Петербурга. 
Сейчас можно приступить к разработке программы управления базой данных. Методика разработки приложения  работы с базой данных ни чем не отличается от методики создания обычной программы: к форме добавляются необходимые компоненты, устанавливаются им свойства, разрабатываются необходимые процедуры обработки событий.

Программа управления базой  данных должна содержать компоненты, обеспечивающие   доступ к данным возможность просмотра и редактирования содержимого полей. Компоненты доступа данных  находятся на вкладках Data Access палитры компонентов, а компоненты отображения данных  - на вкладке Data Controls.

Доступ  к базе данных (таблице)

Для доступа к базе данных (таблице) программа управления базой данных должна содержать компоненты Database, Table, Query  и DataSource, значки которых находятся на вкладках Data Access и BDE палитры компонентов.

  

 
Компонент Database  представляет базу данных как единое целое, то есть совокупность таблиц, а компонент Table – одну из таблиц базы данных. 
КомпонентDataSource  (источник данных) обеспечивает связь компонента отображения- редактирования данных  (например, компонента DBGrid ) и источника данных, в качестве которого может выступать таблица(компонент Table)  или результат выполнения SQL – запроса к таблице (компонент SQL ). Компонент  DataSource  позволяет оперативно выбирать источник данных, использовать один и тот же компонент, например, DBGrid для отображения данных из таблицы или результата выполненияSQL  - запроса к этой таблице. Механизм взаимодействия компонентов отображения - редактирования данных  с данными через компонент DataSource  иллюстрирует рис. ниже.

 
В простейшем случае, когда база данных представляет собой одну таблицу, приложение –
программа  управления базой данных должна содежать  один компонент Table и один компонент DataSource.

Ниже в таблицах перечислены свойства компонента Table и DataSource 

Cвойства  компонента Table
Свойство Значение Определяет 
Name Table1 Имя компонента.Используется  
для доступа к свойствам компонента
DatabaseName Peterburg Имя базы данных, частью которой является  
таблица. В качестве значения следует  
использовать псевдоним базы данных.
TableName monuments.db Имя файла данных (таблицы данных), 
для доступа к которому  
используется компонент.
TableType - Тип таблицы. Таблица  может 
быть набором данных в формате 
Paradox(ttParadox), dBase(ttdBase) 
, FoxPro(ttFoxPro) или представлять  
собой форматированный текстовый  
файл(ttASC||)
Active True Признак активации  файла данных 
(таблицы). В результате присвоения  
значения True происходит 
открытие файла таблицы
 

Во время разработки формы приложения значения свойств  DatabaseName и  TableName задаются путём выбора из списков. В списке DatabaseName перечислены все зарегистрированные псевдонимы, а в списке TableName – имена файлов таблиц, которые находятся в соответствующем псевдониму каталоге.

Cвойства  компонента DataSource
Свойство Значение Определяет 
Name DataSource1 Имя компонента.Используется  
для доступа к свойствам компонента
DataSet Table1 Имя компонента,представляющего 
собой входные данные.
 

Программа просмотра базы данных

Пользователь  может просматривать базу данных с помощью «программы просмотра базы данных» в режиме формы или в режиме таблицы. В режиме формы можно видеть только одну запись, а в режиме таблицы – несколько записей одновременно. Довольно часто эти два режима комбинируют. Краткая информация (содержимое некоторых ключевых полей) выводятся в табличной форме, а при необходимости видеть содержимое всех полей записи выполняется переключение в режим формы. 
Компоненты, обеспечивающие просмотр и редактирование содержимого полей базы данных, находятся на вкладке Data Controls (см. рис.). 

 

Просмотр  базы данных в режиме формы

Для того чтобы  обеспечить просмотр базы данных в режиме формы, в форму программы просмотра базы данных нужно добавить компоненты, обеспечивающие просмотр и если нужно, редактирование полей записи, причём по одному компоненту для каждого поля. 
Компонент DBText  позволяет только просматривать содержимое поля, а компоненты DBEdit и DBMemo  - просматривать и редактировать. Ниже в таблице перечислены некоторые свойства этих компонентов. Свойства перечислены в том порядке, в котором следует устанавливать их значения после добавления их на форму нашего приложения.

Свойство Определяет
Name Имя компонента. Используется для доступа к свойствам  компонента
DataSource Компонент - источник данных
DataField Поле базы данных, для отображения или редактирования которого 
используется компонент
База данных в Delphi