Рейтинг: 5/5
Як видно із заголовка в даній статті піде розмова про роботу з базами даних за допомогою Ide Lazarus. Бази даних займають важливу роль в сучасному світі, їх використовують для створення більшості сайтів, інформаційних систем, різних програм. У світі налічується величезна кількість СУБД (Система управління базами даних), як комерційних MsSql, Orcle, Interbase так і безкоштовних начебто MySQl, PostgreSQL, Firebird, Sqlite. Lazarus ж дозволяє працювати з більшістю з них, для цього в середу можна встановити компоненти для роботи з відповідними СУБД. Ми ж розглянемо загальні способи роботи з базами даних. В основі більшості баз даних лежить мова SQL (мова структурованих запитів). який дозволяє отримувати про обробляти набори даних. З приводу синтаксису даної мови можна почитати на вікіпедії або на відповідних форумах. Ми ж розглядатиме безпосередню роботу з даними.
Для початківців працювати в Lazarus в якості першого досвіду цілком підійде стандартний набір компонентів з вкладки SQLdb, дана вкладка містить набір для роботи з різними СУБД.
Склад вкладки SQLdb.
Компонент для отримання і зміни даних
Компонент для роботи з транзакціями
Компонент для роботи з великою кількістю Sql коду
Компонент для встановлення підключення до різних баз даних
Компонент для підключення до СУБД MSSql (Microsoft SQL Server)
Компонент для підключення до СУБД Sybase (Sybase SQL Server)
Компонент для підключення до СУБД PostgreSQL
Компонент для взаємодії з подіями в PostgreSQL
Компонент для роботи з СУБД Oracle
Компонент для доступу до даними за допомогою драйверів ODBC
Компонент для підключення до СУБД MySql версії 4.0
Компонент для підключення до СУБД MySql версії 4.1
Компонент для підключення до СУБД MySql версії 5.0
Компонент для підключення до СУБД MySql версії 5.1
Компонент для підключення до СУБД MySql версії 5.5
Компонент для підключення до СУБД MySql версії 5.6
Компонент для підключення до СУБД SQLite
Компонент для підключення до СУБД Firebird, Interbase
Компонент для управління сервером Firebird
Компонент для роботи з подіями Firebird, Interbase
Компонент для завантаження бібліотеки доступу до даних
Так само для роботи буде потрібно компонент TDataSource з вкладки Data Access, він є прошарком між компонентами для доступу до даних і компонентами для відображення даних.
Доступ до даних.
Для підключення до будь-якої СУБД на форму або датамодуль слід розмістити необхідний компонент. Все залежить від необхідної СУБД. Я вибрав SQLite і відповідно додав на форму TSQLite3Connection. Він дозволить налаштувати підключення до необхідної базі даних. Так само слід додати на форму компонент TSQLTransaction. Він забезпечує цілісність роботи з даними. Про нього буде пізніше більш докладніше.
Оскільки SQLite це локальна СУБД, то не потрібно вказувати такі параметри з'єднання як сервер, порт, користувач, пароль, досить вказати тільки шлях до файлу бази і кодування для роботи, а також вказати компонент для транзакції.
Зробити це можна приблизно так.
Для того що б програма запрацювала необхідно в папку з проектом помістити бібліотеку sqlite3.dll, завантажити останню версію якої можна тут. Для інших СУБД теж будуть потрібні відповідні бібліотеки.
Що б отримати дані з бази на форму поміщається компонент SQLQuery1, у нього в якості database вказується компонент SQLite3Connection1, а в якості параметра transaction компонент SQLTransaction1.
Потім вписати в властивість SQL відповідний запит для вибірки даних і виконати процедуру Open. Якщо потрібно додати змінити або видалити дані то слід зробити ExecSQL.
Після цього ми отримаємо набір даних, якщо точніше таблицю. Для роботи з нею компонент TSQLQuery містить базовий набір функцій і властивостей.
Для навігації по набору даних використовуються наступні методи.
Дані методи дозволяють пересуватися по рядках таблиці.
Допусти нам треба пройтися по всіх рядках таблиці і скопіювати певне значення, найпростіший спосіб буде таким.
Так само для навігації за даними можна використовувати візуальний компонент TDBNavigator.
Для відображення даних з бази використовуються компоненти з вкладки Data Controls, вони створені на базі звичайних візуальних компонентів, але призначені для відображення даних різних типів.
Що б відобразити отримані дані на форму розміщується компонент DataSource1 і візуальний компонент DBGrid1. У компонента DataSource1 властивості DataSet присвоюється компонент SQLQuery1, а у компонента DBGrid1 виставляється властивість DataSource рівним DataSource1. Тепер якщо зробити SQLQuery1.Open то в таблиці відобразяться дані з бази.
Додавання даних
Додавати дані в таблицю можна двома способами. Один через відкритий набір даних. Другий через виконання спеціального sql запиту INSERT. Розглянемо обидва способи.
Додавання даних через відкритий набір даних.
Для маніпулювання з даними використовуються наступні команди.
Відкриває процедуру додавання запису в кінець набору даних
Ці команди використовує більшість компонентів для роботи з даними.
Приклад додавання нового запису через набір даних.
Може здатися що занадто багато команд треба виконати що б дані занести в базу. Але це необхідно виконувати тільки для даних компонентів, є більш людські компоненти, де вистачає тільки одного Post.
Приклад додавання даних через sql запит.
Як бачите тут нічого складного. Для додавання великих обсягів даних краще використовувати другий спосіб. Оскільки перший спосіб після додавання запису викликає оновлення списку даних, що буде призводити до поступового уповільнення додавання даних.
Зміна даних.
Змінити дані в базі можна декількома способами. Розглянемо два способи зміни даних за допомогою компонентів Sqldb.
Перший спосіб буде через відкритий набір даних.
Досить встати на необхідний запис і відкрити її через процедуру Edit
Так само дані можна редагувати через sql запит UPDATE
видалення даних
Видалити дані з бази не складно, головне видалити саме ті дані, а не ті які були потрібні. Найчастіше від цього рятують транзакції і бекапи. Але не завжди. Розглянемо так само два способи видалення даних.
Видалення з набору даних. Просто стаємо на необхідний запис і виконуємо наступний код.
Також видалити дані можна через sql запит DELETE, робиться це в такий спосіб.
При видалення даних через запит потрібно точно знати які дані видаляти. Якщо зробити так.
Те віддалятися всі дані з таблиці table1. Тому потрібно точно вказувати які дані видаляти.
Пошук даних.
Пошук дані є однією з необхідних речей при роботі з базами даних. Існує кілька способів здійснення даної операції. Не будемо розглядати всі. Зупинимося на найпростіших.
Першим способом буде пошук в обраному наборі даних. Він здійснюється за конкретним одну або стовпцями даних. Виглядає це так.
При використання цього запису маркер обраної записи переміститися на знайдену запис, якщо шуканих даних не буде виявлено то маркер переміститися на останній запис.
Так само можна зробити вибірку даних з умовою відбору SELECT. WHERE робиться це так.
Даний запит застосовується для пошуку по точних даних. Якщо ж потрібно знайти всі пов'язані дані то тут застосовується функція sql LIKE, дозволяє задати приблизний пошук значення в рядках даних для конкретного стовпця. Синтаксис цієї функції такий
Приклад використання функції з коду.
Даний запит виведе всі імена містять букву і.
Є невелика проблема у SQLite. У даній СУБД оператор LIKE підтримуватися повністю тільки для латиниці, для кирилиці він теж працює але тільки з дотриманням регістру букв. Що б уникнути даної проблеми потрібно або використовувати бібліотеку sqlite3.dll з підтримкою ICU, або використовувати свою функцію LIKE.
транзакції
Транзацкіі в базах даних забезпечують цілісність і захищеність даних. Вони дозволяють змінити дані в базі або повернути до попереднього стану в межах транзакції. Є різні рівні ізоляції даних при роботі транзакцій, це залежить від використовуваної СУБД.
Приклад роботи з транзакціями з коду.
Так само транзакції зручно використовувати коли необхідно завантажити в базу велику кількість даних. Оскільки транзакції прискорюють процес роботи з записами в сотні разів. Але не варто ними зловживати, оскільки неправильне їх використання може призвести до зависання програм, які працюють з базою.
У статті помилка, запити з пошуком, що містить LIKE, повинні виглядати інакше, подвійні лапки парсером ці установки не були Парс, відсотки теж.
Правильно буде так:
SQLQuery1.SQL.Text: = 'select * from table1 where name like: nm'; // запит на пошук даних
SQLQuery1.ParamByName ( 'nm'). AsString: = '% і%';
Лапки не потрібні, тому як це автоматом робить AsString, а відсотки не Парс, тому йдуть в сам параметр, вже не знаю, баг це або фіча.
Півдня вчора на цьому втратив :(
У статті помилка, запити з пошуком, що містить LIKE, повинні виглядати інакше, подвійні лапки парсером ці установки не були Парс, відсотки теж.
Правильно буде так:
SQLQuery1.SQL.Text: = 'select * from table1 where name like: nm'; // запит на пошук даних
SQLQuery1.Param ByName ( 'nm'). As String: = '% і%';
Лапки не потрібні, тому як це автоматом робить AsString, а відсотки не Парс, тому йдуть в сам параметр, вже не знаю, баг це або фіча.
Півдня вчора на цьому втратив :(
Дякую за статтю! У мене виникло одне питання - як вивести список таблиць в ListBox по SQL-запитом "SELECT * FROM sqlite_master WHERE type =" table "ORDER BY name"?
Спасибо большое, розібралися, я взяв sql дамп з mysql і намагався його використовувати.