Базы данных и My Visual Database. Давайте представим, что вы ведете учет чеголибо в обычной Excel таблице, как показано на рисунке 1
![]()
|
Action (рис.19) Рис.19 Перечислим доступные действия для кнопок, которые нам пригодятся для настройки нашего проекта: Поиск – позволяет найти записи в БД. Новая запись – вызывает форму для создания новой записи. Сохранить запись – сохраняет запись в БД и закрывает форму. Показать запись – вызывает форму и заполняет ее данными из БД. Удалить запись – удаляет запись, выбранную в компоненте таблицы. Показать форму – вызывает форму без дополнительных действий. Закрыть форму – закрывает форму. Настройка формы «Form1»: 1. Кнопка «Новая аренда» предназначена для создания новой записи, поэтому выбираем для данной кнопки действие Новая запись. Данное действие вызовет форму, с помощью которой будет создана новая запись, для этого у нас есть форма с именем frmRent. Произведите настройку данной кнопки как показано на рисунке 20. Рис.20 Порой пользователи вместо действия «Новая запись» выбирают действие «Показать форму», это ошибка, не перепутайте! 2. Кнопка «Редактировать» предназначена для редактирования выбранной записи, которая будет выбрана пользователем в компоненте TableGrid Выберите действие «Показать запись». Для настройки данного действия, необходимо указать форму, которая будет использоваться для редактирования записи, и компонент TableGrid , в которой будет выбрана пользователем необходимая запись для редактирования. Настройте данную кнопку как показано на рисунке 21. Рис.21 3. Кнопка «Удалить» Предназначена для удаления выбранной записи, которая будет выбрана пользователем в компоненте TableGrid Настройте данную кнопку как показано на рисунке 22. Рис.22 4. Кнопка «Найти» Предназначена для поиска записей по произвольным критериям. Критерии для поиска вводятся в компоненты, такие как . Каждый компонент может служить критерием для поиска в определенном поле БД, например, искать только по названию компании, либо по номеру телефона. В зависимости от типа поля в БД, необходимо использовать соответствующий компонент. Ниже можете видеть, по каким типам полей в БД может быть использован компонент для поиска. - текстовое поле (TextBox). Тип поля БД: «ТЕКСТ» «ЦЕЛОЕ ЧИСЛО» «ВЕЩЕСТВ. ЧИСЛО» «ДЕНЬГИ» - выпадающий список (ComboBox). Поиск только по внешним ключам («СВЯЗЬ») - флажок (CheckBox). Поиск только по полю с типом «ДА/НЕТ» - дата/время (DateTimePicker). Поиск по полям с типами «ДАТА/ВРЕМЯ» «ДАТА» «ВРЕМЯ» - таблица (TableGrid). Поиск только по внешним ключам («СВЯЗЬ»). Хотя компонент обычно используется для вывода результатов поиска, но может быть использован, как и критерий поиска по внешнему ключу, ведь по сути он похож на компонент , т.к. тоже позволяет выбрать запись. - счетчик (Counter). Поиск только по полю с типом «Счетчик» Теперь приступим к настройке данной кнопки, для этого выбираем действие «Поиск». Настройка кнопки состоит из четырех шагов: 1. Выбрать компоненты, которые будут использоваться в качестве критерий для поиска записей. В нашем случае выбираем следующие компоненты: ComboBox1 (Клиент), ComboBox2 (Техника), DateTimePicker1 (Начало аренды), DateTimePicker2 (Конец аренды). 2. Выбрать таблицу БД, в которой будем искать. Так как мы собираемся искать данные об аренде, выбираем таблицу БД «Rent» 3. Выбрать поля БД, которые необходимо видеть в качестве результата поиска в компоненте TableGrid В нашем случае выберем следующие поля: Rent.DateStart, Rent.DateEnd, Rent.TotalCost, Client.Name, Equipment.Tech. 4. Выбрать компонент таблицы (TableGrid), в который будет выведен результат поиска. Чтобы кнопка с действием «Поиск», вывела все записи, достаточно нажать на нее с пустыми критериями поиска в компонентах. На рисунке 23 можете видеть, как должна выглядеть настройка кнопки «Найти» Рис.23 5. Кнопка «Клиенты» Предназначена для показа формы, на которой мы сможем видеть всех наших клиентов. Выбираем действие «Показать форму», а также выбираем форму «frmClientList», которая будет показана при нажатии на данную кнопку (рис.24). Рис.24 6. Кнопка «Техника» Предназначена для показа формы, на которой мы сможем видеть всю технику, который мы располагаем. Выбираем действие «Показать форму», а также выбираем форму «frmTechList», которая будет показана при нажатии на данную кнопку (рис.25). Рис.25 На этом настройка кнопок на форме завершена. Осталось настроить компоненты ComboBox и DateTimePicker , которые также присутствуют на форме Form1. Настройка подобных компонентов, как правило, заключается лишь в указании, к какому конкретному полю в базе данных они принадлежат, для этого у компонентов присутствуют свойства FieldName'>TableName и FieldName, исключение составляет лишь компонент ComboBox , вместо свойства TableName используется свойство ForeignKey, что переводится как внешний ключ. Таким образом, кнопка «Найти» будет знать, в каком поле БД необходимо искать, если пользователь введет критерий поиска в компонент. Приступим к настройке компонентов. Начнем с компонента DateTimePicker1 (Начало аренды), информация о начале аренды содержится в таблице Rent, в поле DateStart, поэтому в свойстве TableName выбираем таблицу БД Rent, а в свойстве FieldName поле из этой таблицы DateStart, как показано на рисунке 26. Рис.26 Для компонента DateTimePicker2 (Конец аренды) проделайте то же самое, но в свойстве FieldName выберите поле DateEnd. Настройка компонентов ComboBox , как уже было упомянуто выше, отличается тем, что вместо свойства TableName используется свойство ForeignKey. Данный компонент привязывается к внешнему ключу таблицы, таким образом, компонент показывает записи из таблицы, на которую ссылается внешний ключ, позволяя пользователю выбрать запись из данной таблицы. Возможно, звучит запутано, поэтом давайте разберемся на примере, настроим компонент ComboBox1 (Клиент). Кнопка для поиска «Найти» настроена так, что производит поиск в таблице БД Rent, в данной таблице имеется внешний ключ Rent.id_Client, который нам и необходимо выбрать в свойстве ForeignKey компонента ComboBox1 (Клиент). Внешний ключ id_Client, как видно из его названия ссылается на таблицу БД Client, поэтому в данном компоненте ComboBox1 пользователь сможет выбрать из списка клиента. Останется выбрать поле БД в свойстве FieldName, в нашем случае это будет поле Name, таким образом, в компоненте будет виден список имен клиентов (рис. 27). Рис.27 Таким же образом настраиваем компонент ComboBox2 (Техника), в свойстве ForeignKey выбираем внешний ключ Rent.id_Equipment и в свойстве FieldName выбираем поле БД Tech. Пока мы настроили лишь одну форму, но не зависимо от формы и ее предназначения, настройка кнопок и компонентов довольно однообразна. Для кнопок необходимо выбрать правильное действие, а для компонентов выбрать, к какому полю БД они будут принадлежать, используя свойства TableName и FieldName, в случае компонента ComboBox, вместо свойства TableName будет свойство ForeignKey. Поэтому далее при настройке остальных форм, я лишь перечислю, какие действия кнопкам необходимо присвоить и какие поля БД присвоить компонентам на форме. Подробней остановлюсь лишь на настройке некоторых кнопок. Настройка формы frmRent: ComboBox1 (Клиент) ForeignKey = Rent.id_Client FieldName = Name ComboBox2 (Техника) ForeignKey = Rent.id_Equipment FieldName = {Tech} {CostPerDay}руб. * подробней об этой записи ниже DateTimePicker1 (Начало аренды) TableName = Rent FieldName = DateStart DateTimePicker2 (Конец аренды) TableName = Rent FieldName = DateEnd Edit1 (Стоимость) TableName = Rent FieldName = TotalCost Чуть подробней остановимся на кнопке Button1 (Сохранить). Данная кнопка предназначена для сохранения данных в БД, поэтому для данной кнопки выбираем действие «Сохранить запись». В свойстве FieldName компонента ComboBox вы можете указать сразу несколько полей БД, которые необходимо отобразить. Для этого их необходимо заключить в фигурные скобки. Например, необходимо вывести наименование техники и ее стоимость за день: {Tech} {CostPerDay}руб. где Tech и CostPerDay названия полей в БД, остальной текст без фигурных скобок будет выведен без изменений. Таким образом, в ComboBox вы увидите: «Бульдозер ТМ-10 12000руб.» В настройках данной кнопки необходимо лишь выбрать, с каких компонентов на форме, будет сохранена информация в базу данных, в нашем случае необходимо выбрать все компоненты. Также необходимо выбрать таблицу БД, в которую будет сохранена информация, в нашем случае это таблица Rent (рис. 28). Рис.28 Также подробней остановимся на настройке кнопки Button2 (Закрыть). Кнопка закрывает форму, без сохранения информации в базу данных. Поэтому просто выбираем действие «Закрыть форму». Какие либо настройки для данного действия не предусмотрены (рис. 29). Рис.29 Настройка формы frmClientList: Данная форма предназначена для просмотра всех наших клиентов, которые присутствуют в базе данных. Также на форме присутствуют кнопки для создания, редактирования или удаления клиента из БД. Чтобы в компоненте таблицы появились все клиенты, которые присутствуют в БД, его необходимо настроить. Для вызова диалога настроек данного компонента, нажмите на панели «Свойства компонента» пункт «Настройка» (рис.30) Рис.30 В настройках данного компонента необходимо выбрать таблицу БД, из которой необходимо вывести информацию и выбрать необходимые поля БД, которые мы хотели бы видеть в компоненте. Настройте данный компонент как показано на рисунке 31. Рис.31 Обратите внимание на галочку с заголовком «Показать все записи таблицы», она должна быть выбрана. Далее просто перечислим настройки для кнопок создания, редактирования и удаления записи, т.к. мы уже подробно рассматривали подобные кнопки, при настройке формы Form1. Новый клиент Действие = Новая запись Форма = frmClient Редактировать Действие = Показать запись Компонент таблицы = TableGrid1 Форма = frmClient Удалить Действие = Удалить запись Компонент таблицы = TableGrid1 Далее предлагаю вам самостоятельно настроить остальные формы, нужно лишь кнопкам присвоить правильные действия, а остальным компонентам верно указать свойства TableName и FieldName. Форма frmClient предназначена для создания либо редактирования данных о клиенте, ее настройка аналогична настройке формы frmRent. Настройка формы frmTechList аналогична настройке формы frmClientList. Настройка формы frmTech аналогична настройке форм frmRent и frmClient. После того, как вы закончили с настройками оставшихся форм, время запустить наш проект, нажав кнопку и протестировать его работу. Прежде чем вводить данные об аренде техники, необходимо в базу данных ввести всех ваших существующих клиентов, для этого нажмите кнопку «Клиенты», которая расположена на главной форме. Появится форма frmClientList, на которой вы можете создать клиентов, нажимая кнопку «Новый клиент» (рис. 32) Рис.32 Также необходимо ввести в базу данных технику, которой вы располагаете, для этого на главной форме присутствует кнопка «Техника», которая вызовет форму frmTechList. Нажимая кнопку «Новая техника» введите необходимые данные (рис. 33). Рис.33 Приступим к вводу информации об аренде нашей техники. Для этого на главной форме нажмите «Новая аренда». Как видите теперь клиента и арендованную им технику мы просто выбираем из списка, в ручную остается ввести даты начала и конца аренды, а также итоговую стоимость аренды (рис. 34). Рис.34 Возможно вы ожидали, что «Стоимость» посчитается автоматически, после того как укажите технику и сроки ее аренды, но чтобы это реализовать, необходимо использовать скрипты, работа с которыми будет рассмотрена чуть позже. Пока нам придется «Стоимость» указать самостоятельно. На рисунке 35 можете видеть главное окно программы с внесенными данными об аренде Рис.35 Теперь на главной форме вы можете воспользоваться поиском данных, например, выбрав клиента из выпадающего списка «Клиент», затем нажав кнопку «Найти», вы увидите все данные об аренде данного клиента. Поздравляю! Ваше первое приложение для работы с базой данных готово! Если вы откроете папку с проектом, то найдете в ней исполняемый файл, таким образом, ваш проект может работать на любом компьютере без необходимости установки программы My Visual Database. Достаточно просто скопировать папку вашего проекта со всеми его файлами. Честно говоря, у созданного нами интерфейса есть недостаток. Например, когда приходит новый клиент (информации о котором еще нет в БД) арендовать технику, нам придется сначала нажать кнопку «Клиенты», чтобы внести его данные. Затем на главной форме нажать кнопку «Новая аренда», чтобы уже на форме «frmRent» выбрать его из списка клиентов и только затем ввести данные об арендованной им технике. А теперь представьте, что клиент хочет арендовать 10 единиц различной техники? Т.е. нам придётся 10 раз выбирать одного и того же клиента из списка на форме «frmRent». Согласитесь, не удобно же! Поэтому я предлагаю нам переделать данный проект, в котором мы создадим другой, более удобный интерфейс. Структура базы данных останется прежней. Не подумайте, что это моя прихоть, на примере нового интерфейса мы рассмотрим возможность вывода дочерних записей в компонент TableGrid. Итак, приступим. Создайте новый проект (Меню: Файл > Новый проект) и сразу же сохраните его в отдельную папку, например «Rent project 2». Проекту дайте имя «Rent2», как показано на рисунке 36. Рис.36 Далее нам следует создать точно такую же структуру базы данных на вкладке «Таблицы базы данных», как и в предыдущем нашем проекте, структуру БД можете видеть на рисунке 37. Рис.37 С процессом создания таблиц и полей мы уже знакомы, поэтому не будем подробно останавливаться на этом. Переключитесь на вкладку «Form1» и поговорим о таком понятии, как дочерние записи. Главным отличием нашего проекта, от его предыдущей версии будет в том, что на форме «frmClient», которая предназначена для создания/редактирования клиента, мы дополнительно разместим компонент TableGrid, который в свою очередь будет показывать записи об аренде техники, которую данный клиент арендовал. Другими словами в данном компоненте будут выведены дочерние записи, которые принадлежат клиенту. Возможно, звучит немного запутано, поэтом взгляните на рисунок 38. Возьмём для примера клиента с именем «KH Services», который в свою очередь имеет записи об арендованной им техники в таблице «Rent», как видите, они отмечены красным, и именно эти записи являются дочерними, по отношению к клиенту «KH Services» из таблицы «Rent». Также обратите внимание, что у дочерней записи всегда есть внешний ключ, который ссылается на родительскую запись. Рис.38 И чтобы стало окончательно понятно, забегу немного вперед и покажу, как будет выглядеть форма «frmClient» уже в готовом проекте (рис. 39) Рис.39 Чтобы сделать использование программы более удобным, предлагаю на главной форме («Form1») показывать список клиентов, вместо записей об аренде. Также на форме для создания/редактирования клиента («frmClient») разместить компонент TableGrid, который будет показывать арендованную технику клиента за все время. Если выражаться формальным языком, показывать дочерние записи клиента. Также на данной форме будут кнопки для добавления/редактирования/удаления арендованной техники данным клиентом. Таким образом, когда к нам приходит новый клиент, нам достаточно будет на форме «Form1» нажать кнопку «Новый клиент», после чего появится форма «frmClient», где мы введем его данные и на этой же форме нажмем кнопку «Новая аренда», что вызовет появление формы «frmRent», в которой мы выбираем арендованную технику, даты аренды и ее стоимость. Также если клиенту необходимо арендовать 10 единиц техники, нам не придется 10 раз выбирать данного клиента, чтобы создать запись об аренде. Приступим к создания форм, давайте перечислим их. 1. Form1 Форма для поиска клиентов. Эта же форма будет главной, именно она будет появляться при запуске вашего приложения. 2. frmClient Форма создания и редактирования клиента. Данная форма будет записывать данные в таблицу БД Client. Также на форме будет виден список арендованной техники данным клиентом. 3. frmRent Форма для создания и редактирования записи об аренде. Данная форма будет записывать данные в таблицу БД Rent. 4. frmTechList Форма со списком строительной техники. 5. frmTech Форма создания и редактирования информации о строительной техники. Данная форма будет записывать данные в таблицу БД Equipment. Как видите, теперь нам нужно на одну форму меньше, что уже неплохо. Приступим… Форма Form1: Расположите компоненты на форме Form1 как показано на рисунке 40. Рис.40 На данной форме вы сможете найти клиента по его имени либо телефонному номеру. Также на форме присутствуют кнопки, для вызова формы для создания либо редактирования клиента, также удаление клиента из базы данных. И кнопка с именем «Техника», которая вызовет другую форму, со списком техники, которой вы располагаете. |