MySQLConnect

Обработка предназначена для работы с 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 строк (параметр настраивается).

 

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

15 Comments

  1. adhocprog

    Этот код можно использовать для чтения баз MySQL на хостинге?

    Reply
  2. Ifboop_Figure

    Я использую для работы с локальным MySQL, но никакой особой разницы нет.

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

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

    Обращаю Ваше внимание, что колонки ТЗ типизированные (строка(1024)) т.е. полученную таблицу можно использовать в качестве параметра запроса.

    Reply
  3. asved.ru

    Полезная штука, применял подобное в процессе прикрутки 7.7 к asterisk.

    Reply
  4. Ifboop_Figure

    Я использую для работы с кассовым сервером УКМ4.

    Reply
  5. al_zzz

    Я подобную обработку делал для 7.7 и joomshoping: 1с77-1c8x.ru. А недавно перешел на 8.1 и сейчас как раз задача стоит по настройке обмена с сайтом. Вовремя Ваша разработка здесь появилась! Спасибо!

    Reply
  6. Ifboop_Figure

    Пользуйтесь. Будут вопросы/пожелания готов помочь 🙂

    Reply
  7. MegaMouse

    Тема интересная, но пишу тут только для подписки на тему . Сорри.

    Reply
  8. PrinzOfMunchen

    (6) aszoriy, а не пробовали под Linux?

    Reply
  9. Ifboop_Figure

    (8) неа, но работать под linux без допила (или перепила) не будет. Это факт.

    Reply
  10. plastilin

    Благодарю!)

    Reply
  11. coollerinc

    Пригодилось, когда стали внедрять УКМ 4

    Reply
  12. Ifboop_Figure

    (11) coollerinc, выражаю свое глубочайшее соболезнование!

    Компании с таким скотским отношением к клиентам как «Сервис+» с ее «УКМ4» стоит еще поискать.

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

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

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

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

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

    и много много много чего еще. Один сплошной негатив.

    Reply
  13. fillipok

    (12) aszoriy, спасибо за обработку. А можно ли сделать обновление данных ? Добавление и удаление нашел. Спасибо.

    Reply
  14. Ifboop_Figure

    (13) fillipok, обновление данных, к сожалению, не реализовано (в прямом виде).

    Сейчас есть два варианта обновления данных:

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

    2. Вы можете сами собрать запрос типа «UPDATE» и выполнить его с помощью функции «ВыполнитьSQLЗапрос»

    т.е. если вы знаете какое поле (поля) в каких таблицах (и по каким условиям) нужно обновить задача решается легко.

    Reply
  15. fillipok

    (14) aszoriy, понял, спасибо, попробую почитать, как это делается в MySQL по UPDATE.

    Посмотрел синтаксис запроса, он оказался очень простой, так что можно и самому сделать ). Спасибо за наводку.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *