71187

MySQL+Lazarus: Работа и базой данных из Lazarus. TMySQL50Connection, TSQLTransaction, TSQLQuery – компоненты для работы с базой данных

Лабораторная работа

Информатика, кибернетика и программирование

Создайте пустой проект. В папку проекта необходимо скопировать библиотеку DLL для работы с MySQL. Скачать ее можно здесь: libmysql.dll. Разместите на форме компоненты TMySQL50Connection, TSQLTransaction, TSQLQuery из панели SQLbd; и компонент TDatasource из панели Data Access.

Русский

2014-11-03

937.82 KB

77 чел.

Лабораторные работы по дисциплине «Управление данными»

Лабораторной работе №7

MySQL+Lazarus: Работа и базой данных из Lazarus

TMySQL50Connection, TSQLTransaction, TSQLQuery – компоненты для работы с базой данных

Создайте пустой проект. В папку проекта необходимо скопировать библиотеку DLL для работы с MySQL. Скачать ее можно здесь: libmysql.dll.

Разместите на форме компоненты TMySQL50Connection, TSQLTransaction, TSQLQuery из панели SQLbd; и компонент TDatasource из панели Data Access.

Настройте связи между этими компонентами.

  1.  В свойстве Transaction объекта MySQL50Connection1 выберите SQLTransaction1 (я не менял присваиваемые по умолчанию имена объектов).
  2.  В свойстве Database объекта SQLQuery1 выберите MySQL50Connection1
  3.  В свойстве Transaction объекта SQLQuery1 выберите SQLTransaction1
  4.  В свойстве DataSet объекта Datasource1 выберите SQLQuery1

Для подключения к базе данных необходимо для объекта MySQL50Connection1 указать адрес сервера (свойство HostName), название базы данных (свойство DatabaseName), имя пользователя (свойство UserName) и пароль для доступа к базе данных (свойство Password).  Используйте следующие параметры

DatabaseName=lab3

HostName=localhost

UserName=root

Объекты класса TSQLQuery представляют собой наборы данных. В него загружается копия таблицы с сервера БД, с которой потом и осуществляется вся работа.

Доступ к данным с помощью запросов

Для выполнения запроса нужно использовать код:

SQLQuery1.Close;

SQLQuery1.SQL.Clear;

SQLQuery1.SQL.Add('Select * from ListCatalog;');

SQLQuery1.Open;

Мы сначала закрываем набор данных SQLQuery1, вызывая его метод Close (Аналогичного результата можно добиться установив свойство Active в false). Если набор закрыт, его связь с базой данных разорвана. Затем мы очищаем свойство SQL с помощью метода Clear. С помощью метода Add записываем в него текст нового запроса. Исполняется запрос при выполнении команды Open, которая переводит набор данных SQLQuery1 в открытый режим и записывает в него результаты выполнения SQL запроса.

Если SQL запрос не подразумевает возврата таблиц данных (запросы INSERT и UPDATE), необходимо воспользоваться альтернативным способом его выполнения:

SQLQuery1.Close;

SQLQuery1.SQL.Clear;

SQLQuery1.SQL.Add('INSERT INTO myArtTable (text, description , keywords)

          VALUES('+#39+memo3.text+#39+', '+#39+memo2.text+#39+', '+#39+memo1.text+#39+');');

SQLQuery1.ExecSQL;     

При этом, при попытке перевести набор данных в открытый режим (выполнить SQLQuery1.Open;) возникнет ошибка. Для ее устранения нужно либо записать в свойство SQL новый запрос, возвращающий таблицу, так показано ниже:

SQLQuery1.Close;

SQLQuery1.SQL.Clear;

SQLQuery1.SQL.Add('INSERT INTO myArtTable (text, description , keywords)

          VALUES('+#39+memo3.text+#39+', '+#39+memo2.text+#39+', '+#39+memo1.text+#39+');');

SQLQuery1.ExecSQL;

SQLQuery1.SQL.Text:='SELECT * from  myArtTable;';

SQLQuery1.Open;

Либо создать и использовать для таких SQL запросов отдельный набор данных (SQLQuery2), который никогда не переводить в открытый режим.

Подключение и отключение от базы данных в Lazarus

Будем подключаться к удаленной базе данных не сразу, а после получения явной команды от пользователя (щелчка по соответствующей кнопке), поэтому установим в инспекторе объектов свойство Сonnected компонента TMySQL50Connection и свойства Active компонент TSQLTransaction и TSQLQuery в false.

Создадим на форме кнопку «Подключиться». В обработчике нажатия напишем:

procedure TForm1.Button1Click(Sender: TObject);

begin

 isAllOk:=true;

 try

   MySQL50Connection1.Connected:=true;

 except

   ShowMessage(' Не могу подключиться к базе данных');

 exit;

 end;

 try

   SQLTransaction1.Active:=true;

 except

   ShowMessage(' Не могу создать транзакцию');

 exit;

 end;

 try

   SQLQuery1.Active:=false;

   SQLQuery1.SQL.Clear;

   SQLQuery1.sql.add('SET character_set_client='+#39+'utf8'+#39+',

            character_set_connection='+#39+'cp1251'+#39+',character_set_results='+#39+'utf8'+#39+';');

   SQLQuery1.ExecSQL;

   SQLQuery1.SQL.Clear;

   SQLQuery1.sql.add('SELECT * from  myArtTable;');

   SQLQuery1.Open;

 except

   ShowMessage(' Ошибка при выполнении SQL запроса.');

 exit;

 end;

end;

Таким образом, сначала производится попытка подключения к MySQL базе, если она прошла успешно, создается новая транзакция, после чего при активации объекта SQLQuery1 выполняется SQL запрос к базе данных, выбирающей все строки из таблицы. Перед тем, как получить таблицу с сервера, необходимо соответствующим образом настроить кодировки. В моей базе данные хранятся в кодировке cp1251, поэтому я выполняю запрос

//   SET character_set_results='cp866'; /*устанавливает кодировку данных отправляемых К клиенту*/

  //   SET character_set_client='cp866';  /*устанавливает кодировку данных отправляемых ОТ клиента*/

  // SET character_set_connection='utf8' /*устанавливает кодировку, в которую преобразуется информация пришедшая от клиента, перед выполнением запроса на сервере.*/

При отключении от базы данных действуем в обратном порядке. Зададим код отключения в обработчике события OnDestroy формы

procedure TForm1.FormDestroy(Sender: TObject);

begin

 SQLQuery1.Active:=false;

 SQLTransaction1.Commit;

 MySQL50Connection1.Connected:=false;

end;

Навигация по данным

Навигация основана на работе визуальных компонент из вкладки «Data Controls». Разместим на нашей форме компоненты TDBGrid, TDBNavigator и три компонента TDBMemo. И установим в их свойствах DataSource ссылку на DataSource1. В свойства DataField объектов DBMemo1  запишем Catalog_name  соответственно. (где Catalog_name– это название полей(колонок) в таблице ListCatalog.)

Запустите программу и нажмите кнопу «Подключиться…». После подключения к базе данных полученная с сервера таблица будет отображаться в объекте DBGrid1. Стрелочкой слева обозначена текущая запись. С помощью кнопок панели DBNavigator1 можно перемещаться по строкам таблицы. Вы также можете редактировать записи, однако после закрытия программы все сделанные изменения сбросятся. Для их сохранения в базу необходимо вызвать метод ApplyUpdates:

SQLQuery1.ApplyUpdates;

методы класса TSQLQuery, предназначенны для навигации по базе:

  1.  TSQLQuery.Next – перейти на запись вперед
  2.  TSQLQuery.Prior – перейти на запись назад
  3.  TSQLQuery.First – перейти на первую запись
  4.  TSQLQuery.Last – перейти на последнюю запись
  5.  TSQLQuery.Insert – добавить новую запись
  6.  TSQLQuery.Delete – удалить запись
  7.  TSQLQuery.Edit – перевести набор данных в режим редактирования
  8.  TSQLQuery.Post – сохранить сделанные изменения в набор данных
  9.  TSQLQuery.Refresh – обновить таблицу

Для того чтобы получить значения какого-нибудь поля записи, можно воспользоваться методом FieldByName(fn:string), где fn – название поля (колонки) таблицы. Этот же метод можно использовать для записи новых данных в таблицу. Формат чтения/записи указывается с помощью свойств AsString, AsInteger, AsFloat, AsDataTime, … Например, чтобы записать текущее значения поля id в Label, можно воспользоваться кодом:

Label1.caption:=SQLQuery1.FieldByName(‘id’).AsString;

Приведем также пример редактирования текущей строки таблицы

SQLQuery1.Edit;

SQLQuery1.FieldByName(‘keywords’).AsString:=’Lazarus жжот’;

SQLQuery1.FieldByName(‘text’).AsString:=’Новый текст’;

SQLQuery1.Post;

SQLQuery1.ApplyUpdates;

Стоит отметить, что не каждый набор данных можно редактировать навигационным способом. Чтобы получить в результате SQL запроса редактируемый набор (то есть такой, что внесенные изменения можно было сохранить в базу данных), необходимо выполнение следующих условий:

  1.  данные отбираются только из одной таблицы;
  2.  таблица допускает модификацию;
  3.  в запросе не используется DISTINCT и статические функции;
  4.  в запросе не применяются соединения таблиц;
  5.  в запросе отсутствуют подзапросы и вложенные запросы;
  6.  не используется группирование данных;
  7.  сортировка применяется только к индексным полям;

Использование транзакций и TSQLTransaction в Lazarus

Вообще механизм транзакции необходим для сохранения целостности базы данных. Допустим, для внесения актуальных данных в базу Вам необходимо записать в разные таблицы большое количество информации. Если в процессе записи выключится электричество, то часть таблиц будут содержать актуальную информацию, а часть старую. В результате база данных окажется испорченной. Избежать этого позволяет механизм транзакций. Если все операции записи завершились успешно, транзакция считается успешной и все изменения в таблицах базы считаются подтвержденными. Если же хотя бы одна операция записи не выполнена, транзакция считается неудачной и таблицы базы данных возвращаются к состоянию, которое они имели до начала транзакции.

Для работы с транзакциями в Lazarus добавлен компонент TSQLTransaction. Однако, в настоящее время он не работает с MySQL базами данных. TSQLTransaction автоматически переходит в активное состояние при открытии набора данных (TSQLQuery) и закрывается при его закрытии. Для явного подтверждения успешности транзакции можно использовать метод TSQLTransaction.Commit. Вызывать его следует сразу после TSQLQuerty.ApplyUpdates; Для отката транзакции можно использовать метод TSQLTransaction.Rollback.


 

А также другие работы, которые могут Вас заинтересовать

40814. Политическое сознание 263.43 KB
  Некоторые элементы этого уровня могут быть обобщены и использованы в определенных политических технологиях а также для построения политических теорий; Обыденный уровень политического сознания повседневное состояние общественного мнения по поводу политической жизни. Виды политического сознания В зависимости от субъекта политики типами политического сознаниявыступают: индивидуальное содержит систему информационных мотивационных и ценностных компонентов обеспечивающих познание личностью политики и участие в ней; групповое обобщает...
40815. Записываемые и перезаписываемые CD 2.21 MB
  Оптические тетради 16 Форматы хранения данных 18 Методы записи 20 Режимы работы устройств 22 Оценка качества записи заготовок CDR 23 Структура проигрывателя компактдисков 26 Его быстро окрестили лазерным или компактдиском Compct Disk CD фирма Philips создательница этого чуда техники объявила о совершенной ею революции в области записи и воспроизведения звука. Первое время главным недостатком компактдиска была невозможность записи на него...
40816. РОЗРАХУНОК СТРУКТУРНОЇ НАДІЙНОСТІ КС 96.49 KB
  Технічна система ТС сукупність технічних пристроїв елементів призначених для виконання певної функції або функцій. Елементи відмова яких сама по собі або в сполученні з відмовами інших елементів приводить до відмови системи. Для розрахунків параметрів надійності використовуються структурно логічні схеми надійності ТС які графічно відображають взаємозвязок елементів та їхній вплив на працездатність системи в цілому. Структурнологічна схема являє собою сукупність раніше виділених елементів зєднаних один з одним послідовно або...
40817. Компютерні системи захисту інформації 404.59 KB
  Теоретичні моделі захисту інформації. Модель захисту мережі Категорії інформаційної безпеки Теоретичні моделі захисту інформації Модель захисту мережі Класифікація криптоалгоритмів. Зловмисники використовують як помилки в написанні і адмініструванні програм так і методи соціальної психології для отримання бажаної інформації.
40818. ПРИРОДА І ФІЗИЧНІ ВЛАСТИВОСТІ ГРУНТІВ 565.59 KB
  В розділі природа і фізичні властивості грунтів розглядаються інженерногеологічні дослідження фізичні і механічні властивості дисперсних середовищ а також фізикомеханічні процеси взаємодії твердої рідкої і газоподібної складових ґрунту. 4 – несучий шар ґрунту 5 – підстилаючий шар. Глибина закладення фундаменту це відстань по вертикалі між поверхнею ґрунту і підошвою фундаменту. За конструктивними і технологічними особливостями влаштування фундаменти бувають: мілкого закладення передають навантаження на основу через свою підошву і...
40819. Громадська думка як суспільно-політичний феномен 152.11 KB
  Природа громадської думки як стану масової свідомості. Особливості громадської думки про право 5. Всебічним аналізом цього соціального феномена займається соціологія громадської думки.
40820. Культура стародавнього Єгипту 36.23 KB
  Повсякденне життя єгиптян у часи великих фараонів. Переписувачі й осередки духовного життя. З висоти свого становища бог дав форму навколишньому світові вдихнув у нього повітря світло й життя вступив у двобій із силами безодні. Людство повстало примусивши Ра піднятися в небо але він продовжував зберігати порядок маат принцип істини та справедливості ним встановлений котрий став його життям.
40821. Моделі життєвого циклу та методології розробки ПЗ 451.75 KB
  Моделі життєвого циклу та методології розробки ПЗ Моделі життєвого циклу Модель життєвого циклу ПЗ структура що визначає послідовність виконання та взаємозв'язку процесів дій і завдань протягом життєвого циклу. В рамках специфічних моделей життєвого циклу які приписують правила організації розробки ПЗ в рамках даної галузі або організації визначаються більш конкретні процеси розробки. Таких моделей досить багато адже фактично кожен раз коли деяка організація визначає власний процес розробки в якості основи цього процесу розробляється...
40822. Культура Месопотамії 39.45 KB
  Культура Месопотамії Своєрідність месопотамської культури: космос як держава. Повсякденне життя жителів Месопотамії. Біля джерел біблійських сказань Якщо Стародавній Єгипет був імперією з усіма наслідками що витікали з цього то дещо інша ситуація склалася в Месопотамії Двуріччі з двома великими ріками Євфратом і Тигром які мали декілька приток Месопотамська цивілізація являла собою тип існуючої на давньому Близькому Сході сільськогосподарської' цивілізації заснованої на ірригації.' Шумери заклали основи для подальшого розвитку...