Sign in Join
Wiki copytemporary

Zeos tutorial/ru: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11# Обзор
22
33Это руководство посвящено получению, установке и использованию [Zeoslib](https://www.firmos.at/zeos) с [[Glossary|Lazarus]] и [[Glossary|FPC]].
44
55# Получение Zeos
66
77Zeos недавно был перенесен на [[Glossary|Lazarus]], и пока нет выпусков, которые официально поддерживают его, но вы можете легко получить его из SVN, если выполните следующие действия:
88
99## SVN
1010
1111### Windows
1212
1313- скачайте клиент SVN [TortoiseSVN](http://tortoisesvn.tigris.org) и установите
1414- см. [Начало работы с TortoiseSVN](http://tortoisesvn.net/docs/release/TortoiseSVN_en/help-onepage.html#tsvn-dug-general)
1515- сделайте Checkout из проводника Windows: <http://svn.code.sf.net/p/zeoslib/code-0/trunk>
1616
1717### Linux/BSD
1818
1919- [[Portal:FreeBSD|FreeBSD]] поставляется с предустановленным **svnlite** (клиент svn)
2020- получите клиент SVN (esvn, kdesvn и т.д.)
2121- создайте каталог zeosdbo, перейдите в этот каталог и выполните
2222- svn checkout <http://svn.code.sf.net/p/zeoslib/code-0/trunk>
2323
2424## ZIP
2525
2626Вы можете скачать последнюю версию в виде ZIP-файла с sourceforge.net:
2727
2828- [<http://sourceforge.net/projects/zeoslib/>](http://sourceforge.net/projects/zeoslib/)
2929
3030# Установка компонентов
3131
3232Это сложная часть, поэтому вам следует проявить немного терпения и внимательно прочитать эту часть.
3333
3434- Убедитесь, что у вас последний [снапшот Lazarus](http://www.de.freepascal.org/lazarus/) и версия FPC 2.0.3 не ранее 6 марта 2006г.
3535- Запустите один экземпляр Lazarus.
3636
37371. Используйте **Components/Open Package File(.lpk)** из главного меню.
38382. Перейдите в **zeosdbo_rework\packages\lazarus\** и откройте **zcomponent.lpk**
39393. Нажмите только **\[Compile\]** в том случае, если вы не хотите устанавливать компоненты в IDE
40404. Нажмите **\[Install\]**
41415. Вас спросят, хотите ли вы перекомпилировать Lazarus.
4242
4343- Ответьте **\[Yes\]** на этот раз.
4444- Дождитесь завершения компиляции, после этого Lazarus должен перезапуститься.
4545- Если все в порядке, теперь вы должны увидеть вкладку **\[Zeos Access\]** на палитре компонентов.
4646
4747------------------------------------------------------------------------
4848
4949Прим.перев: на момент перевода статьи (май 2021г) установка немного изменилась:
5050
5151- качаете исходный код отсюда <https://svn.code.sf.net/p/zeoslib/code-0/trunk>
5252- открываете файл zeos\packages\lazarus\zcomponentdesign.lpk
5353- жмете последовательно **\[Compile\]** и **\[Install\]**
5454- пересобираете Лазарус
5555
5656------------------------------------------------------------------------
5757
5858![](/wiki-images/2/25/Zeos_Components.png)
5959
6060Если вы получаете сообщение об ошибке "Cannot find unit ZClasses"(Не удается найти модуль ZClasses) или что-то подобное, вам необходимо внимательно проверить регистр имен файлов в исходном дистрибутиве Zeos.
6161
6262- Даже если случаи полностью совпадают, автоматически сгенерированный исходный файл пакета может сгенерировать неправильное имя случая в разделе uses (Lazarus 0.9.18), то есть:
6363
6464``` pascal
6565{ This file was automatically created by Lazarus. Do not edit!
6666 This source is only used to compile and install the package.
6767}
6868unit Zcore;
6969interface
7070uses
7171 Zclasses, Zcollections, Zcompatibility, Zexprparser, Zexprtoken, Zexpression,
7272 Zfunctions, Zmatchpattern, Zmessages, Zsysutils, Ztokenizer, Zvariables,
7373 Zvariant;
7474implementation
7575end.
7676```
7777
7878- Обратите внимание, что Lazarus переименовал модуль ZClasses на Zclasses, что привело к конфликту имен. Предположительно это ошибка в Lazarus, а не в пакетах Zeos. Один из способов обойти это - переименовать все исходные файлы zeos в нижний регистр. Просмотрите каждый подкаталог в src/ и выполните эту команду в окне bash:
7979
80-` rename -v 'y/A-Z/a-z/' *`
80+```text
81+ rename -v 'y/A-Z/a-z/' *
82+```
8183
8284- Затем в Lazarus повторно откройте пакет (.lpk) и исправьте регистры имен файлов, нажав "More..."/"Fix Files Case"(Еще .../Исправить регистр файлов).
8385- Теперь пакет должен скомпилироваться.
8486
8587# Немного о компонентах
8688
8789Прим.перев.: позволил себе сделать краткое описание компонентов из набора на основе [официальной документации](https://sourceforge.net/projects/zeoslib/files/documentation/ZeosDocumentationCollection-2017-03-20.pdf/download).
8890
8991## TZConnection
9092
9193Компонент TZConnection представляет собой комбинацию компонента, подобного BDE TDatabase, и компонента, который обрабатывает транзакцию. Транзакция запускается библиотекой ZEOS всякий раз, когда открывается соединение (метод Connect TZConnection) с базой данных. Это приводит к тому, что каждый доступ к базе данных выполняется автоматически в контексте выполняющейся транзакции.
9294
9395### AutoCommit
9496
9597Так называемый режим AutoCommit о умолчанию всегда включен (установлен в «True»). Это также стандартное поведение соответствующего компонента BDE. Если AutoCommit активен, то каждое изменение оператора SQL будет подтверждаться в базе данных с помощью COMMIT после его успешного выполнения.
9698
9799Если вы хотите управлять транзакцией сами при помощи последовательных StartTransaction..Commit/Rollback, то AutoCommit должен быть отключен (установлен в «False»). В рамках этой явной транзакции можно последовательно выполнить несколько операторов SQL, которые вносят изменения в базу данных. При вызове метода Commit все изменения, сделанные в этой явной транзакции, подтверждаются. Вызов метода Rollback сбрасывает эти изменения.
98100
99101### TransactIsolationLevel (TIL)
100102
101103Компонент TZConnection предоставляет четыре полезных и предопределенных уровня изоляции транзакций (TIL):
102104
103105- tiRepeatableRead: он соответствует TIL ”SNAPSHOT”, который является стандартом серверов Firebird. Это комбинация параметров транзакции concurrency и nowait. Создается снимок текущей базы данных. На других пользователей влияют (ограничивают) только в том случае, если две транзакции работают с одной записью одновременно. Если при доступе к данным возникнут конфликты, будет возвращено сообщение об ошибке. Изменения в других транзакциях не будут замечены. Этот TIL широко охватывает требования стандарта SQL (SERIALIZABLE).
104106
105107- TiReadCommitted: соответствует TIL "READ COMMITTED". Это комбинация параметров транзакции "read_committed", "rec_version" и "nowait'. Этот TIL распознает все изменения в других транзакциях, которые были подтверждены COMMIT. Параметр "rec_version" отвечает за поведение, при котором будут учитываться самые последние значения, зафиксированные другими пользователями. Параметр "nowait" отвечает за поведение, при котором нет ожидания освобождения заблокированной записи (т.е. транзакция откатывается, если запись редактируется другим пользователем, а потому является заблокированной). Таким образом, сервер более нагружен, чем в TIL tiRepeatableRead, потому что он должен выполнять все обновления, чтобы получать эти значения снова и снова.
106108
107109- TiSerializable: соответствует TIL "SNAPSHOT TABLE STABILITY'. Она используется для получения монопольного доступа к набору данных. Реализуемый параметром транзакции «согласованность», она предотвращает доступ «внешней» транзакции к записанным данным. Только транзакция, которая записала данные, может получить к ним доступ. Это предотвращает также многопользовательский доступ к записанным данным. Поскольку этот TIL очень ограничивает доступ к записанным данным, его следует применять с большой осторожностью.
108110
109111- TiNone: TIL не используется для изоляции транзакции. TIL tiReadUncommitted не поддерживается Firebird. Если используется этот TIL, будет вызвана ошибка, и транзакция не будет изолирована (как при использовании tiNone).
110112
111113### Protocol
112114
113115Свойство определяет, какой протокол коннекта (напр, ado, firebird, sqlite и т.д.) будет использоваться и, следовательно, к какому серверу SQL будет осуществляться доступ. Благодаря этому, вам не нужно устанавливать специальные компоненты для каждой базы данных, к которой вы хотите получить доступ, как это было в версии 5.x и ранее. Компоненты будут установлены один раз. Вы только выбираете протокол для поддерживаемого SQL-сервера, к которому хотите получить доступ, и все готово.
114116
115117### ReadOnly
116118
117119Соединение с базой данных, поддерживаемое объектом TZConnection, по умолчанию настроено только для чтения (ReadOnly = True). Это означает, что доступ для записи в подключенную базу данных запрещен. Чтобы получить доступ для записи в базу данных, вы должны установить для ReadOnly значение False.
118120
119121### Properties
120122
121123Редактор множества настроек, каждую из которых можно задать либо путем выбора в диалоговом окне
122124
123125![](/wiki-images/f/fa/Zeos_zconnection_properties.png)
124126
125127либо определением этого параметра в коде, например:
126128
127129``` pascal
128130ZConection.Properties.Add ('lc_ctype=ISO8859_1');
129131//или
130132ZConnection.Properties.Add ('Codepage=ISO8859_1');
131133```
132134
133135## TZQuery и TZUpdateSQL
134136
135137Компонент для чтения и изменения набора данных. Для чтения необходимо заполнить свойство SQL, затем открыть набор данных, например:
136138
137139``` pascal
138140ZQuery.SQL.Text:= 'select * from MyTable';
139141ZQuery.Active:= True;//или if not ZQuery.Active then ZQuery.Open;
140142```
141143
142144Для модификации набора данных необходимо использовать TZUpdateSQL, где должны быть заполнены свойства ModifySQL, InsertSQl, DeleteSQL и RefreshSQL для изменения, вставки, удаления и обновления данных соответственно. При этом оба компонента должны быть связаны следующим образом:
143145
144146``` pascal
145147ZQuery.UpdateObject:= ZUpdateSQL;
146148```
147149
148150а для выполнения модификации данных необходимо вызывать ZQuery.ExecSQL (вместо ZQuery.Open).
149151
150152Генерацию модифицирующих запросов можно выполнять в design-time при помощи встроенного редактора. Для этого необходимо в design-time связать между собой ZConnection, ZTransaction, ZQuery и ZUpdateSQL. Затем выполнить подключение к базе данных, сделать активным ZQuery, выделить ZUpdateSQL, ПКМ вызвать контекстное меню и выбрать пункт "UpdateSQL editor..."
151153
152154![](/wiki-images/7/77/Zeos_zupdatesql_editor1.png)
153155
154156Затем последовательно выделяем первичный ключ в поле "Key Fields" и жмем "Select Primary Keys", потом в поле "Update Fields" выделяем поля, которые мы хотим модифицировать
155157
156158![](/wiki-images/5/50/Zeos_zupdatesql_editor2.png)
157159
158160Нажав кнопку "Generate SQL", получает автоматически сгенерированные запросы
159161
160162![](/wiki-images/2/25/Zeos_zupdatesql_editor3.png)
161163
162164### Transaction и UpdateTransaction
163165
164166Поля, где указываются транзакции для чтения (ZQuery.Open) и записи (ZQuery.ExecSQL) соответственно. Иногда читающей и пишущей транзакцией может быть одна транзакция (зависит от типа сервера).
165167
166168# Делаем свое первое приложение Zeos
167169
168170- Бросьте на форму **ZConnection**.
169171 - Задайте свои User, Password, Host, Port и Protocol (и любые другие параметры, если необходимо).
170172 - Установите Connected в True.
171173
172174- Бросьте на форму **ZQuery** (не перепутайте с ZReadOnlyQuery).
173175 - Задайте свойству Connection значение ZConnection.
174176 - Задайте для свойства Sql что-то вроде **SELECT * FROM MyTable**
175177 - Установите Active в True.
176178
177179- Бросьте на форму **DataSource** с вкладки **\[Data Access\]**.
178180 - Задайте свойству DataSet ваш ZQuery.
179181
180182- Бросьте на форму **DBGrid** с вкладки **\[Data Controls\]**.
181183 - Задайте свойству Datasource ваш DataSource.
182184 - Если все в порядке, вы должны увидеть записи из своей таблицы..
183185
184186# Possible Bugs and Issues
185187
186188- I have noticed that sometimes when building Lazarus it cannot find some Zeos files, as a quick workaround try this:
187189 - Use **Components/Package Graph** from the main menu.
188190 - Open the **ZComponent** package.
189191 - Right Click on the **Files** item in the list.
190192 - Choose **\[Recompile all required\]**.
191193 - When asked "Re-Compile this and all required packages?" answer **\[Yes\]**.
192194 - Recompile Lazarus normally (with packages).\
193195 \
194196
195197# See also
196198
197199- [Forum for ZeosLib](http://zeoslib.sourceforge.net/index.php)
198200- [[ZeosDBO]]
199201- [Учебник Lazarus/Zeos/Firebird (Windows)](https://lazarus.intern.es/tutorial_firebird_lazarus_zeos_2.html) Немец./частично на Англ [download site](https://lazarus.intern.es/download_tutorials_lazarus_zeos_firebird.html)
200202- [Документация по работе с компонентами (англ)](https://sourceforge.net/projects/zeoslib/files/documentation/ZeosDocumentationCollection-2017-03-20.pdf/download)
201203
202204---
203205*From the Free Pascal wiki, page "Zeos tutorial/ru", as it stood on 2021-05-20 after a change by Zoltanleo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history