Наглядный инструмент для обращения к SQL базам из 1С. Вы можете просто открыть обработку (тогда вам будет доступна консоль запросов), а можете сделать запрос из кода. Далее пример вызова из кода (если не встраивать в конфигурацию):
ADODB = ВнешниеОбработки.Создать(«c:ОбработкиADODB.epf»);
ADODB.База = «base_test»;
ADODB.Сервер = «192.168.0.1»;
ADODB.Пользователь = «sa»;
ADODB.Пароль = «test_password»;
ADODB.MSSQL_Подключение();
// Берем первую попавшуюся таблицу и делаем запрос
масТаблиц = ADODB.MSSQL_ПолучитьТаблицы();
ТекстЗапроса = «SELECT TOP 10 * FROM » + масТаблиц[0];
тзРезультат = ADODB.MSSQL_ВыполнитьЗапросИВернутьТаблицуЗначений(ТекстЗапроса);
тзРезультат.ВыбратьСтроку(«Выборка»);
У обработки есть следующие функции
- MSSQL_Подключение — подключится к базе
- MSSQL_ВыполнитьЗапросИВернутьТаблицуЗначений — Делаем запрос к базе и полученный результат преобразуем в таблицу значений.
- MSSQL_ВыполнитьЗапрос — выполем запрос. Можно воспользоваться для тех запросов которые ничего не возвращают. Возвращает данные ADODB.RecordSet
- MSSQL_РезульататЗапросВТаблицуЗначений — Разбирает ADODB.RecordSet в 1С таблицу значений.
- MSSQL_ПолучитьТаблицы — возвращает массив с именами таблиц в MS SQL
- СохранитьНастройки – сохраняем настройки подключения в XML файл
- ПрочитатьНастройки – читаем настройки подключения из XML файла
Добавление от 16.07.2012
Была добавдена поддержка SQLite (ODBC драйвер).
Реквезит «ТекущийТипБазы» указывает с каким типом базы работаем. Поддерживает слежующие значения:
- MSSQL
- SQLITE
Добавленны новые функци:
- SQLite_ПолучитьПоляТаблицы — Возвращает таблицу значений с информации по полям таблицы SQLite
- SQLite_ПолучитьТаблицы — Возвращает имена таблиц сущесвующие в подключенной базе SQLite
Следующие функции могут использоваться как при работе с MS SQL так и с SQLite:
- База_ВыполнитьЗапросИВернутьТаблицуЗначений — Выполянет запрос и результат запроса возвращает в таблицу значений
- База_РезульататЗапросВТаблицуЗначений — На основе результата запроса (База_ВыполнитьЗапрос) создаем таблицу значений
- База_ВыполнитьЗапрос — Выполянет запрос к базе
- СелектЗапрос — создает select-запрос для опредленного типа базы
Добавление от 23.08.2012
Добавлена функция получения статистики количества записей во всех таблицах.
Добавление от 08.10.2012
Добавлена поддержка ODBC MySQL
А в чем разница с консолью запросов ADO?http://infostart.ru/public/62737/
(1) mitiyV,
В первую очередь это все таки «обертка-обработка» для выполнения запросов из кода.
Сама консоль запроса — это вторично т.к. была сделана для тестирования функций запроса.
(2) Не проще было сделать обертку для обработки (1)? = )
(3) Serj1C,
Не понял что вы имели в виду…
Сделал обработку что бы при необходимости вызвать ее из кода (предварительно добавив в конфигурацию) и выполнить запрос к MS SQL. Конечно можно было сделать модуль с 10-ком функциями, но по мне, в виде отдельной обработке понятней.
Думаю, надо бы добавить возможность
доменной авторизацииаутентификации средствами ОС на скуле.(5) Misanets,
Добавил. Но требуется проверка. У меня авторизация через sa.
(6) не работает.
Если аутентификация ОС, строка соединения следующая:
«Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True; Initial Catalog=<Таблица>;Data Source=<БД>»
Если стандартная:
«Provider=SQLOLEDB.1;Password=<Пароль>;Persist Security Info=True;User ID=<Логин>;Initial Catalog=<Таблица>;Data Source=<БД>»
И в процедуру АвторизацияОСПриИзменении() добавить строку:
ЭлементыФормы.Пароль.Доступность = Не АвторизацияОС;
(7) Misanets, Поправил. Спасибо за наглядность пояснения.
Спасибо автору полезная вещь, появилась почва для фантазий…
Автору респект. Иногда приятнее написать запрос непосредственно на MS SQL.
Особенно если INSERT, SET, UPDATE и т.д. нужны.
Интересно наблюдать как программеры по 1С движутся к концепции от которой 10 лет назад отказались: База данных — GUI пользователя (желательно web), 1Сv7 была и базой данных (DBF) и апликейшен сервером, v8.1 «разрешили» в базу напрямую ходить, v8.2 практически стал апликейшен сервером (Middleware) , и от базы данных отстали. А дальше что? 1С v9 — кеширующий web сервер ?
интересно, только вместо йп, надо писать сетевое имя, мне кажется
Серьезный подход, однозначный плюс)
А запись можно делать?
(14) navi,
Можно)
см. MSSQL_ВыполнитьЗапрос и База_ВыполнитьЗапрос
Класс! У нас «Игра с огнем» на сервере не запускается, попробуем этот механизм! Спасибо.
Как ни удивительно, мне придется повторить свой комментарий к другой обработке (http://forum.infostart.ru/forum24/topic29874/message336391/#message336391)
—-
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=120&lid=2681
Есть «ADO Demo» от Михайлова. Несмотря на 2004 год — там функционал поболе.
—-
Эта обработка хорошая, но у Михайлова возвращается типизированная таблица значений, которую можно использовать в дальнейшем в запросах.
(17) K_A_O,
У меня не консоль, а интерфейс для доступа до баз. Т.е. Вы можете использовать эту обработку в своем коде для доступа до баз. А консоль используется для тестирования связи.
Спасибо за ссылки.
Однако, мне казалось, что ADO это уже универсальная обертка для доступа к любому типу баз данных, был бы драйвер и строка подключения.
(11) it.net,
когда и кто разрешил?
(18)
с чего вдруг у вас указано подключение к MySQL? Вы намеренно ввводите в заблуждение, что ODBC-драйвер для подключения к MySQL совершенно не нужен, и достаточно подобного драйвера от MS SQL?
(21) AlexO,
В диалоге подключения дается ссылка на ADODB драйвер для MySQL и SQLite.
(22)
в смысле, «ссылка в диалоге подключения»? в самой статье написано правильно, но только по SQLite и MS SQL, про MySQL надо тогда аналогично дополнить…
ТекстЗапроса = «SHOW TABLES»;
// подключение к базе MySQL
Соединение = Новый COMОбъект(«ADODB.Connection»);
СтрокаСоединение = «DRIVER={MySQL ODBC 5.1 Driver};SERVER=;DataBase=;UID=;PWD=»; //{MySQL ODBC 3.51 Driver}
Попытка
Соединение.Open(СтрокаСоединение);
Сообщить(«Соединение установлено»);
Соединено = Истина;
Исключение
Сообщить(«Ошибка подключения к базе MySQL!», СтатусСообщения.Важное);
Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
Соединено=Ложь;
Возврат;
КонецПопытки;
Если Соединено Тогда
SQLcmd = New COMОбъект(«ADODB.Command»);
SQLcmd.ActiveConnection = Соединение;
SQLcmd.CommandText = ТекстЗапроса;
тз = Новый ТаблицаЗначений;
мойЗапрос = Новый COMОбъект(«ADODB.Recordset»);
мойЗапрос.Open(SQLcmd);
КолвоКолонок = мойЗапрос.Fields.Count();
КонецЕсли;
Я тут шаманю , но никак получить список таблиц не могу…
Прийдется качать обработки и смореть на примере.
если у пользователя нет никаких привилегий для таблицы, таблица не будет показана в результатах команды SHOW TABLES или mysqlshow db_name.
это о каких привилегиях идет тут речь ,что то я не пойму…
А почему обязательно подключаться через ADO? Можно же воспользоваться внешними источниками данных…И из обычной консоли запросов уже писать запросы к БД(в том числе удаленных) на языке запросов 1С?
(26) без вызова хранимых процедур и кучи функций SQL 🙁
Это во-первых.
А во-вторых, исключительно SELECT.
Так что, манипулирование данными с помощью этой обработки и «ВЫБРАТЬ» посредством внешних источников данных — разные вещи
При подключение в SQLite из 8.3 вылетает ошибка:
«{ВнешняяОбработка.ADODB.МодульОбъекта(204)}: Ошибка при установке значения атрибута контекста (ActiveConnection): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию»