#include <qdataschema.h>
п÷п╬п╩п╫я▀п╧ я│п©п╦я│п╬п╨ я┤п╩п╣п╫п╬п╡ п╨п╩п╟я│я│п╟
п·я┌п╨я─я▀я┌я▀п╣ я┌п╦п©я▀ | |
| enum | ConnectionType { CT_INTERNAL, CT_MYSQL, CT_POSTGRESQL } |
п║п╦пЁп╫п╟п╩я▀ | |
| void | verifyMessage (QString op, QString value, QString oldvalue) |
п·я┌п╨я─я▀я┌я▀п╣ я┤п╩п╣п╫я▀ | |
| QDataSchema (ConnectionType ctype, const char *objname=0) | |
| Создает и инициализирует новый объект. | |
| ~QDataSchema () | |
| Закрывает соединение и освобождает ресурсы объекта. | |
| QString | objectName () const |
| void | setObjectName (const QString &newname) |
| bool | open (const QString &dbname, const QString &dbuser="", const QString &dbpass="", const QString &dbhost="localhost", int dbport=0) |
| Открывает и инициализирует соединение с сервером базы данных. | |
| bool | open () |
| Открывает и инициализирует соединение с сервером базы данных. | |
| void | close () |
| Закрывает соединение с сервером базоы данных. | |
| QSqlDatabase * | db () |
| bool | databaseCreate (const QString &dbadmuser, const QString &dbadmpass) |
| Создает новую базу данных. | |
| bool | databaseDrop (const QString &dbadmuser, const QString &dbadmpass) |
| Удаляет базу данных с сервера. | |
| int | execList (const QStringList &query, bool inTransaction=false) |
| Выполняет список последовательных запросов. | |
| QSqlCursor * | table (const QString &name=QString::null) |
| Создает объект QSqlCursor для таблицы базы данных. | |
| QString | tableName (const QString &name) |
| QString | tableNameStripPrefix (const QString &name) |
| QString | nameSpace () const |
| Возвращает пространство имен таблиц базы данных. | |
| void | setNameSpace (const QString &namesp) |
| Устанавливает пространство имен таблиц базы данных. | |
| bool | tableExists (const QString &name) |
| Проверка существования таблицы на сервере БД. | |
| QDataSchemaDriver * | driver () |
| Возвращает текущий драйвер базы данных. | |
| void | setDataDictionary (const QStringList &dd_new) |
| Устанавливает словарь описания данных. | |
| QStringList | dataDictionary () |
| Возвращает словарь описания данных. | |
| QStringList | updateStructureQuery () |
| Возвращает список запросов для обновления БД. | |
| QStringList | verifyLog () |
| Возвращает список изменений в БД. | |
| int | verifyStructure () |
| Проверяет структуру текущей БД на соответствие описанной в метаданных. | |
| int | updateStructure () |
| Обновляет структуру таблиц на сервере. | |
| virtual int | databaseExport (const QString &filename) |
| Выгружает информацию из базы данных. | |
| virtual int | databaseImport (const QString &filename, bool updateStruct=false) |
| Загружает информацию в базу данных. | |
п·я┌п╨я─я▀я┌я▀п╣ я│я┌п╟я┌п╦я┤п╣я│п╨п╦п╣ я┤п╩п╣п╫я▀ | |
| static QStringList | drivers () |
| Возвращает список доступных драйверов. | |
| static bool | isDriverAvailable (const QString &name) |
| Проверка доступности драйвера по имени. | |
п≈п╟я┴п╦я┴п╣п╫п╫я▀п╣ я┤п╩п╣п╫я▀ | |
| void | verifyLogRecord (QString op, QString value, QString oldvalue="") |
| Регистрирует запись изменений в БД. | |
| QString | ddRecord (int idx, bool d_sql=false) |
| Возвращает запись словаря по индексу. | |
| int | ddCount (const QString &etype, bool d_sql=false) |
| Количество записей выбранного вида в словаре. | |
| int | ddIndex (const QString &etype, int num, bool d_sql=false) |
| Возвращает индекс элемента словаря. | |
| int | ddIndex (const QString &etype, const QString &name, bool d_sql=false) |
| Возвращает индекс элемента словаря. | |
| int | ddCountSub (int idx, const QString &etype, bool d_sql=false) |
| Количество подчиненных записей выбранного вида в словаре. | |
| int | ddIndexSub (int idx, const QString &etype, int num, bool d_sql=false) |
| Возвращает индекс подчиненного элемента словаря. | |
| int | ddIndexSub (int idx, const QString &etype, const QString &name, bool d_sql=false) |
| Возвращает индекс подчиненного элемента словаря. | |
| QString | ddRecSection (const QString &rec, int secnum) |
| Возвращает секцию записи элемента словаря. | |
| QString | ddRecType (const QString &rec) |
| Возвращает тип записи элемента словаря. | |
| QString | ddRecName (const QString &rec) |
| Возвращает имя записи элемента словаря. | |
| void | joinLists (QStringList &list, const QStringList &add) |
| Добавляет один список строк к другому. | |
| QStringList | splitQString (const QString &div, const QString &str) |
| QString | lowerQString (const QString &str) |
| QString | trimmedQString (const QString &str) |
| int | checkSqlError (QSqlQuery &query) |
| Проверяет результат выполнения запроса. | |
| QString | fieldTypeSql (const QString &tdef) |
| Возвращает описание записи поля словаря для активного сервера БД. | |
| virtual int | createSystables () |
| Создание системных таблиц. | |
Используется для поддержки синхронной структуры данных приложения и сервера базы данных. Структура данных приложения описывается в серверо-независимом контексте. В зависимости от конкретного сервера базы данных выбирается способ обновления структуры в том случае, если структура информации в приложении изменилась ( например, обновлена версия приложения ) и нам требуется обновить структуру базы данных, сохранив ранее введенную информацию.
в дополнение в таблицам, описанным в приложении, QDataSchema создает дополнительную таблицу словаря данных с именем dictionaryTableName() ( по умолчанию "dd" ) в которой хранится служебная информация о текущей структуре базы данных для максимально корректного обновления структуры.
Словарь создается автоматически со следующими параметрами:
T=dd|Data dictionary|S F=id|Line number|I|0|0| F=value|Data value|C|250|0|
QDataSchema *qds; QString dbname = "qds", dbuser = "", dbpasswd = "", dbserver = "localhost"; int dbport = 0; QStringList dd; qds = new QDataSchema( QDataSchema::CT_INTERNAL ); // Application data schema description dd<<"D=QDS|Description|UTF-8|UID"; dd<<"T=T1|Description|U"; dd<<"F=F1|Description|I|0|0|PSN"; dd<<"F=F2|Description|D|0|0|"; dd<<"F=F3|Description|C|200|0|"; dd<<"F=F4|Description|N|10|2|"; dd<<"F=F5|Description|I|0|0|"; dd<<"F=F2|Description|L|0|0|"; dd<<"I=I1|Description|F2,F3|"; dd<<"T=T2|Description|U"; dd<<"F=F1|Description|I|0|0|PSN"; dd<<"F=F2|Description|C|10|0|"; qds->setDataDictionary( dd ); if ( qds->init( dbname,dbuser,dbpasswd,dbserver,dbport ) ) { if ( !qds->verifyStructure() ){ // need to update printf("verify log:\n%s\n", ( const char * ) adb.verifyLog().join("\n") ); printf("update structure query:\n%s\n", ( const char * ) adb.updateStructureQuery().join("\n") ); qds->updateStructure(); } } else printf("ERROR INIT DATABASE\n");
Класс QDataSchema нацелен на автоматическую поддержку актуальной структуры таблиц базы данных на SQL сервере при изменении в структуре базы данных приложения, использующего QDataSchema. QDataSchema использует описание структуры таблиц.
Существуют два описания структуры таблиц: 1) Структура таблиц на сервере базы данных 2) структура таблиц, загруженная приложением при инициализации класса.
Метод verifyStructure() проверяет соответствие этих двух структур и в случае расхождения составляет 3 списка различий:
структура таблиц представляет список строк следующего формата:
* # Commentaries in (UTF-8) * # --- Data dictionary * # Name|Description|Charset|UID * D=DATASCHEMA|Description of the data schema|UTF-8|XXXCCCWWW * # --- Table * # Name | Descr | Type[A/S/U]| DBName|Flags * T=TableName|Table description|A|DBTable| * # --- Fields * # Name| Description|Type [D/C/N/I]|Length|Precision| * F=CURDATE|Current date|D|8|0| * #--- Indexes * # Name| Description |Unique [0/1]|Index fields|DBName * I=IDD|Index of ID|0|ID,DATE,DESCR(UPPER)|IDD * # END *
| QDataSchema::QDataSchema | ( | ConnectionType | ct, | |
| const char * | objname = 0 | |||
| ) |
Создает и инициализирует новый объект.
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ isDriverAvailable().
| int QDataSchema::checkSqlError | ( | QSqlQuery & | query | ) | [protected] |
Проверяет результат выполнения запроса.
Если была ошибка, она выводится на стандартный вывод.
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseExport() п╦ execList().
| int QDataSchema::createSystables | ( | ) | [protected, virtual] |
Создание системных таблиц.
Создает таблицу словаря со структурой
* dd_name (id int, value char(250)) *
для хранения дополнительной информации о типах полей и индексов.
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ driver(), execList(), fieldTypeSql() п╦ tableExists().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ updateStructure().
| bool QDataSchema::databaseCreate | ( | const QString & | dbadmuser, | |
| const QString & | dbadmpass | |||
| ) |
Создает новую базу данных.
Создается новая база данных с ранее установленным именем. Для создания новой базы данных необходимо знать имя и пароль администратора сервера базы данных.
| dbadmuser | (in) имя администратора сервера базы данных | |
| dbadmpass | (in) пароль администратора сервера базы данных |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ db(), driver() п╦ execList().
| bool QDataSchema::databaseDrop | ( | const QString & | dbadmuser, | |
| const QString & | dbadmpass | |||
| ) |
Удаляет базу данных с сервера.
Удаляется база данных с ранее установленным именем. Для удаления базы данных необходимо знать имя и пароль администратора сервера базы данных.
| dbadmuser | (in) имя администратора сервера базы данных | |
| dbadmpass | (in) пароль администратора сервера базы данных |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ db(), driver() п╦ execList().
| int QDataSchema::databaseExport | ( | const QString & | filename | ) | [virtual] |
Выгружает информацию из базы данных.
| filename | (in) имя файла обмена |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ checkSqlError(), dataDictionary(), db(), ddCount(), ddCountSub(), ddIndex(), ddIndexSub(), ddRecName(), ddRecord(), ddRecSection() п╦ verifyStructure().
| int QDataSchema::databaseImport | ( | const QString & | filename, | |
| bool | updateStruct = false | |||
| ) | [virtual] |
Загружает информацию в базу данных.
| filename | (in) имя файла обмена | |
| updateStruct | (in) true - надо обновлять структуру, если она отличается от существующей, false - возвращать код ошибки |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ dataDictionary(), execList(), setDataDictionary(), updateStructure() п╦ verifyStructure().
| QStringList QDataSchema::dataDictionary | ( | ) |
Возвращает словарь описания данных.
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseExport() п╦ databaseImport().
| QSqlDatabase * QDataSchema::db | ( | ) |
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ close(), databaseCreate(), databaseDrop(), databaseExport(), execList(), open(), setNameSpace(), table(), tableExists(), updateStructure() п╦ verifyStructure().
| int QDataSchema::ddCount | ( | const QString & | etype, | |
| bool | d_sql = false | |||
| ) | [protected] |
Количество записей выбранного вида в словаре.
| etype | (in) тип элемента словаря в виде "[T/D]" | |
| s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ ddRecType().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseExport(), ddIndex() п╦ verifyStructure().
| int QDataSchema::ddCountSub | ( | int | idx, | |
| const QString & | etype, | |||
| bool | d_sql = false | |||
| ) | [protected] |
Количество подчиненных записей выбранного вида в словаре.
| idx | (in) индекс главного элемента словаря, полученный вызовом функции ddIndex() | |
| etype | (in) тип элемента словаря в виде "[T/D]" | |
| s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ ddRecType().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseExport(), ddIndexSub() п╦ verifyStructure().
| int QDataSchema::ddIndex | ( | const QString & | etype, | |
| const QString & | name, | |||
| bool | d_sql = false | |||
| ) | [protected] |
Возвращает индекс элемента словаря.
| etype | (in) тип элемента словаря в виде "[T/D]" | |
| s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ ddCount(), ddIndex(), ddRecName() п╦ ddRecord().
| int QDataSchema::ddIndex | ( | const QString & | etype, | |
| int | num, | |||
| bool | d_sql = false | |||
| ) | [protected] |
Возвращает индекс элемента словаря.
| etype | (in) тип элемента словаря в виде "[T/D]" | |
| s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ ddRecType().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseExport(), ddIndex() п╦ verifyStructure().
| int QDataSchema::ddIndexSub | ( | int | idx, | |
| const QString & | etype, | |||
| const QString & | name, | |||
| bool | d_sql = false | |||
| ) | [protected] |
Возвращает индекс подчиненного элемента словаря.
| idx | (in) индекс главного элемента словаря, полученный вызовом функции ddIndex() | |
| etype | (in) тип подчиненного элемента словаря в виде "[F/I]" | |
| s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ ddCountSub(), ddIndexSub(), ddRecName() п╦ ddRecord().
| int QDataSchema::ddIndexSub | ( | int | idx, | |
| const QString & | etype, | |||
| int | num, | |||
| bool | d_sql = false | |||
| ) | [protected] |
Возвращает индекс подчиненного элемента словаря.
| idx | (in) индекс главного элемента словаря, полученный вызовом функции ddIndex() | |
| etype | (in) тип подчиненного элемента словаря в виде "[F/I]" | |
| s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ ddRecType().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseExport(), ddIndexSub() п╦ verifyStructure().
| QString QDataSchema::ddRecName | ( | const QString & | rec | ) | [protected] |
Возвращает имя записи элемента словаря.
| rec | (in) запись (строка) словаря |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ ddRecSection().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseExport(), ddIndex(), ddIndexSub(), fieldTypeSql() п╦ verifyStructure().
| QString QDataSchema::ddRecord | ( | int | idx, | |
| bool | d_sql = false | |||
| ) | [protected] |
Возвращает запись словаря по индексу.
| idx | (in) индекс записи словаря" | |
| s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseExport(), ddIndex(), ddIndexSub() п╦ verifyStructure().
| QString QDataSchema::ddRecSection | ( | const QString & | rec, | |
| int | secnum | |||
| ) | [protected] |
Возвращает секцию записи элемента словаря.
| rec | (in) запись (строка) словаря | |
| secnum | (in) номер секции, начиная с 0. Секции разделены символом "|" |
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseExport(), ddRecName(), ddRecType(), fieldTypeSql() п╦ verifyStructure().
| QString QDataSchema::ddRecType | ( | const QString & | rec | ) | [protected] |
Возвращает тип записи элемента словаря.
| rec | (in) запись (строка) словаря |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ ddRecSection().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ ddCount(), ddCountSub(), ddIndex(), ddIndexSub() п╦ verifyLogRecord().
| QStringList QDataSchema::drivers | ( | ) | [static] |
Возвращает список доступных драйверов.
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ isDriverAvailable().
| int QDataSchema::execList | ( | const QStringList & | queryList, | |
| bool | inTransaction = false | |||
| ) |
Выполняет список последовательных запросов.
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ checkSqlError() п╦ db().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ createSystables(), databaseCreate(), databaseDrop(), databaseImport(), open() п╦ updateStructure().
| QString QDataSchema::fieldTypeSql | ( | const QString & | tdef | ) | [protected] |
Возвращает описание записи поля словаря для активного сервера БД.
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ ddRecName(), ddRecSection() п╦ driver().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ createSystables() п╦ verifyStructure().
| bool QDataSchema::isDriverAvailable | ( | const QString & | name | ) | [static] |
Проверка доступности драйвера по имени.
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ drivers().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ QDataSchema().
| void QDataSchema::joinLists | ( | QStringList & | list, | |
| const QStringList & | add | |||
| ) | [protected] |
Добавляет один список строк к другому.
| list | (in) список, в который добавляются строки | |
| add | (in) список для добавления |
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ verifyStructure().
| bool QDataSchema::open | ( | ) |
Открывает и инициализирует соединение с сервером базы данных.
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ db(), driver() п╦ execList().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ open().
| bool QDataSchema::open | ( | const QString & | dbname, | |
| const QString & | dbuser = "", |
|||
| const QString & | dbpass = "", |
|||
| const QString & | dbhost = "localhost", |
|||
| int | dbport = 0 | |||
| ) |
Открывает и инициализирует соединение с сервером базы данных.
| dbname | (in) - Имя базы данных. | |
| dbuser | (in) - Имя пользователя сервера базы данныхю | |
| dbpass | (in) - Пароль пользователя сервера базы данныхю. | |
| dbhost | (in) - Адрес хоста сервера базы данныхю. | |
| dbport | (in) - Порт соединения сервера базы данныхю. |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ db(), driver() п╦ open().
| void QDataSchema::setDataDictionary | ( | const QStringList & | dd_new | ) |
Устанавливает словарь описания данных.
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseImport().
| void QDataSchema::setNameSpace | ( | const QString & | namesp | ) |
Устанавливает пространство имен таблиц базы данных.
Операция выполняется только над закрытой базой данных.
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ db().
| QSqlCursor * QDataSchema::table | ( | const QString & | name = QString::null |
) |
Создает объект QSqlCursor для таблицы базы данных.
Возвращаемый объект может быть использован для просмотра и редактирования таблицы в текущей базе данных.
| name | (in) - имя таблицы в базе данных |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ db() п╦ tableExists().
| bool QDataSchema::tableExists | ( | const QString & | name | ) |
Проверка существования таблицы на сервере БД.
| name | (in) - Иям таблицы для проверки. |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ db().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ createSystables(), table() п╦ verifyStructure().
| int QDataSchema::updateStructure | ( | ) |
Обновляет структуру таблиц на сервере.
Обновление выполняется на основе информации, подготовленной при вызове verifyStructure(). Обновление структуры производится в транзакции ( если сервер базы данных поддерживает работу с транзакциями ).
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ createSystables(), db() п╦ execList().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseImport().
| QStringList QDataSchema::updateStructureQuery | ( | ) |
Возвращает список запросов для обновления БД.
Список запросов формируется при выполнении verifyStructure().
| QStringList QDataSchema::verifyLog | ( | ) |
Возвращает список изменений в БД.
Список различий формируется при выполнении verifyStructure().
| void QDataSchema::verifyLogRecord | ( | QString | op, | |
| QString | value, | |||
| QString | oldvalue = "" | |||
| ) | [protected] |
Регистрирует запись изменений в БД.
Вызывается при формировании списка различий при выполнении verifyStructure(). генерирует сигнал verifyMessage().
| op | (in) операция: "+" - добавление, "-" - удаление "&" - изменение | |
| value | (in) новое значение измененяемого элемента словаря | |
| oldvalue | (in) старое значение измененяемого элемента словаря. Пустое для операций добавления и удаления. |
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ ddRecType().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ verifyStructure().
| int QDataSchema::verifyStructure | ( | ) |
Проверяет структуру текущей БД на соответствие описанной в метаданных.
Подготавливает информацию для последующего обновления.
п÷п╣я─п╣п╨я─п╣я│я┌п╫я▀п╣ я│я│я▀п╩п╨п╦ db(), ddCount(), ddCountSub(), ddIndex(), ddIndexSub(), ddRecName(), ddRecord(), ddRecSection(), driver(), fieldTypeSql(), joinLists(), nameSpace(), tableExists() п╦ verifyLogRecord().
п≤я│п©п╬п╩я▄п╥я┐п╣я┌я│я▐ п╡ databaseExport() п╦ databaseImport().
1.5.9