Контроль над СКБД mySQL в візуальному середовищі програмування Delphi.

 

Контроль над СКБД mySQL в візуальному середовищі програмування Delphi.

 

         І так прийшов час навчитися контролювати і використовувати СКБД для прикладних цілей, а саме для зберігання та маніпуляції над даними.

         Для цих цілей будемо використовувати компоненти DataSource, DBGrid, Query та Database.

 

         Database – використовується для під’єднання до БД за вказаним аліасом.

         Query – використовується безпосередньо для виконання запитів на конкретній БД.

         DataSource – використовується як джерело даних для відображення.

         DBGrid – безпосередньо відображає данні користувачу (в зрузному вигляді таблиці).

 

Використання компонента Database

 

         Після того як ви помістили компонент Database на форму, по ньому можна клікнути два рази для відображення параметрів з’єднання. У вікні параметрів обов’язково потрібно вказати ім’я БД «Name» та ім’я аліасу «Alias Name». Якщо помітка «Login promt» увімкнена тоді нічого більше вказувати не потрібно (мітка означає, що перед з’єднянням з БД буде виведено вікно де ми маємо ввести реквізити доступу до БД, якщо реквізити правильні програма продовжить роботу, якщо ж ні – завершить).

Для того щоб замінити чи не відображати стандартне вікно входу до БД, або ж другими словами забезпечити автоматичний вхід до системи. Необхідно на компоненті TDatabase, яка і виводить вікно підключення клікнути лівою клавішею миші два рази. Отримаємо вікно параметрів під’єднання до БД. Вводимо в полі Name назву БД, в полі Alias Name вводимо назву аліасу ODBC та натискаємо на кнопку Deaults знімаємо відмітку Login Prompt, та у вікні Parameter Overrides

 

DATABASE NAME= [ім’я бази]

USER NAME= [ім’я користувача]

ODBC DSN= [ім’я алісу ODBC]

PASSWORD= [пароль користувача]

 

Після чого якщо властивість Connect перевести в True система автоматично підключиться без ніяких запитів.

Якшо робити це в програмі код буде мати вигляд:

 

DataBase1.AliasName:='[ім’я алісу ODBC]';

DataBase1.DatabaseName:=' ім’я бази ';

DataBase1.LoginPrompt:=False;

DataBase1.Params.Add('DATABASE NAME= [ім’я бази]');

DataBase1.Params.Add('USER NAME= [ім’я користувача]');

DataBase1.Params.Add('ODBC DSN= [ім’я алісу ODBC]');

DataBase1.Params.Add('PASSWORD= [пароль користувача]');

DataBase1.Connect:=True;

 

Компонент DataSource

 

         Компонента є проміжною для забезпечення зв’язку запиту та відображення даних у таблиці. Єдине що потрібно змінити це параметр «DataSet» тут потрібно вказати який саме Query буде відображатися в таблиці. Якщо ж запит по закінченню ніяких даних не повернув – таблиця відобразиться порожньою.

         У коді задати чи змінити параметр можна таким чином:

 

DataSource.DataSet:=Query1

 

Компонента Query

 

         У подальшій роботі ми будемо використовувати деякі методи цієї компоненти.

         Метод Query.SQL – містить запит який буде відіслано на виконання.

                   Query.SQL.Clear – очищує текст запиту.

                   Query.SQL.Add(String) – додає до запиту наступний (або ж якщо     метод пустий тоді перший) рядок запиту.

                   Query.SQL[NN] – повертає рядок запиту NN.

                   Query.SQL.SaveToFile (String) – записує у файл з заданим ім’ям       текстовий запит.

                   Query.SQL.LoadFromFile(String) – зчитує з вказано файлу текст        запиту.

                   Query.Active – активує запит на відображення, тобто передає запит, чекає результатів виконання та передає данні для відображення в DataSource. Може буди або True або False. Зверніть увагу, якщо мета запиту не відображати дані (додавати, редагувати і т.д.) тоді метод поверне помилку.

                   Query.ExecSQL – використовується для виконання запиту кінцевою метою якого не є відображення даних.

         Запит може складатися з декількох рядків, але має бути одиничним, тобто якщо ви забажаєте у першому рядку додати запис, потім через крапку з комою відредагуєте інший – отримаєте помилку. Так як у Delphi один запит – одна дія.

                   Query.DataBase – обов’язково мусить містити ім’я БД.

                   Query.FieldByName(‘<FIELD_NAME>’) [.asString, asInteger, asBoolean…] – повертає значення вказаного поля активного запису.

                   Query.MoveBy(<DISTANCE>) – переходить на запис вказаний відстанню, якщо число додатнє опускається вниз, від’ємне підіймається вверх.

                   Query.Next – переходить на наступний заис.

                   Query.First – переміщується на перший запис.

                   Query.Last – переміщується на кінцевий запис.

                   Query.EOF – повертає істину якщо активний останній запис.

                   Query.BOF – повертає істину якщо активний перший запис.

         На цьому методи компоненти не закінчуються, але всі найчастіше уживані перераховано.

 

Компонента DBGrid

 

         DBgrid.Columns.Count – кількість стовпців присутніх в відображенні.

         DBgrid.Columns.Item[NN].Width – довжина NN -1 ствпця.

         DBgrid.Columns.Item[NN].FieldName – ім’я NN-1 поля.

         DBgrid.DataSource – обов’язково мусить містити посилання на відображаємі данні.

 

Загальна структура роботи

 

         Отже з потрібними компонентами ми розібрались, залишилося зліпити це все до купи. Для правильної роботи програмного засобу потрібно дотримуватись декількох пунктів:

  1. За відображення даних відповідає Query-DataSource-DBgrid якщо ви бажаєте змінити, або видалити запис потрібно додаткуву Query яка безпосередньо через ExecSQL виконає запит, інакше без проміжних змінних нічого у вас не вийде.
  2. Коли переносите програмний додаток, активуйте діалог вводу реквізитів доступу (паролі у вас вдома і там де ви запускаєте не завжди співпадають).
  3. При зміні або доданні записів тільки числові типи полів не беруться в лапки. Якщо ж у вас наприклад поле де записується номер телефону ’020202’ він береться в лапки так як його можна записати як ’+38 (0362) 02-02-02’ тобто коли  ви передаєте числа в текстовий тип лапки обов’язкові.
  4. FieldByName – повертає значення по назві поля отриманого з СКБД тобто якщо при запиті:

 

     SELECT user.phone FROM user;

     FieldByName(‘phone’).asString = “02-02-02”

 

     SELECT user.phone AS ‘telefon’ FROM user;

     FieldByName(‘phone’).asString – поверне помилку.

     FieldByName(‘telefon’).asString = “02-02-02”