bdd2

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) 1072 05.12.12 12:51 Сейчас в теме
Этот код можно использовать для чтения баз MySQL на хостинге?
2. Александр Зорий (aszoriy) 34 05.12.12 13:21 Сейчас в теме
Я использую для работы с локальным MySQL, но никакой особой разницы нет.

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

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

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

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

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

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

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

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

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

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

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

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