Sign in Join
Wiki copytemporary

Zeos tutorial/ru: what changed

Revision 1 to 2. 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
8080` rename -v 'y/A-Z/a-z/' *`
8181
8282- Затем в Lazarus повторно откройте пакет (.lpk) и исправьте регистры имен файлов, нажав "More..."/"Fix Files Case"(Еще .../Исправить регистр файлов).
8383- Теперь пакет должен скомпилироваться.
8484
8585# Немного о компонентах
8686
8787Прим.перев.: позволил себе сделать краткое описание компонентов из набора на основе [официальной документации](https://sourceforge.net/projects/zeoslib/files/documentation/ZeosDocumentationCollection-2017-03-20.pdf/download).
8888
8989## TZConnection
9090
9191Компонент TZConnection представляет собой комбинацию компонента, подобного BDE TDatabase, и компонента, который обрабатывает транзакцию. Транзакция запускается библиотекой ZEOS всякий раз, когда открывается соединение (метод Connect TZConnection) с базой данных. Это приводит к тому, что каждый доступ к базе данных выполняется автоматически в контексте выполняющейся транзакции.
9292
9393### AutoCommit
9494
9595Так называемый режим AutoCommit о умолчанию всегда включен (установлен в «True»). Это также стандартное поведение соответствующего компонента BDE. Если AutoCommit активен, то каждое изменение оператора SQL будет подтверждаться в базе данных с помощью COMMIT после его успешного выполнения.
9696
9797Если вы хотите управлять транзакцией сами при помощи последовательных StartTransaction..Commit/Rollback, то AutoCommit должен быть отключен (установлен в «False»). В рамках этой явной транзакции можно последовательно выполнить несколько операторов SQL, которые вносят изменения в базу данных. При вызове метода Commit все изменения, сделанные в этой явной транзакции, подтверждаются. Вызов метода Rollback сбрасывает эти изменения.
9898
9999### TransactIsolationLevel (TIL)
100100
101101Компонент TZConnection предоставляет четыре полезных и предопределенных уровня изоляции транзакций (TIL):
102102
103103- tiRepeatableRead: он соответствует TIL ”SNAPSHOT”, который является стандартом серверов Firebird. Это комбинация параметров транзакции concurrency и nowait. Создается снимок текущей базы данных. На других пользователей влияют (ограничивают) только в том случае, если две транзакции работают с одной записью одновременно. Если при доступе к данным возникнут конфликты, будет возвращено сообщение об ошибке. Изменения в других транзакциях не будут замечены. Этот TIL широко охватывает требования стандарта SQL (SERIALIZABLE).
104104
105105- TiReadCommitted: соответствует TIL "READ COMMITTED". Это комбинация параметров транзакции "read_committed", "rec_version" и "nowait'. Этот TIL распознает все изменения в других транзакциях, которые были подтверждены COMMIT. Параметр "rec_version" отвечает за поведение, при котором будут учитываться самые последние значения, зафиксированные другими пользователями. Параметр "nowait" отвечает за поведение, при котором нет ожидания освобождения заблокированной записи (т.е. транзакция откатывается, если запись редактируется другим пользователем, а потому является заблокированной). Таким образом, сервер более нагружен, чем в TIL tiRepeatableRead, потому что он должен выполнять все обновления, чтобы получать эти значения снова и снова.
106106
107107- TiSerializable: соответствует TIL "SNAPSHOT TABLE STABILITY'. Она используется для получения монопольного доступа к набору данных. Реализуемый параметром транзакции «согласованность», она предотвращает доступ «внешней» транзакции к записанным данным. Только транзакция, которая записала данные, может получить к ним доступ. Это предотвращает также многопользовательский доступ к записанным данным. Поскольку этот TIL очень ограничивает доступ к записанным данным, его следует применять с большой осторожностью.
108108
109109- TiNone: TIL не используется для изоляции транзакции. TIL tiReadUncommitted не поддерживается Firebird. Если используется этот TIL, будет вызвана ошибка, и транзакция не будет изолирована (как при использовании tiNone).
110110
111111### Protocol
112112
113113Свойство определяет, какой протокол коннекта (напр, ado, firebird, sqlite и т.д.) будет использоваться и, следовательно, к какому серверу SQL будет осуществляться доступ. Благодаря этому, вам не нужно устанавливать специальные компоненты для каждой базы данных, к которой вы хотите получить доступ, как это было в версии 5.x и ранее. Компоненты будут установлены один раз. Вы только выбираете протокол для поддерживаемого SQL-сервера, к которому хотите получить доступ, и все готово.
114114
115115### ReadOnly
116116
117117Соединение с базой данных, поддерживаемое объектом TZConnection, по умолчанию настроено только для чтения (ReadOnly = True). Это означает, что доступ для записи в подключенную базу данных запрещен. Чтобы получить доступ для записи в базу данных, вы должны установить для ReadOnly значение False.
118118
119119### Properties
120120
121121Редактор множества настроек, каждую из которых можно задать либо путем выбора в диалоговом окне
122122
123-<img src="zeos_zconnection_properties.png" title="zeos_zconnection_properties.png" width="400" />
123+![](/wiki-images/f/fa/Zeos_zconnection_properties.png)
124124
125125либо определением этого параметра в коде, например:
126126
127127``` pascal
128128ZConection.Properties.Add ('lc_ctype=ISO8859_1');
129129//или
130130ZConnection.Properties.Add ('Codepage=ISO8859_1');
131131```
132132
133133## TZQuery и TZUpdateSQL
134134
135135Компонент для чтения и изменения набора данных. Для чтения необходимо заполнить свойство SQL, затем открыть набор данных, например:
136136
137137``` pascal
138138ZQuery.SQL.Text:= 'select * from MyTable';
139139ZQuery.Active:= True;//или if not ZQuery.Active then ZQuery.Open;
140140```
141141
142142Для модификации набора данных необходимо использовать TZUpdateSQL, где должны быть заполнены свойства ModifySQL, InsertSQl, DeleteSQL и RefreshSQL для изменения, вставки, удаления и обновления данных соответственно. При этом оба компонента должны быть связаны следующим образом:
143143
144144``` pascal
145145ZQuery.UpdateObject:= ZUpdateSQL;
146146```
147147
148148а для выполнения модификации данных необходимо вызывать ZQuery.ExecSQL (вместо ZQuery.Open).
149149
150150Генерацию модифицирующих запросов можно выполнять в design-time при помощи встроенного редактора. Для этого необходимо в design-time связать между собой ZConnection, ZTransaction, ZQuery и ZUpdateSQL. Затем выполнить подключение к базе данных, сделать активным ZQuery, выделить ZUpdateSQL, ПКМ вызвать контекстное меню и выбрать пункт "UpdateSQL editor..."
151151
152152![](/wiki-images/7/77/Zeos_zupdatesql_editor1.png)
153153
154154Затем последовательно выделяем первичный ключ в поле "Key Fields" и жмем "Select Primary Keys", потом в поле "Update Fields" выделяем поля, которые мы хотим модифицировать
155155
156156![](/wiki-images/5/50/Zeos_zupdatesql_editor2.png)
157157
158158Нажав кнопку "Generate SQL", получает автоматически сгенерированные запросы
159159
160160![](/wiki-images/2/25/Zeos_zupdatesql_editor3.png)
161161
162162### Transaction и UpdateTransaction
163163
164164Поля, где указываются транзакции для чтения (ZQuery.Open) и записи (ZQuery.ExecSQL) соответственно. Иногда читающей и пишущей транзакцией может быть одна транзакция (зависит от типа сервера).
165165
166166# Делаем свое первое приложение Zeos
167167
168168- Бросьте на форму **ZConnection**.
169169 - Задайте свои User, Password, Host, Port и Protocol (и любые другие параметры, если необходимо).
170170 - Установите Connected в True.
171171
172172- Бросьте на форму **ZQuery** (не перепутайте с ZReadOnlyQuery).
173173 - Задайте свойству Connection значение ZConnection.
174174 - Задайте для свойства Sql что-то вроде **SELECT * FROM MyTable**
175175 - Установите Active в True.
176176
177177- Бросьте на форму **DataSource** с вкладки **\[Data Access\]**.
178178 - Задайте свойству DataSet ваш ZQuery.
179179
180180- Бросьте на форму **DBGrid** с вкладки **\[Data Controls\]**.
181181 - Задайте свойству Datasource ваш DataSource.
182182 - Если все в порядке, вы должны увидеть записи из своей таблицы..
183183
184184# Possible Bugs and Issues
185185
186186- I have noticed that sometimes when building Lazarus it cannot find some Zeos files, as a quick workaround try this:
187187 - Use **Components/Package Graph** from the main menu.
188188 - Open the **ZComponent** package.
189189 - Right Click on the **Files** item in the list.
190190 - Choose **\[Recompile all required\]**.
191191 - When asked "Re-Compile this and all required packages?" answer **\[Yes\]**.
192192 - Recompile Lazarus normally (with packages).\
193193 \
194194
195195# See also
196196
197197- [Forum for ZeosLib](http://zeoslib.sourceforge.net/index.php)
198198- [[ZeosDBO]]
199199- [Учебник 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)
200200- [Документация по работе с компонентами (англ)](https://sourceforge.net/projects/zeoslib/files/documentation/ZeosDocumentationCollection-2017-03-20.pdf/download)
201201
202202---
203203*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