gifts2017

MySQLConnect

Опубликовал Александр Зорий (aszoriy) в раздел Обмен - Обмен с другими системами

Обработка предназначена для работы с MySQL.

Обработка предназначена для лёгкой и удобной работы с MySQL.

обновление: 27.03.2013

  1. Добавлена функция ОтправитьДанныеПоСтруктуреСДанными()
    В случае, когда нужно передать сразу много таблиц, заполняется структура
    ключ - имя таблицы
    значение - сама таблица и передается в качестве параметра в функцию.
  2. Для функции ОтправитьДанныеПоПодготовленнойТаблице() появился не обязательный параметр ИгнорироватьДубли.
    Данный параметр позволяет подавлять ошибку вставки не уникальных строк (т.е. если в приемнике уже есть такая строка, то строка будет просто пропущена). Уникальность проверяется по ключевым полям (конструкция IGNORE).

обновлено: 21.12.2012

Существенно увеличена скорость получения больших таблиц с помощью функции ПолучитьТаблицуРезультатПоЗапросу()


обновлено: 12.12.2012

Исправлена мелкая ошибка:

Функция

__ОбновитьТаблицуКлючевыъПолей()  - ошибочно отнесена к экпортным.

ОбновитьТаблицуКлючевыхПолей() - исправлено имя функции.

 

обновлено: 10.12.2012

Исправлено:

ошибка исполнения, если вызов функции работы с БД осуществлялся до вызова функции УстановитьПараметрыПодключения()

Добавлено:

1. СоздатьБД(ИмяБД)

2. ТестПодключения()

3. УдалитьБД(ИмяБД)



Возможности:

  1. Получение данных
    • получить таблицу значений по запросу типа «select»
  2. Отправка данных таблицы значений
    • отправка данных в таблицу MySQL по данным переданной таблицы значений
  3. Удаление данных
    • удаление данных в таблице MySQL по данным переданной таблицы значений
  4. Вспомогательные возможности
    • получить список баз сервера MySQL
    • получить список таблиц базы MySQL
    • получить список таблиц базы MySQL с размером таблицы и количеством строк
    • получить структуру, содержащую все (или выборочно) таблицы базы MySQL
  5. Выполнение произвольного запроса

Для подключения в системе должен быть установлен ODBC драйвер.

Пример 1:

Дано:
Ip сервера = 10.0.0.1
База = mysql
Пользователь = root
Пароль = pass
Задача: Получить данные таблицы ‘proc’

обMySQLConnect = Обработки.MySQLConnect.Создать();

ПараметрыПодключения = новый Структура;
ПараметрыПодключения.Вставить("Сервер"      , "10.0.0.1");
ПараметрыПодключения.Вставить("Пользователь", "root");
ПараметрыПодключения.Вставить("Пароль"      , "pass");
ПараметрыПодключения.Вставить("База"        , "mysql");
	
обMySQLConnect.УстановитьПараметрыПодключения(ПараметрыПодключения);	

ТаблицаРезультат = новый таблицаЗначений;

Запрос = "«SELECT * FROM proc»";

Если обMySQLConnect. ПолучитьТаблицуРезультатПоЗапросу(Запрос, ТаблицаРезультат) Тогда 	
	// ТаблицаРезультат содержит нужные данные - обрабатываем 	
Иначе 	
	
Сообщить(обMySQLConnect. ПолучитьОписаниеОшибки ()); КонецЕсли;


Пример 2: Необходимо передать данные о ценах в таблицу "ShopPrices" на MySQL сервер.

Таблица  ShopPrices содержит следующие поля: Shop_ip, Nom_id, Price.


Функция ПолучитьДанныеПоЦенам()
    
    ДанныеДляОтправки = новый ТаблицаЗначений;
    ДанныеДляОтправки.Колонки.Добавить("Shop_ip");
    ДанныеДляОтправки.Колонки.Добавить("Nom_id");
    ДанныеДляОтправки.Колонки.Добавить("Price");

    НСтрока = ДанныеДляОтправки.Добавить();
    НСтрока.Shop_ip = "1002";
    НСтрока.Nom_id  = "f0013";
    НСтрока.Price      = "1500";
    НСтрока = ДанныеДляОтправки.Добавить();
    НСтрока.Shop_ip = "1002";
    НСтрока.Nom_id  = "f0014";
    НСтрока.Price      = "950";    возврат ДанныеДляОтправки;
    
КонецФункции 

Процедура ОтправитьДанные()
    
    ИмяТаблицы             = "ShopPrices";
    ДанныеДляОтправки    = ПолучитьДанныеПоЦенам();
        
    обMySQLConnect = Обработки.MySQLConnect.Создать();

    ПараметрыПодключения = новый Структура;
    ПараметрыПодключения.Вставить("Сервер"       , "10.0.0.1");
    ПараметрыПодключения.Вставить("Пользователь", "root");
    ПараметрыПодключения.Вставить("Пароль"       , "pass");
    ПараметрыПодключения.Вставить("База"         , "mysql");
        
    обMySQLConnect.УстановитьПараметрыПодключения(ПараметрыПодключения);    

    Если Не обMySQLConnect.ОтправитьДанныеПоПодготовленнойТаблице(ДанныеОтправки, ИмяТаблицы) Тогда     
        
        Сообщить(обMySQLConnect. ПолучитьОписаниеОшибки ());
        
    КонецЕсли;
    
КонецПроцедуры; 

Функция "ОтправитьДанныеПоПодготовленнойТаблице" автоматически разбивает данные на порции по 1000 строк (параметр настраивается).

 

Более подробную информацию можно посмотреть в комментариях кода обработки.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
MySQLConnect
.epf 15,62Kb
27.03.13
73
.epf 15,62Kb 73 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Владимир Гусев (adhocprog) 05.12.12 12:51
Этот код можно использовать для чтения баз MySQL на хостинге?
2. Александр Зорий (aszoriy) 05.12.12 13:21
Я использую для работы с локальным MySQL, но никакой особой разницы нет.

Если Вам понадобиться для подключения указать какую-нибудь хитрую строку подключения, то никаких проблем.

Вы можете передать в функцию УстановитьПараметрыПодключения() непосредственно строку подключения (вторым параметром, первый в таком случае указывать не обязательно).

Обращаю Ваше внимание, что колонки ТЗ типизированные (строка(1024)) т.е. полученную таблицу можно использовать в качестве параметра запроса.
3. Антон Стеклов (asved.ru) 12.12.12 06:22
Полезная штука, применял подобное в процессе прикрутки 7.7 к asterisk.
4. Александр Зорий (aszoriy) 12.12.12 07:45
Я использую для работы с кассовым сервером УКМ4.
5. Al (al_zzz) 12.12.12 07:57
Я подобную обработку делал для 7.7 и joomshoping: 1с77-1c8x.ru. А недавно перешел на 8.1 и сейчас как раз задача стоит по настройке обмена с сайтом. Вовремя Ваша разработка здесь появилась! Спасибо!
6. Александр Зорий (aszoriy) 12.12.12 08:17
Пользуйтесь. Будут вопросы/пожелания готов помочь :)
7. АНДРЕЙ Фамилия (MegaMouse) 12.12.12 14:08
Тема интересная, но пишу тут только для подписки на тему . Сорри.
8. Вадим Миляев (PrinzOfMunchen) 29.06.13 20:36
(6) aszoriy, а не пробовали под Linux?
9. Александр Зорий (aszoriy) 29.06.13 23:08
(8) неа, но работать под linux без допила (или перепила) не будет. Это факт.
10. Олег Осипов (plastilin) 16.02.14 17:15
11. cooller Пропелирович (coollerinc) 24.10.14 16:33
Пригодилось, когда стали внедрять УКМ 4
12. Александр Зорий (aszoriy) 24.10.14 17:04
(11) coollerinc, выражаю свое глубочайшее соболезнование!
Компании с таким скотским отношением к клиентам как "Сервис+" с ее "УКМ4" стоит еще поискать.

огромное количество ошибок, крайне низкое знание своего продукта тех. поддержкой, релизы выпускают так, что вообще ничего не работает.

Наше желание в матрице скидок сравнивать % скидки (а не сумму вычисленную, зависящую от порядка применения скидок при последовательном применении) назвали "порочным". Так и написали нам (!) "Ваше желание порочно и мы не будем его реализовывать".

Наше желание получить скидку вида "Номер карты - %скидки" - по их словам "взорвало им мозг"

За доработку, которая бы предупреждала продавца о том, что он пытается применить 100% скидку запросили 200 т.р. - и еще по 100 т.р. за перенос этой доработки в каждый следующий релиз.

Если чек которым продается подарочная карта АННУЛИРОВАТЬ, то карта все равно АКТИВИРУЕТСЯ т.е. ею можно расплатиться. Что на это тех. поддержка ответила? "Не обращайте внимания, у нас таких ошибок много"

и много много много чего еще. Один сплошной негатив.
13. Sasha S (fillipok) 14.12.14 21:51
(12) aszoriy, спасибо за обработку. А можно ли сделать обновление данных ? Добавление и удаление нашел. Спасибо.
14. Александр Зорий (aszoriy) 15.12.14 07:47
(13) fillipok, обновление данных, к сожалению, не реализовано (в прямом виде).

Сейчас есть два варианта обновления данных:
1. Вы можете выполнять обновление путем удаление данных (УдалитьДанныеПоПодготовленнойТаблице), а потом вставки новых (ОтправитьДанныеПоПодготовленнойТаблице). Не забываем про то, что таблицы должны в таком случае содержать все данные. Так же, такой подход не очень хорош если таблицы большие.

2. Вы можете сами собрать запрос типа "UPDATE" и выполнить его с помощью функции "ВыполнитьSQLЗапрос"
т.е. если вы знаете какое поле (поля) в каких таблицах (и по каким условиям) нужно обновить задача решается легко.

15. Sasha S (fillipok) 15.12.14 09:32
(14) aszoriy, понял, спасибо, попробую почитать, как это делается в MySQL по UPDATE.
Посмотрел синтаксис запроса, он оказался очень простой, так что можно и самому сделать ). Спасибо за наводку.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа