Difference between revisions of "Zeos tutorial/ru"

From Free Pascal wiki
(Немного о компонентах)
(TZConnection)
Line 84: Line 84:
 
== TZConnection ==
 
== TZConnection ==
 
Компонент TZConnection представляет собой комбинацию компонента, подобного BDE TDatabase, и компонента, который обрабатывает транзакцию. Транзакция запускается библиотекой ZEOS всякий раз, когда открывается соединение (метод Connect TZConnection) с базой данных. Это приводит к тому, что каждый доступ к базе данных выполняется автоматически в контексте выполняющейся транзакции.  
 
Компонент TZConnection представляет собой комбинацию компонента, подобного BDE TDatabase, и компонента, который обрабатывает транзакцию. Транзакция запускается библиотекой ZEOS всякий раз, когда открывается соединение (метод Connect TZConnection) с базой данных. Это приводит к тому, что каждый доступ к базе данных выполняется автоматически в контексте выполняющейся транзакции.  
 +
 +
=== AutoCommit ===
  
 
Так называемый режим AutoCommit о умолчанию всегда включен (установлен в «True»). Это также стандартное поведение соответствующего компонента BDE. Если AutoCommit активен, то каждое изменение оператора SQL будет подтверждаться в базе данных с помощью COMMIT после его успешного выполнения.  
 
Так называемый режим AutoCommit о умолчанию всегда включен (установлен в «True»). Это также стандартное поведение соответствующего компонента BDE. Если AutoCommit активен, то каждое изменение оператора SQL будет подтверждаться в базе данных с помощью COMMIT после его успешного выполнения.  
  
 
Если вы хотите управлять транзакцией сами при помощи последовательных StartTransaction..Commit/Rollback, то AutoCommit должен быть отключен (установлен в «False»). В рамках этой явной транзакции можно последовательно выполнить несколько операторов SQL, которые вносят изменения в базу данных. При вызове метода Commit все изменения, сделанные в этой явной транзакции, подтверждаются. Вызов метода Rollback сбрасывает эти изменения.
 
Если вы хотите управлять транзакцией сами при помощи последовательных StartTransaction..Commit/Rollback, то AutoCommit должен быть отключен (установлен в «False»). В рамках этой явной транзакции можно последовательно выполнить несколько операторов SQL, которые вносят изменения в базу данных. При вызове метода Commit все изменения, сделанные в этой явной транзакции, подтверждаются. Вызов метода Rollback сбрасывает эти изменения.
 +
 +
=== TransactIsolationLevel (TIL) ===
 +
Компонент TZConnection предоставляет четыре полезных и предопределенных уровня изоляции транзакций (TIL):
 +
 +
* <b>tiRepeatableRead</b>: он соответствует TIL ”SNAPSHOT”, который является стандартом серверов Firebird. Это комбинация параметров транзакции concurrency и nowait. Создается снимок текущей базы данных. На других пользователей влияют (ограничивают) только в том случае, если две транзакции работают с одной записью одновременно. Если при доступе к данным возникнут конфликты, будет возвращено сообщение об ошибке. Изменения в других транзакциях не будут замечены. Этот TIL широко охватывает требования стандарта SQL (SERIALIZABLE).
 +
 +
* <b>TiReadCommitted</b>: соответствует TIL «READ COMMITTED». Это комбинация параметров транзакции "read_committed", "rec_version"
 +
и "nowait'. Этот TIL распознает все изменения в других транзакциях, которые были подтверждены COMMIT. Параметр "rec_version" отвечает за поведение, при котором будут учитываться самые последние значения, зафиксированные другими пользователями. Параметр "nowait" отвечает за поведение, при котором нет ожидания освобождения заблокированной записи. Таким образом, сервер более нагружен, чем в TIL tiRepeatableRead, потому что он должен выполнять все обновления, чтобы получать эти значения снова и снова.
 +
 +
* <b>TiSerializable</b>: соответствует TIL «”SNAPSHOT TABLE STABILITY». Он используется для получения монопольного доступа к набору результатов. Реализуемый параметром транзакции «согласованность», он предотвращает доступ «внешней» транзакции к записанным данным. Только транзакция, которая записала данные, может получить к ним доступ. Это предотвращает также многопользовательский доступ к записанным данным. Поскольку этот TIL очень ограничивает доступ к записанным данным, его следует применять с осторожностью и осторожностью.
 +
 +
* <b>TiNone</b>: TIL не используется для изоляции транзакции. TIL tiReadUncommitted не поддерживается Firebird. Если используется этот TIL, будет вызвана ошибка, и транзакция не будет изолирована (как при использовании tiNone).
  
 
= Делаем свое первое приложение Zeos =
 
= Делаем свое первое приложение Zeos =

Revision as of 17:37, 19 May 2021

Deutsch (de) English (en) español (es) français (fr) português (pt) русский (ru) 中文(中国大陆)‎ (zh_CN)

Databases portal

References:

Tutorials/practical articles:

Databases

Advantage - MySQL - MSSQL - Postgres - Interbase - Firebird - Oracle - ODBC - Paradox - SQLite - dBASE - MS Access - Zeos

Обзор

Это руководство посвящено получению, установке и использованию Zeoslib с Lazarus и FPC.

Получение Zeos

Zeos недавно был перенесен на Lazarus, и пока нет выпусков, которые официально поддерживают его, но вы можете легко получить его из SVN, если выполните следующие действия:

SVN

Windows

Linux/BSD

  • FreeBSD поставляется с предустановленным svnlite (клиент svn)
  • получите клиент SVN (esvn, kdesvn и т.д.)
  • создайте каталог zeosdbo, перейдите в этот каталог и выполните
  • svn checkout http://svn.code.sf.net/p/zeoslib/code-0/trunk

ZIP

Вы можете скачать последнюю версию в виде ZIP-файла с sourceforge.net:

Установка компонентов

Это сложная часть, поэтому вам следует проявить немного терпения и внимательно прочитать эту часть.

  • Убедитесь, что у вас последний снапшот Lazarus и версия FPC 2.0.3 не ранее 6 марта 2006г.
  • Запустите один экземпляр Lazarus.
  1. Используйте Components/Open Package File(.lpk) из главного меню.
  2. Перейдите в zeosdbo_rework\packages\lazarus\ и откройте zcomponent.lpk
  3. Нажмите только [Compile] в том случае, если вы не хотите устанавливать компоненты в IDE
  4. Нажмите [Install]
  5. Вас спросят, хотите ли вы перекомпилировать Lazarus.
  • Ответьте [Yes] на этот раз.
  • Дождитесь завершения компиляции, после этого Lazarus должен перезапуститься.
  • Если все в порядке, теперь вы должны увидеть вкладку [Zeos Access] на палитре компонентов.

Прим.перев: на момент перевода статьи (май 2021г) установка немного изменилась:

  • качаете исходный код отсюда https://svn.code.sf.net/p/zeoslib/code-0/trunk
  • открываете файл zeos\packages\lazarus\zcomponentdesign.lpk
  • жмете последовательно [Compile] и [Install]
  • пересобираете Лазарус

Zeos Components.png

Если вы получаете сообщение об ошибке "Cannot find unit ZClasses"(Не удается найти модуль ZClasses) или что-то подобное, вам необходимо внимательно проверить регистр имен файлов в исходном дистрибутиве Zeos.

  • Даже если случаи полностью совпадают, автоматически сгенерированный исходный файл пакета может сгенерировать неправильное имя случая в разделе uses (Lazarus 0.9.18), то есть:
{ This file was automatically created by Lazarus. Do not edit!
  This source is only used to compile and install the package.
}
unit Zcore; 
interface
uses
  Zclasses, Zcollections, Zcompatibility, Zexprparser, Zexprtoken, Zexpression, 
  Zfunctions, Zmatchpattern, Zmessages, Zsysutils, Ztokenizer, Zvariables, 
  Zvariant; 
implementation
end.
  • Обратите внимание, что Lazarus переименовал модуль ZClasses на Zclasses, что привело к конфликту имен. Предположительно это ошибка в Lazarus, а не в пакетах Zeos. Один из способов обойти это - переименовать все исходные файлы zeos в нижний регистр. Просмотрите каждый подкаталог в src/ и выполните эту команду в окне bash:
 rename -v 'y/A-Z/a-z/' *
  • Затем в Lazarus повторно откройте пакет (.lpk) и исправьте регистры имен файлов, нажав "More..."/"Fix Files Case"(Еще .../Исправить регистр файлов).
  • Теперь пакет должен скомпилироваться.

Немного о компонентах

Прим.перев.: позволил сделать краткое описание компонентов из набора на основе официальной документации.

TZConnection

Компонент TZConnection представляет собой комбинацию компонента, подобного BDE TDatabase, и компонента, который обрабатывает транзакцию. Транзакция запускается библиотекой ZEOS всякий раз, когда открывается соединение (метод Connect TZConnection) с базой данных. Это приводит к тому, что каждый доступ к базе данных выполняется автоматически в контексте выполняющейся транзакции.

AutoCommit

Так называемый режим AutoCommit о умолчанию всегда включен (установлен в «True»). Это также стандартное поведение соответствующего компонента BDE. Если AutoCommit активен, то каждое изменение оператора SQL будет подтверждаться в базе данных с помощью COMMIT после его успешного выполнения.

Если вы хотите управлять транзакцией сами при помощи последовательных StartTransaction..Commit/Rollback, то AutoCommit должен быть отключен (установлен в «False»). В рамках этой явной транзакции можно последовательно выполнить несколько операторов SQL, которые вносят изменения в базу данных. При вызове метода Commit все изменения, сделанные в этой явной транзакции, подтверждаются. Вызов метода Rollback сбрасывает эти изменения.

TransactIsolationLevel (TIL)

Компонент TZConnection предоставляет четыре полезных и предопределенных уровня изоляции транзакций (TIL):

  • tiRepeatableRead: он соответствует TIL ”SNAPSHOT”, который является стандартом серверов Firebird. Это комбинация параметров транзакции concurrency и nowait. Создается снимок текущей базы данных. На других пользователей влияют (ограничивают) только в том случае, если две транзакции работают с одной записью одновременно. Если при доступе к данным возникнут конфликты, будет возвращено сообщение об ошибке. Изменения в других транзакциях не будут замечены. Этот TIL широко охватывает требования стандарта SQL (SERIALIZABLE).
  • TiReadCommitted: соответствует TIL «READ COMMITTED». Это комбинация параметров транзакции "read_committed", "rec_version"

и "nowait'. Этот TIL распознает все изменения в других транзакциях, которые были подтверждены COMMIT. Параметр "rec_version" отвечает за поведение, при котором будут учитываться самые последние значения, зафиксированные другими пользователями. Параметр "nowait" отвечает за поведение, при котором нет ожидания освобождения заблокированной записи. Таким образом, сервер более нагружен, чем в TIL tiRepeatableRead, потому что он должен выполнять все обновления, чтобы получать эти значения снова и снова.

  • TiSerializable: соответствует TIL «”SNAPSHOT TABLE STABILITY». Он используется для получения монопольного доступа к набору результатов. Реализуемый параметром транзакции «согласованность», он предотвращает доступ «внешней» транзакции к записанным данным. Только транзакция, которая записала данные, может получить к ним доступ. Это предотвращает также многопользовательский доступ к записанным данным. Поскольку этот TIL очень ограничивает доступ к записанным данным, его следует применять с осторожностью и осторожностью.
  • TiNone: TIL не используется для изоляции транзакции. TIL tiReadUncommitted не поддерживается Firebird. Если используется этот TIL, будет вызвана ошибка, и транзакция не будет изолирована (как при использовании tiNone).

Делаем свое первое приложение Zeos

  • Бросьте на форму ZConnection.
    • Задайте свои User, Password, Host, Port и Protocol (и любые другие параметры, если необходимо).
    • Установите Connected в True.
  • Бросьте на форму ZQuery (не перепутайте с ZReadOnlyQuery).
    • Задайте свойству Connection значение ZConnection.
    • Задайте для свойства Sql что-то вроде SELECT * FROM MyTable
    • Установите Active в True.
  • Бросьте на форму DataSource с вкладки [Data Access].
    • Задайте свойству DataSet ваш ZQuery.
  • Бросьте на форму DBGrid с вкладки [Data Controls].
    • Задайте свойству Datasource ваш DataSource.
    • Если все в порядке, вы должны увидеть записи из своей таблицы..

Possible Bugs and Issues

  • I have noticed that sometimes when building Lazarus it cannot find some Zeos files, as a quick workaround try this:
    • Use Components/Package Graph from the main menu.
    • Open the ZComponent package.
    • Right Click on the Files item in the list.
    • Choose [Recompile all required].
    • When asked "Re-Compile this and all required packages?" answer [Yes].
    • Recompile Lazarus normally (with packages).

See also