Створимо програму, яка буде прикладом роботи з базами даних в Delphi 4
Створення клієнтської програми для користування базою данних MS ACCESS в Delphi 4.0
Створимо програму, яка буде прикладом роботи з базами даних в Delphi 4.0. Для цього використаємо базу даних Ms Access db1.mdb, в якій знаходяться наступні таблиці: “Товар» (таблиця, що містить дані про товар, його опис і ціну), «Партія товару» і “Рахунок”, які зв'язані наступним чином:
Для початку зареструємо псевдонім для бази даних в ODBC. Для цього перейдемо в папку “Панель управления” Пуск ??Настройки ??Панель управления (Start ? Settings ? Control Panel) і двічі натиснемо на ярличку “Источники данных ODBC 32 разряда” (“ODBC 32-bit”), в вкладці «Пользовательский DSN» (User DSN), натиснемо на кнопку “Добавить” (Add), виберемо зі списку “Microsoft Access Driver (*.mdb)” і натиснемо “Готово” (Finish). У вікні, що відкриється введемо “Имя источника базы данных” (Description) текст “_db6” і натиснувши на кнопку “Выбрать” (Select) вкажемо шлях до нашої бази даних: “С:\DB\db1.mdb”. Тиснемо “ОК” і переходимо безпосередньо в Delphi 4.0. Для створення програми виберемо в меню File ? New Application. Створимо DataModule необхідний для розміщення на ньому компонент для роботи з базами даних, для цього виберемо в меню File ? New, в вікні що з'явилось вибираємо піктограмку “DataModule”. Збережемо проект як db.dpr, DataModule1 data.pas, unit1 dp1.pas. Додамо з палітри компонентів з вкладки “Data Access” компоненти необхідні для роботи з нашою базою даних Database, три компоненти DataSource, три компоненти Table i Query помістивши їх на DataModule1:
Для компоненти Database1 в вікні “Object Inspector” надамо наступні значення для властивостей: AliasName = “_db6” (вказуємо псевдонім нашої бази даних), DatabaseName = “_db1” (ім'я бази даних яке будуть використовувати решта компоненти DataAccess), LoginPromt = “False” (не запрошувати ім'я користувача і пароль при відкритті бази даних). Для компонент Table1, Table2, Table3 встановимо DatabasName = “_db1”,TableName відповідно “Товар”, “Рахунок”, “Партія товару”, і після цього для кожної компоненти Active присвоїмо значення True. Для компонент Datasource1, DataSource2, Datasource3 присвоїмо властивості DataSet відповідно значень “Table1”, “Table2”, “Table3”.
З вкладки Win32 на форму From1 помістимо компоненту PageControl, в вікні “Object Inspector” якої вкажемо Align = “AllClient”. Викликавши правою кнопкою миші контекстне меню виберемо пункт “New Page” і для нової закладки TabSheet1 властивість Caption присвоїмо значення “Товари”, яке буде назвою нашої закладки. На закладку помістимо компоненту DBGrid1 з закладки DataControls палітри компонентів. Надамо їй наступних властивостей: Align = “allClient”, DataSource = “DataModule1.DataSource1”. Тепер в вікні закладки “Товари” ми можемо переглядати дані з таблиці товар. Для можливості оперування з цими даними додамо на форму елемент управління DBNavigator. Для цього створимо для нашої форми Form1 панель інструментів. Помістимо на форму CoolBar1 з закладки Win32, на CoolBar1 ControlBar1 з закладки Additional, властивості AutoSize яких встановимо “True”. Після цього на ControlBar1 помістимо DBNavigator1. Створимо ще одну закладку PageControl1, для перегляду і редагування всіх трьох таблиць. Присвоїмо властивості Caption = «Виписка рахунку», для TabSheet2, і помістимо на закладку три компоненти GroupBox з палітри “Standart”, присвоївши властивості Caption для яких, відповідно, “Рахунок”, “Партія товару” і “Товар”. Помістимо на GroupBox1 (“Рахунок”) чотири компоненти DBEdit, з закладки “Data Controls”. Властивостям цих елементів DataSource присвоїмо значення DataModule1.DataSource3, а DataField, відповідно, імена полів з таблиці “Рахунок”: “Код рахунку”, “Дата виписки”, “Дата проплати”, “Сума оплати”. Над елементами DBEdit помістимо компоненти Label з палітри “Satndart”, присвоївши властивості Caption кожного з них імена відповідних полів. Аналогічно поступимо з GroupBox2 (“Товар”), помістивши на нього відповідну кількість DBEdit i Label, створивши перегляд таблиці “Рахунок”. На GroupBox3 (“Партія товару”) помістимо DBGrid, присвоїмо його властивостям такі значення: Align = AllClient, DataSource = DataModule1.DataSource2. Для того щоб перехід по всіх полях різних таблиць відбувався синхронно, а в DBGrid2 ми могли бачити список партій товару які виписані на вибраний рахунок вкажемо зв'язки між таблицями. Але щоб в першій закладці таблиця товар відображалась правильно зробимо це для таблиць “Рахунок” і “Партія товару” в «Object Inspector», а для таблиць “Партія товару” і “Товар” – програмно. Виберемо Table2 на DataModule1 і для властивості MasterSource виберемо значення DataSource3, для властивості MasterFields – “Код рахунку”. Для компоненти PageControl1 в колонці “Object Inspector” “Events” виберемо подію «OnChange», двічі натиснемо ліву клавішу миші і введемо наступне:
procedure TForm1.PageControl1Change(Sender: TObject);
begin
// якщо здійснено перехід на закладку “Товар”
if PageControl1.ActivePage=TabSheet1 then
begin
DBNavigator1.DataSource:=DataModule1.DataSource1; // панель DBNavigator керує таблицею “Товар”
DataModule1.Table1.MasterSource:=nil; // забираємо зв'язок з таблицею “Партія товару”
DataModule1.Table1.MasterFields:='';
end;
// якщо здіймнено перехід на закладку “Партія товару”
if PageControl1.ActivePage=TabSheet2 then
begin
DBNavigator1.DataSource:=DataModule1.DataSource3; // панель DBNavigator керує таблицею “Рахунок”
DataModule1.Table1.MasterSource:=DataModule1.DataSource2; // встановлюємо зв'язок між «Товар» і
DataModule1.Table1.MasterFields:='Код товару'; // “Партія товару” по полю “Код товару”
end;
end;
Біля полів “Дата виписки» та «Дата проплати» помістимо кнопки для переходу на нову форму – вибору дати. Створимо її у вигляді dll. Виберемо в меню меню File ??New, і вікні “New Items” виберемо піктограму “Dll”. Після появи самого тексту dll збережемо проект як «slave.dpr», і виберемо в меню File ??New Form. Властивостям нової форми надамо такі значення: Name = CalendarForm, Caption = «Виберіть дату», BorderStyle = bsToolWindow, Position = poDesktopCenter. Помістимо на форму компоненту MonthCalendar з закладки Win32, і SpeedButton з закладки Additional. Додамо в опис змінних для модуля :
var
selDate: