mirror of
https://github.com/salexdv/mysql_1c.git
synced 2024-12-12 10:03:35 +02:00
Первый коммит
This commit is contained in:
parent
2f5848760e
commit
9a406c3cef
140
README.md
140
README.md
@ -1,2 +1,140 @@
|
||||
# mysql_1c
|
||||
«Класс» для упрощения работы с MySQL из 1С. Позволяет просто выполнять любые виды запросов и получать данные в виде таблицы значений.
|
||||
«Класс» для упрощения работы с MySQL из 1С в Windows.
|
||||
Позволяет просто выполнять любые виды запросов и получать данные в виде таблицы значений.
|
||||
|
||||
## Пример получения данных
|
||||
```bsl
|
||||
// Подключение к базе данных
|
||||
ИмяODBC = "local_base";
|
||||
ИмяБазы = "base_name";
|
||||
ИмяПользователя = "base_name_user";
|
||||
Пароль = "*******";
|
||||
|
||||
MySQL = Обработки.MySQL.Создать();
|
||||
MySQL.Инициализация(ИмяODBC, ИмяБазы, ИмяПользователя, Пароль);
|
||||
|
||||
Если НЕ MySQL.УстановитьСоединение(Ложь) Тогда
|
||||
Сообщить(MySQL.ОписаниеОшибки);
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
// Получение таблицы значений и работа с ней
|
||||
Запрос =
|
||||
"SELECT order_id,
|
||||
| order_date,
|
||||
| order_summ,
|
||||
| order_customer
|
||||
|FROM tamble_orders
|
||||
|WHERE order_loaded=""N""";
|
||||
|
||||
ТаблицаЗаказов = MySQL.ПолучитьТаблицуЗначенийПоЗапросу(Запрос);
|
||||
|
||||
Если ТаблицаЗаказов = Неопределено Тогда
|
||||
Сообщить(MySQL.ОписаниеОшибки);
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТаблицаЗаказов.Количество() = 0 Тогда
|
||||
Сообщить("На сайте нет новых заказов для загрузки.");
|
||||
Иначе
|
||||
Для Каждого СтрокаТЗ ИЗ ТаблицаЗаказов Цикл
|
||||
НомерЗаказа = СтрокаТЗ.order_id;
|
||||
Покупатель = СтрокаТЗ.order_customer;
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
```
|
||||
|
||||
## Пример записи данных
|
||||
```bsl
|
||||
// Добавление новых записей в таблицу базы MySQL
|
||||
// Одиночная запись
|
||||
// Соответствие со значениями полей для новой записи таблицы
|
||||
Товар = Новый Соответствие();
|
||||
Товар["product_id"] = "158742";
|
||||
Товар["product_name"] = "1С Управление торговлей 10.3";
|
||||
Товар["product_price"] = 12000;
|
||||
|
||||
// Построение запроса
|
||||
MySQL.СоздатьЗапрос("INSERT", "table_products", Товар);
|
||||
// Выполнение
|
||||
Если НЕ MySQL.ВыполнитьЗапрос() Тогда
|
||||
Сообщить(MySQL.ОписаниеОшибки);
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
// Несколько записей
|
||||
// Массив в который вставляются соответстия
|
||||
НовыеТовары = Новый Массив();
|
||||
|
||||
Товар = Новый Соответствие();
|
||||
Товар["product_id"] = "158742";
|
||||
Товар["product_name"] = "1С Управление торговлей, редакция 10.3";
|
||||
Товар["product_price"] = 12000;
|
||||
НовыеТовары.Добавить(Товар);
|
||||
|
||||
Товар = Новый Соответствие();
|
||||
Товар["product_id"] = "158743";
|
||||
Товар["product_name"] = "1С Управление торговлей, редакция 11";
|
||||
Товар["product_price"] = 12500;
|
||||
НовыеТовары.Добавить(Товар);
|
||||
|
||||
MySQL.СоздатьЗапрос("INSERT", "table_products", НовыеТовары);
|
||||
Если НЕ MySQL.ВыполнитьЗапрос() Тогда
|
||||
Сообщить(MySQL.ОписаниеОшибки);
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
// Обновление полей записи
|
||||
// Соответствие с новыми значениями полей
|
||||
Товар = Новый Соответствие();
|
||||
Товар["product_price"] = 13000;
|
||||
Товар["product_rest"] = 10;
|
||||
|
||||
// В четвертом параметре можно указать условие, по которым осуществляется поиск записей для обновления
|
||||
MySQL.СоздатьЗапрос("UPDATE", "table_products", Товар, "WHERE product_id='158742'");
|
||||
Если НЕ MySQL.ВыполнитьЗапрос() Тогда
|
||||
Сообщить(MySQL.ОписаниеОшибки);
|
||||
Возврат Ложь;
|
||||
Иначе
|
||||
Сообщить("Обновлено товаров: " + MySQL.КоличествоИзменныхЗаписей);
|
||||
КонецЕсли;
|
||||
// Выполнение произвольного запроса
|
||||
Запрос = "DELETE FROM table_products WHERE product_id='158742'";
|
||||
|
||||
Если НЕ MySQL.ВыполнитьЗапрос(Запрос) Тогда
|
||||
Сообщить(MySQL.ОписаниеОшибки);
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
```
|
||||
|
||||
Есть возможность разбить INSERT запрос с несколькими записями на подзапросы, чтобы не вставлять за раз много значений. Например, при добавлении в таблицу более 1000 записей, можно сделать это 10-ю запросами по 100 записей в каждом. Для этого достаточно вызвать код:
|
||||
|
||||
```bsl
|
||||
MySQL.ЭлементовВЗапросе = 100;
|
||||
```
|
||||
|
||||
После этого все массивные INSERTы будут делаться по 100 записей за раз.
|
||||
Полный текст запроса можно получить так:
|
||||
|
||||
```bsl
|
||||
MySQL.СоздатьЗапрос("INSERT", "table_products", НовыеТовары);
|
||||
Сообщить(MySQL.ТекстЗапроса());
|
||||
```
|
||||
|
||||
В случае, когда прямой доступ к MySQL запрещен, можно воспользоваться ssh-туннелем. Для этого в обработке есть настройки для запуска Putty.
|
||||
|
||||
```bsl
|
||||
MySQL.ИспользоватьPutty = Истина;
|
||||
MySQL.Putty = "c:\Program Files\PuTTY\putty.exe"; // Путь к программе Putty (Kitty)
|
||||
MySQL.User_put = "ssh_user"; // Имя пользователя для установки ssh-соединения
|
||||
MySQL.Pass_put = "******"; // Пароль
|
||||
MySQL.Name_put = "session_name"; // Имя сохраненной сесии Putty с настройками соединения
|
||||
```
|
||||
|
||||
### Основные методы:
|
||||
* **Инициализация** - Первоначальная инициализация для сохранения параметров ODBC
|
||||
* **ВыполнитьТестовоеПодключение** - Тестирование соединения
|
||||
* **СоздатьЗапрос** - Создает INSERT/UPDATE/REPLACE/DELETE запросы на основе переданных параметров
|
||||
* **ВыполнитьЗапрос** - Выполнение переданного или построенного запроса
|
||||
* **ПолучитьТаблицуЗначенийПоЗапросу** - Выполняет запрос через Recordset и заполняет таблицу значений полученными данными
|
||||
* **ПолучитьМассивЗначенийПоЗапросу** - Выполняет запрос через Recordset и заполняет массив значений полученными данными
|
||||
* **ДобавитьЗапрос** - Добавляет текст запроса для выполнения в пакетном режиме
|
||||
* **ЗакрытьСоединение** - Закрывает существующее подключение к базе MySQL
|
788
src/MySQL/ObjectModule.bsl
Normal file
788
src/MySQL/ObjectModule.bsl
Normal file
@ -0,0 +1,788 @@
|
||||
Перем мСоединение;
|
||||
Перем мЗапись;
|
||||
Перем мКоманда;
|
||||
Перем мТекстЗапроса;
|
||||
Перем мМассивЗначений;
|
||||
|
||||
// Функция возвращает строку, используемую для подключения к базе MySQL
|
||||
//
|
||||
Функция ПолучитьСтрокуСоединения()
|
||||
|
||||
СтрокаСоединения = "DSN=" + СокрЛП(ODBC) + ";";
|
||||
СтрокаСоединения = СтрокаСоединения + "Database=" + СокрЛП(DB) + ";";
|
||||
СтрокаСоединения = СтрокаСоединения + "Uid=" + СокрЛП(User) + ";";
|
||||
СтрокаСоединения = СтрокаСоединения + "Pwd=" + СокрЛП(Pass) + ";";
|
||||
|
||||
Возврат СтрокаСоединения;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Функцяи создает и возвращает подключение к базе MySQL
|
||||
//
|
||||
Функция УстановитьСоединение(ТестовоеПодключение = Ложь, ВыводитьОшибку = Истина) Экспорт
|
||||
|
||||
ОписаниеОшибки = "";
|
||||
|
||||
ЗапуститьPuTTY();
|
||||
|
||||
мСоединение = Новый COMОбъект("ADODB.Connection");
|
||||
Попытка
|
||||
мСоединение.Open(ПолучитьСтрокуСоединения());
|
||||
Исключение
|
||||
ОписаниеОшибки = ОписаниеОшибки + ОписаниеОшибки() + Символы.ПС;
|
||||
Если ВыводитьОшибку Тогда
|
||||
Сообщить(ОписаниеОшибки);
|
||||
КонецЕсли;
|
||||
мСоединение = Неопределено;
|
||||
КонецПопытки;
|
||||
|
||||
Если НЕ ТестовоеПодключение Тогда
|
||||
СоздатьОбработчикЗаписей();
|
||||
СоздатьОбработчикКоманд();
|
||||
КонецЕсли;
|
||||
|
||||
Возврат (мСоединение <> Неопределено);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Процедура закрывает существующее подключение к базе MySQL
|
||||
//
|
||||
Процедура ЗакрытьСоединение() Экспорт
|
||||
|
||||
ОписаниеОшибки = "";
|
||||
|
||||
Если мСоединение <> Неопределено Тогда
|
||||
ЗакрытьОбработчикЗаписей();
|
||||
ЗакрытьОбработчикКоманд();
|
||||
мСоединение.Close();
|
||||
мСоединение = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
ЗавершитьPuTTY();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Функция выполняет простые запросы (INSERT, DELETE, UPDATE)
|
||||
// в базе MySQL
|
||||
//
|
||||
Функция ВыполнитьПростойЗапрос(ТекстЗапроса)
|
||||
|
||||
КоличествоИзменныхЗаписей = 0;
|
||||
|
||||
ОписаниеОшибки = "";
|
||||
|
||||
мКоманда.CommandText = ТекстЗапроса;
|
||||
мКоманда.CommandType = 1;
|
||||
|
||||
Попытка
|
||||
мКоманда.Execute(КоличествоИзменныхЗаписей);
|
||||
Исключение
|
||||
ОписаниеОшибки = "Не удалось выполнить запрос: " + ОписаниеОшибки();
|
||||
Возврат Ложь;
|
||||
КонецПопытки;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Выполнение переданного или построенного запроса
|
||||
//
|
||||
Функция ВыполнитьЗапрос(ТекстЗапроса = Неопределено) Экспорт
|
||||
|
||||
ОписаниеОшибки = "";
|
||||
|
||||
Если ТекстЗапроса = Неопределено Тогда
|
||||
|
||||
Если мМассивЗначений.Количество() = 0 Тогда
|
||||
|
||||
Возврат ВыполнитьПростойЗапрос(мТекстЗапроса);
|
||||
|
||||
Иначе
|
||||
|
||||
Для Каждого ЗначенияЗапроса ИЗ мМассивЗначений Цикл
|
||||
|
||||
Если НЕ ВыполнитьПростойЗапрос(СтрЗаменить(мТекстЗапроса, "&VALUES", ЗначенияЗапроса)) Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
|
||||
Возврат ВыполнитьПростойЗапрос(ТекстЗапроса);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает список полей для запросов INSERT и REPLACE
|
||||
// в формате Поле1,Поле2,ПолеN
|
||||
//
|
||||
Функция ПолучитьТекстПолейЗапроса(ЗначенияПолей)
|
||||
|
||||
Текст = "";
|
||||
|
||||
Поля = ЗначенияПолей;
|
||||
Если ТипЗнч(Поля) = Тип("Массив") Тогда
|
||||
Поля = ЗначенияПолей[0];
|
||||
ИначеЕсли ТипЗнч(Поля) = Тип("ТаблицаЗначений") Тогда
|
||||
Колонки = Новый Соответствие();
|
||||
Для Каждого Колонка ИЗ Поля.Колонки Цикл
|
||||
Колонки[Колонка.Имя] = Истина;
|
||||
КонецЦикла;
|
||||
Поля = Колонки;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Обход ИЗ Поля Цикл
|
||||
Текст = Текст + Обход.Ключ + ",";
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Лев(Текст, СтрДлина(Текст) - 1);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает текст для UPDATE запроса с именами и значениями полей в виде
|
||||
// ИмяПоля1=ЗначениеПоля1,ИмяПоля2=ЗначениеПоля2
|
||||
//
|
||||
Функция ПолучитьТекстДляЗапросаОбновления(ЗначенияПолей)
|
||||
|
||||
Текст = "";
|
||||
|
||||
НомерПоля = 0;
|
||||
|
||||
Для Каждого Обход ИЗ ЗначенияПолей Цикл
|
||||
|
||||
НомерПоля = НомерПоля + 1;
|
||||
|
||||
Текст = Текст + Обход.Ключ + "='" + Обход.Значение + "'";
|
||||
|
||||
Если НомерПоля < ЗначенияПолей.Количество() Тогда
|
||||
Текст = Текст + "," + Символы.ПС;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Текст;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Заполняет массив со значениями полей для запросов INSERT и REPLACE
|
||||
// Массив хранит значения в виде (ЗначенияПоля1,ЗначенияПоля2,ЗначенияПоляN),
|
||||
// (ЗначенияПоля1,ЗначенияПоля2,ЗначенияПоляN), (ЗначенияПоля1,ЗначенияПоля2,ЗначенияПоляN)
|
||||
// В массив значения записываются в количестве ЭлементовВОдномЗапросе
|
||||
//
|
||||
Функция ПодготовитьЗначенияЗапроса(ЗначенияПолей, ЭлементовВОдномЗапросе)
|
||||
|
||||
Значения = ЗначенияПолей;
|
||||
|
||||
Если ТипЗнч(Значения) <> Тип("ТаблицаЗначений") Тогда
|
||||
|
||||
Если ТипЗнч(Значения) = Тип("Соответствие") Тогда
|
||||
Значения = Новый Массив();
|
||||
Значения.Добавить(ЗначенияПолей);
|
||||
КонецЕсли;
|
||||
|
||||
Текст = "";
|
||||
НомерЗначения = 0;
|
||||
ВсегоЗначений = Значения.Количество();
|
||||
|
||||
Для Каждого Значение ИЗ Значения Цикл
|
||||
|
||||
НомерЗначения = НомерЗначения + 1;
|
||||
|
||||
Текст = Текст + "(";
|
||||
|
||||
ТекстЗначений = "";
|
||||
Для Каждого Обход ИЗ Значение Цикл
|
||||
ТекстЗначений = ТекстЗначений + "'" + Обход.Значение + "',";
|
||||
КонецЦикла;
|
||||
|
||||
Текст = Текст + Лев(ТекстЗначений, СтрДлина(ТекстЗначений) - 1) + ")";
|
||||
|
||||
Если ЭлементовВОдномЗапросе > 0 И НомерЗначения % ЭлементовВОдномЗапросе = 0 Тогда
|
||||
мМассивЗначений.Добавить(Текст);
|
||||
Текст = "";
|
||||
КонецЕсли;
|
||||
|
||||
Если НомерЗначения < ВсегоЗначений И ЗначениеЗаполнено(Текст) Тогда
|
||||
Текст = Текст + "," + Символы.ПС;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Иначе
|
||||
|
||||
Колонки = Новый Соответствие();
|
||||
|
||||
Для Каждого Колонка ИЗ Значения.Колонки Цикл
|
||||
Колонки[Колонка.Имя] = Истина
|
||||
КонецЦикла;
|
||||
|
||||
Текст = "";
|
||||
НомерЗначения = 0;
|
||||
ВсегоЗначений = Значения.Количество();
|
||||
|
||||
Для Каждого Значение ИЗ Значения Цикл
|
||||
|
||||
НомерЗначения = НомерЗначения + 1;
|
||||
|
||||
Текст = Текст + "(";
|
||||
|
||||
ТекстЗначений = "";
|
||||
Для Каждого Колонка ИЗ Колонки Цикл
|
||||
ТекстЗначений = ТекстЗначений + "'" + Значение[Колонка.Ключ] + "',";
|
||||
КонецЦикла;
|
||||
|
||||
Текст = Текст + Лев(ТекстЗначений, СтрДлина(ТекстЗначений) - 1) + ")";
|
||||
|
||||
Если ЭлементовВОдномЗапросе > 0 И НомерЗначения % ЭлементовВОдномЗапросе = 0 Тогда
|
||||
мМассивЗначений.Добавить(Текст);
|
||||
Текст = "";
|
||||
КонецЕсли;
|
||||
|
||||
Если НомерЗначения < ВсегоЗначений И ЗначениеЗаполнено(Текст) Тогда
|
||||
Текст = Текст + "," + Символы.ПС;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(Текст) Тогда
|
||||
мМассивЗначений.Добавить(Текст);
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает текст запроса, созданного функцией СоздатьЗапрос
|
||||
//
|
||||
Функция ТекстЗапроса() Экспорт
|
||||
|
||||
Если мМассивЗначений.Количество() = 0 Тогда
|
||||
|
||||
Возврат мТекстЗапроса;
|
||||
|
||||
Иначе
|
||||
|
||||
ТекстЗначений = "";
|
||||
НомерЗначения = 0;
|
||||
|
||||
Для Каждого Значения ИЗ мМассивЗначений Цикл
|
||||
|
||||
НомерЗначения = НомерЗначения + 1;
|
||||
ТекстЗначений = ТекстЗначений + Значения;
|
||||
|
||||
Если НомерЗначения < мМассивЗначений.Количество() Тогда
|
||||
ТекстЗначений = ТекстЗначений + "," + Символы.ПС;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СтрЗаменить(мТекстЗапроса, "&VALUES", ТекстЗначений);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Создает текст запроса INSERT, REPLACE, UPDATE на основе переданных
|
||||
// параметров
|
||||
//
|
||||
Функция СоздатьЗапрос(ТипЗапроса = "INSERT", ИмяТаблицы, ЗначенияПолей, Условие = "", ЭлементовВОдномЗапросе = 0) Экспорт
|
||||
|
||||
ОписаниеОшибки = "";
|
||||
|
||||
мМассивЗначений = Новый Массив();
|
||||
|
||||
Если ЭлементовВОдномЗапросе = 0 Тогда
|
||||
ЭлементовВОдномЗапросе = ЭлементовВЗапросе;
|
||||
КонецЕсли;
|
||||
|
||||
ТипЗапроса = СокрЛП(ВРЕГ(ТипЗапроса));
|
||||
ИмяТаблицы = СокрЛП(ИмяТаблицы);
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ИмяТаблицы) Тогда
|
||||
ОписаниеОшибки = "Не указано имя таблицы";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗапроса <> "DELETE" Тогда
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ЗначенияПолей) Тогда
|
||||
ОписаниеОшибки = "Не заданы значения полей";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(ЗначенияПолей) <> Тип("Соответствие")
|
||||
И ТипЗнч(ЗначенияПолей) <> Тип("Структура")
|
||||
И ТипЗнч(ЗначенияПолей) <> Тип("Массив")
|
||||
И ТипЗнч(ЗначенияПолей) <> Тип("ТаблицаЗначений") Тогда
|
||||
ОписаниеОшибки = "Значения полей имеют неверный тип";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗапроса = "UPDATE" И (ТипЗнч(ЗначенияПолей) <> Тип("Соответствие") И ТипЗнч(ЗначенияПолей) <> Тип("Структура")) Тогда
|
||||
ОписаниеОшибки = "Для данного типа запроса в качестве значений полей можно передавать только соответствие или структуру";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначенияПолей.Количество() = 0 Тогда
|
||||
ОписаниеОшибки = "Передан пустой список полей";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗапроса = "INSERT" ИЛИ ТипЗапроса = "REPLACE" Тогда
|
||||
|
||||
мТекстЗапроса = ТипЗапроса + " INTO " + ИмяТаблицы + Символы.ПС;
|
||||
мТекстЗапроса = мТекстЗапроса + "(" + ПолучитьТекстПолейЗапроса(ЗначенияПолей) + ")" + Символы.ПС;
|
||||
мТекстЗапроса = мТекстЗапроса + " VALUES &VALUES" + Символы.ПС;
|
||||
|
||||
ПодготовитьЗначенияЗапроса(ЗначенияПолей, ЭлементовВОдномЗапросе);
|
||||
|
||||
ИначеЕсли ТипЗапроса = "UPDATE" Тогда
|
||||
|
||||
мТекстЗапроса = "UPDATE " + ИмяТаблицы + " SET " + Символы.ПС;
|
||||
мТекстЗапроса = мТекстЗапроса + ПолучитьТекстДляЗапросаОбновления(ЗначенияПолей);
|
||||
|
||||
ИначеЕсли ТипЗапроса = "DELETE" Тогда
|
||||
|
||||
мТекстЗапроса = "DELETE FROM " + ИмяТаблицы;
|
||||
|
||||
Иначе
|
||||
|
||||
ОписаниеОшибки = "Неизвестный тип запроса";
|
||||
Возврат Ложь;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗапроса = "UPDATE" ИЛИ ТипЗапроса = "DELETE" Тогда
|
||||
|
||||
Если ЗначениеЗаполнено(Условие) Тогда
|
||||
мТекстЗапроса = мТекстЗапроса + Символы.ПС + Условие;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Добавляет текст запроса для выполнения в пакетном режиме
|
||||
//
|
||||
Функция ДобавитьЗапрос(Запрос) Экспорт
|
||||
|
||||
ТекстЗапроса = СокрЛП(Запрос);
|
||||
|
||||
Если Прав(ТекстЗапроса, 1) <> ";" Тогда
|
||||
ТекстЗапроса = ТекстЗапроса + ";";
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(мТекстЗапроса) Тогда
|
||||
мТекстЗапроса = мТекстЗапроса + Символы.ПС;
|
||||
КонецЕсли;
|
||||
|
||||
мТекстЗапроса = мТекстЗапроса + ТекстЗапроса;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Функция выполняет запрос через Recordset и заполняет таблицу
|
||||
// значений полученными данными
|
||||
//
|
||||
Функция ПолучитьТаблицуЗначенийПоЗапросу(ТекстЗапроса) Экспорт
|
||||
|
||||
ОписаниеОшибки = "";
|
||||
|
||||
ТаблицаЗначений = Неопределено;
|
||||
|
||||
Если мЗапись <> Неопределено Тогда
|
||||
|
||||
Попытка
|
||||
мЗапись.Open(ТекстЗапроса);
|
||||
Исключение
|
||||
ОписаниеОшибки = ОписаниеОшибки();
|
||||
Возврат Неопределено
|
||||
КонецПопытки;
|
||||
|
||||
ТаблицаЗначений = Новый ТаблицаЗначений();
|
||||
|
||||
ИменаПолей = Новый Массив();
|
||||
Для Каждого Field ИЗ мЗапись.Fields Цикл
|
||||
ИменаПолей.Добавить(Field.Name);
|
||||
ТаблицаЗначений.Колонки.Добавить(Field.Name);
|
||||
КонецЦикла;
|
||||
|
||||
Если мЗапись.EOF() И мЗапись.BOF() Тогда
|
||||
// Нет записей в запросе
|
||||
Иначе
|
||||
|
||||
Попытка
|
||||
|
||||
// Считываем информацию из выборки
|
||||
мЗапись.MoveFirst();
|
||||
|
||||
Пока НЕ мЗапись.EOF() Цикл
|
||||
|
||||
СтрокаТЗ = ТаблицаЗначений.Добавить();
|
||||
Для Каждого Поле ИЗ ИменаПолей Цикл
|
||||
СтрокаТЗ[Поле] = мЗапись.Fields.Item(Поле).Value;
|
||||
КонецЦикла;
|
||||
|
||||
мЗапись.MoveNext();
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Исключение
|
||||
|
||||
ОписаниеОшибки = ОписаниеОшибки();
|
||||
ТаблицаЗначений = Неопределено
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗакрытьОбработчикЗаписей();
|
||||
|
||||
Иначе
|
||||
|
||||
ОписаниеОшибки = "Невозможно выполнить запрос т.к. нет активного соединения";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ТаблицаЗначений;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Функция выполняет запрос через Recordset и заполняет массив
|
||||
// значений полученными данными
|
||||
//
|
||||
Функция ПолучитьМассивЗначенийПоЗапросу(ТекстЗапроса, ИмяПоля = Неопределено) Экспорт
|
||||
|
||||
ОписаниеОшибки = "";
|
||||
|
||||
МассивЗначений = Неопределено;
|
||||
|
||||
Если мЗапись <> Неопределено Тогда
|
||||
|
||||
Попытка
|
||||
мЗапись.Open(ТекстЗапроса);
|
||||
Исключение
|
||||
ОписаниеОшибки = ОписаниеОшибки();
|
||||
Возврат Неопределено
|
||||
КонецПопытки;
|
||||
|
||||
МассивЗначений = Новый Массив();
|
||||
|
||||
Если мЗапись.EOF() И мЗапись.BOF() Тогда
|
||||
// Нет записей в запросе
|
||||
Иначе
|
||||
|
||||
Попытка
|
||||
|
||||
// Считываем информацию из выборки
|
||||
мЗапись.MoveFirst();
|
||||
|
||||
Пока НЕ мЗапись.EOF() Цикл
|
||||
Поле = ?(ИмяПоля = Неопределено, 0, ИмяПоля);
|
||||
МассивЗначений.Добавить(мЗапись.Fields.Item(Поле).Value);
|
||||
мЗапись.MoveNext();
|
||||
КонецЦикла;
|
||||
|
||||
Исключение
|
||||
|
||||
ОписаниеОшибки = ОписаниеОшибки();
|
||||
МассивЗначений = Неопределено
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗакрытьОбработчикЗаписей();
|
||||
|
||||
Иначе
|
||||
|
||||
ОписаниеОшибки = "Невозможно выполнить запрос т.к. нет активного соединения";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат МассивЗначений;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьЗаписьТаблицыПоСтруктуре(СтруктураДанных) Экспорт
|
||||
|
||||
Ошибка = Ложь;
|
||||
|
||||
ИмяТаблицы = Неопределено;
|
||||
|
||||
СтруктураДанных.Свойство("ИмяТаблицы", ИмяТаблицы);
|
||||
|
||||
Если ЗначениеЗаполнено(ИмяТаблицы) Тогда
|
||||
|
||||
Record = New COMОбъект("ADODB.RecordSet");
|
||||
|
||||
Попытка
|
||||
|
||||
Record.Open(ИмяТаблицы, мСоединение, 0, 4, 2);
|
||||
Record.AddNew();
|
||||
|
||||
Для Каждого Обход ИЗ СтруктураДанных Цикл
|
||||
|
||||
Если Обход.Ключ <> "ИмяТаблицы" Тогда
|
||||
|
||||
ЗначениеПоля = Обход.Значение;
|
||||
|
||||
Если ТипЗнч(ЗначениеПоля) = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
ВремФайл = ПолучитьИмяВременногоФайла("bin");
|
||||
ЗначениеПоля.Записать(ВремФайл);
|
||||
|
||||
Stream = Новый COMОбъект("ADODB.Stream");
|
||||
Stream.Type = 1; // Bynary data
|
||||
Stream.Open();
|
||||
|
||||
Попытка
|
||||
Stream.LoadFromFile(ВремФайл);
|
||||
Исключение
|
||||
Ошибка = Истина;
|
||||
ОписаниеОшибки = "Не получить двоичные данные для записи:" + Символы.ПС + ОписаниеОшибки();
|
||||
КонецПопытки;
|
||||
|
||||
Если НЕ Ошибка Тогда
|
||||
Record.Fields(Обход.Ключ).Value = Stream.Read();
|
||||
Stream.Close();
|
||||
КонецЕсли;
|
||||
|
||||
Stream = Неопределено;
|
||||
|
||||
ИначеЕсли ТипЗнч(ЗначениеПоля) <> Тип("Число") Тогда
|
||||
|
||||
Record.Fields(Обход.Ключ).Value = Строка(ЗначениеПоля);
|
||||
|
||||
Иначе
|
||||
|
||||
Record.Fields(Обход.Ключ).Value = ЗначениеПоля;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Record.UpdateBatch();
|
||||
Record.Close();
|
||||
|
||||
Исключение
|
||||
|
||||
ОписаниеОшибки = ОписаниеОшибки();
|
||||
Ошибка = Истина;
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
Иначе
|
||||
|
||||
ОписаниеОшибки = "Не задано имя таблицы";
|
||||
Ошибка = Истина;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат НЕ Ошибка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Функция выполняет проверку соединения с базой MySQL
|
||||
// Возвращает Истина в случае успешного соединения
|
||||
// Ложь - если соединение не было установлено
|
||||
//
|
||||
Функция ВыполнитьТестовоеПодключение(ВыводитьОшибку = Истина) Экспорт
|
||||
|
||||
ОписаниеОшибки = "";
|
||||
|
||||
ПодключениеСоздано = УстановитьСоединение(ВыводитьОшибку);
|
||||
|
||||
ЗакрытьСоединение();
|
||||
|
||||
Возврат ПодключениеСоздано;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Функция возвращает объект "ADODB.Recordset",
|
||||
// связанный с текущим соединением
|
||||
//
|
||||
Функция ПолучитьОбработчикЗаписей()
|
||||
|
||||
Если мСоединение <> Неопределено Тогда
|
||||
Recordset = Новый COMОбъект("ADODB.Recordset");
|
||||
Recordset.ActiveConnection = мСоединение;
|
||||
Возврат Recordset;
|
||||
Иначе
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Создает глобальный объект "ADODB.Recordset",
|
||||
// связанный с текущим соединением
|
||||
//
|
||||
Функция СоздатьОбработчикЗаписей()
|
||||
|
||||
мЗапись = ПолучитьОбработчикЗаписей();
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Закрывает объект "ADODB.Recordset"
|
||||
//
|
||||
Функция ЗакрытьОбработчикЗаписей()
|
||||
|
||||
Попытка
|
||||
мЗапись.Close();
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Функция возвращает объект "ADODB.Command",
|
||||
// связанный с текущим соединением
|
||||
//
|
||||
Функция ПолучитьОбработчикКоманд()
|
||||
|
||||
Если мСоединение <> Неопределено Тогда
|
||||
Command = Новый COMОбъект("ADODB.Command");
|
||||
Command.ActiveConnection = мСоединение;
|
||||
Возврат Command;
|
||||
Иначе
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Создает глобальный объект "ADODB.Command",
|
||||
// связанный с текущим соединением
|
||||
//
|
||||
Функция СоздатьОбработчикКоманд()
|
||||
|
||||
мКоманда = ПолучитьОбработчикКоманд();
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Закрывает объект "ADODB.Command"
|
||||
//
|
||||
Функция ЗакрытьОбработчикКоманд()
|
||||
|
||||
мКоманда = Неопределено;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Проверка реквизитов перед подключением
|
||||
//
|
||||
Функция РеквизитыСоединенияЗаполнены() Экспорт
|
||||
|
||||
ОписаниеОшибки = "";
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ODBC) Тогда
|
||||
ОписаниеОшибки = "Не указано имя источника ODBC";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(DB) Тогда
|
||||
ОписаниеОшибки = "Не указано имя базы данных";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(User) Тогда
|
||||
ОписаниеОшибки = "Не указано имя пользователя";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Pass) Тогда
|
||||
ОписаниеОшибки = "Не указан пароль пользователя";
|
||||
//Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если ИспользоватьPutty Тогда
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Putty) Тогда
|
||||
ОписаниеОшибки = "Не указан путь к программе plink";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Name_put) Тогда
|
||||
ОписаниеОшибки = "Не указано имя настройки PuTTY";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(User_put) Тогда
|
||||
ОписаниеОшибки = "Не указано имя пользователя PuTTY";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Pass_put) Тогда
|
||||
ОписаниеОшибки = "Не указано пароль пользователя PuTTY";
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Истина;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Запуск putty
|
||||
//
|
||||
Процедура ЗапуститьPuTTY()
|
||||
|
||||
Если ИспользоватьPutty Тогда
|
||||
|
||||
Если Задержка_put = 0 Тогда
|
||||
Задержка_put = 5;
|
||||
КонецЕсли;
|
||||
|
||||
ЗапуститьПриложение(Putty + " -load " + Name_put + " -l " + User_put + " -pw " + Pass_put);
|
||||
|
||||
ТекДата = ТекущаяДата();
|
||||
Пока ТекущаяДата() - ТекДата < Задержка_put Цикл
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Закрытие putty
|
||||
//
|
||||
Процедура ЗавершитьPuTTY()
|
||||
|
||||
Если ИспользоватьPutty Тогда
|
||||
ЗапуститьПриложение("taskkill /IM plink.exe");
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Установка параметров соединения
|
||||
//
|
||||
Процедура Инициализация(ИмяODBC, ИмяБазы, ИмяПользователя, Пароль) Экспорт
|
||||
|
||||
ОписаниеОшибки = "";
|
||||
мМассивЗначений = Новый Массив();
|
||||
мТекстЗапроса = "";
|
||||
|
||||
ODBC = СокрЛП(ИмяODBC);
|
||||
DB = СокрЛП(ИмяБазы);
|
||||
User = СокрЛП(ИмяПользователя);
|
||||
Pass = СокрЛП(Пароль);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Очищает текст запроса
|
||||
//
|
||||
Процедура ОчиститьТекстЗапроса() Экспорт
|
||||
|
||||
мТекстЗапроса = "";
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
мМассивЗначений = Новый Массив();
|
||||
мТекстЗапроса = "";
|
1
src/MySQL/maps.txt
Normal file
1
src/MySQL/maps.txt
Normal file
@ -0,0 +1 @@
|
||||
|
7
src/MySQL/renames.txt
Normal file
7
src/MySQL/renames.txt
Normal file
@ -0,0 +1,7 @@
|
||||
02c0fdaf-dc46-418d-8473-8e8995a21409-->und\02c0fdaf-dc46-418d-8473-8e8995a21409
|
||||
2eca2134-e84c-47c6-92de-38ec8adca96e.0\info-->und\2eca2134-e84c-47c6-92de-38ec8adca96e.0\info
|
||||
2eca2134-e84c-47c6-92de-38ec8adca96e.0\text-->ObjectModule.bsl
|
||||
copyinfo-->und\copyinfo
|
||||
root-->und\root
|
||||
version-->und\version
|
||||
versions-->und\versions
|
291
src/MySQL/und/02c0fdaf-dc46-418d-8473-8e8995a21409
Normal file
291
src/MySQL/und/02c0fdaf-dc46-418d-8473-8e8995a21409
Normal file
@ -0,0 +1,291 @@
|
||||
{1,
|
||||
{02c0fdaf-dc46-418d-8473-8e8995a21409},1,
|
||||
{c3831ec8-d8d5-4f93-8a22-f9bfae07327f,
|
||||
{1,
|
||||
{4,0bc46fda-064b-4d30-bb35-46e4b6be1a28,b65468d6-edc4-46e8-b3ee-6c6ce4221770,
|
||||
{0,
|
||||
{0,
|
||||
{0,0,2eca2134-e84c-47c6-92de-38ec8adca96e},"MySQL",
|
||||
{1,"ru","My SQL"},""}
|
||||
},00000000-0000-0000-0000-000000000000,"",00000000-0000-0000-0000-000000000000},4,
|
||||
{2bcef0d1-0981-11d6-b9b8-0050bae0a95d,0},
|
||||
{3daea016-69b7-4ed4-9453-127911372fe6,0},
|
||||
{d5b0e5ed-256d-401c-9c36-f630cafd8a62,0},
|
||||
{ec6bb5e5-b7a8-4d75-bec9-658107a699cf,13,
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,855bf9d9-26d1-4750-a3da-8afdcbaa7ba7},"ODBC",
|
||||
{1,"ru","Имя источника ODBC"},""},
|
||||
{"Pattern",
|
||||
{"S",50,1}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,9dd26e26-d7b6-4e39-b6ea-2eed8fae714c},"DB",
|
||||
{1,"ru","Имя базы данных"},""},
|
||||
{"Pattern",
|
||||
{"S",50,1}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,2c2e9942-3321-4f7b-b41c-a41ba5a98625},"User",
|
||||
{1,"ru","Имя пользователя"},""},
|
||||
{"Pattern",
|
||||
{"S",50,1}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,812f3e70-5004-4381-8cd6-e2ccf8b5055f},"Pass",
|
||||
{1,"ru","Пароль"},""},
|
||||
{"Pattern",
|
||||
{"S",50,1}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,9c17d9a4-bc82-4b93-9559-0e469aafe164},"Putty",
|
||||
{1,"ru","Putty"},""},
|
||||
{"Pattern",
|
||||
{"S"}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,146e43ce-eeb5-444b-9620-ea958d51586a},"User_put",
|
||||
{1,"ru","User put"},""},
|
||||
{"Pattern",
|
||||
{"S",50,1}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,73a436cc-79f9-448d-a065-cda2a4858f9c},"Pass_put",
|
||||
{1,"ru","Pass put"},""},
|
||||
{"Pattern",
|
||||
{"S",50,1}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,8d1272f7-8edc-461a-af40-5ea882808d9a},"ИспользоватьPutty",
|
||||
{1,"ru","Использовать putty"},""},
|
||||
{"Pattern",
|
||||
{"B"}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,07471886-c2ce-4419-a477-990425a9c0b5},"Name_put",
|
||||
{1,"ru","Name put"},""},
|
||||
{"Pattern",
|
||||
{"S",50,1}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,e60689c5-c914-4047-8742-e3a9cb75ea21},"Задержка_put",
|
||||
{1,"ru","Задержка put"},""},
|
||||
{"Pattern",
|
||||
{"N",2,0,1}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,5ae1319d-4b65-4e9a-b293-117937b409bd},"ОписаниеОшибки",
|
||||
{1,"ru","Описание ошибки"},""},
|
||||
{"Pattern",
|
||||
{"S"}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,f3fbe5ab-e349-4420-acff-092e9a54cee7},"ЭлементовВЗапросе",
|
||||
{1,"ru","Элементов в запросе"},""},
|
||||
{"Pattern",
|
||||
{"N",5,0,1}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0},
|
||||
{
|
||||
{0,
|
||||
{25,
|
||||
{2,
|
||||
{0,
|
||||
{0,0,6c552ca2-6b18-4c1b-800e-c99171053e7f},"КоличествоИзменныхЗаписей",
|
||||
{1,"ru","Количество изменных записей"},""},
|
||||
{"Pattern",
|
||||
{"N",10,0,0}
|
||||
}
|
||||
},0,
|
||||
{0},
|
||||
{0},0,"",0,
|
||||
{"U"},
|
||||
{"U"},0,00000000-0000-0000-0000-000000000000,2,0,
|
||||
{5004,0},
|
||||
{3,0,0},
|
||||
{0,0},0,
|
||||
{0},
|
||||
{"S",""},0}
|
||||
},0}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
{3,1,0,"",0}
|
7
src/MySQL/und/copyinfo
Normal file
7
src/MySQL/und/copyinfo
Normal file
@ -0,0 +1,7 @@
|
||||
{4,
|
||||
{0},
|
||||
{0},
|
||||
{0},
|
||||
{0,0},
|
||||
{0}
|
||||
}
|
1
src/MySQL/und/root
Normal file
1
src/MySQL/und/root
Normal file
@ -0,0 +1 @@
|
||||
{2,02c0fdaf-dc46-418d-8473-8e8995a21409,}
|
3
src/MySQL/und/version
Normal file
3
src/MySQL/und/version
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
{216,0}
|
||||
}
|
1
src/MySQL/und/versions
Normal file
1
src/MySQL/und/versions
Normal file
@ -0,0 +1 @@
|
||||
{1,7,"02c0fdaf-dc46-418d-8473-8e8995a21409",fd5ec58e-6ca0-42d7-aed4-eadabcda8925,"root",90379935-d3b5-40a1-b764-747314843385,"",0af3b619-528c-481e-80a5-9e023d7bec2c,"2eca2134-e84c-47c6-92de-38ec8adca96e.0",55e4eecd-b131-4425-a54c-0fc46f459fe0,"copyinfo",3470c372-75a6-484c-a87a-7ee754d5abb0,"versions",efeb2d2b-9c26-406c-bc34-344e9887c4cc,"version",b11151a7-b255-497f-a7ba-68694effec0c}
|
Loading…
Reference in New Issue
Block a user