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_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