1. Постановка завдання
Отже, є SQL-сервер з адресою WIN2012 \ TEST_SQL. Для підключення використовується ім’я входу SQL-сервера UserDB з паролем Pass123456.
На сервері розміщена база даних з ім’ям TestDB. У базі є таблиця з ім’ям Table_1, в якій 3 стовпці:
- C_DateTime, з типом datetime
- C_Char, з типом char (50)
- C_Numeric, з типом numeric (18,0)
Спочатку таблиця порожня:
У користувача UserDB є права на читання і запис в базу даних TestDB. В даному випадку користувач є власником зазначеної бази даних.
Потрібно навчитися записувати в базу даних і читати з бази даних з 1С за допомогою прямих запитів до SQL-сервера.
2. Підключення до SQL-серверу
Весь наведений нижче код може працювати як на клієнті, так і на сервері. Головне щоб був доступний COM-об’єкт «ADODB » (Докладніше про даній бібліотеці можна прочитати, наприклад, тут). Також з клієнта (або з сервера, дивлячись де виконується код) повинен бути доступний вказаний SQL-сервер (налаштоване правило в брандмауер для можливості зовнішнього підключення). Код наводиться зовсім простий, для розуміння з чого взагалі починати розробнику, який раніше з цим не стикався.
Отже, для підключення необхідно створити COM-об’єкт «ADODB». Для цього виконується код 1С:
&НаКліенте
Процедура ВиполнітьОбработкуКоманда // Ініціалізація змінних
ІмяСервераSQL “WIN2012 \ TEST_SQL” ПользовательSQL “UserDB” ПарольSQL “Pass123456” БазаДаннихSQL “TestDB” ТабліцаSQL “Table_1” //////////////////////////// /////////////
// Підключення до SQL-серверу
спроба
З’єднання = Новий COMОб’ект “ADODB.Connection” Команда = Новий COMОб’ект “ADODB.Command” Вибірка = Новий COMОб’ект “ADODB.RecordSet” СоедіненіеConnectionString “driver = {SQL Server};” “Server =” ІмяСервераSQL “uid =” ПользовательSQL “pwd =” ПарольSQL “database =” БазаДаннихSQLСоедіненіеConnectionTimeout СоедіненіеCommandTimeout // Відкриття з’єднання
СоедіненіеOpenКомандаActiveConnection СоедіненіеСообщіть “Успішне підключення!”);
виняток
СообщітьОпісаніеОшібкі ());
повернення;
КонецПопиткі;
КонецПроцедури
Результат роботи в 1С: Підприємство:
Тепер, в загальному то, можна виконувати будь-який запит SQL через даний COM-об’єкт. Подивимося як це робити на найпоширеніших прикладах.
3. Додавання записів в таблицю
Тепер додамо новий рядок в нашу поки ще порожню таблицю. Для цього необхідно виконати код:
/////////////////////////////////////////
// Додаємо запис в таблицю
ТекДата ТекущаяДатаТекСтрока “Запис рядка” ТекЧісло 123456 // Пріобразуем дані
Якщо НЕ ЗначеніеЗаполненоТекДата) Тоді
// Для порожній дати необхідно відправляти 01.01.1753
ТекДата Дата);
КонецЕсли;
ТекЧісло ФорматТекЧісло “ЧГ =” // Видаляємо прогалини
ТекстТекущейІнструкціі “INSERT INTO” ТабліцаSQL ”
| ([C_DateTime], [C_Char], [C_Numeric])
| VALUES ( ‘ “ТекДата”‘, N ‘ “ТекСтрока”‘, ‘ “ТекЧісло;
спроба
СоедіненіеExecuteТекстТекущейІнструкцііСообщіть “Запис додана!”);
виняток
СообщітьОпісаніеОшібкі ());
КонецПопиткі;
Дивимося результат і бачимо, що рядок з’явилася в таблиці:
4. Оновлення записів в таблиці
Тепер спробуємо відновити всі записи в таблиці зі значенням C_Numeric= 123456. Для цього виконуємо код:
/////////////////////////////////////////
// Оновлюємо записи в таблиці з C_Numeric = 123456
ТекЧісло 123456ТекДатаНовая ДатаТекСтрокаНовая “Оновлена запис рядка” // Пріобразуем дані
Якщо НЕ ЗначеніеЗаполненоТекДатаНовая) Тоді
// Для порожній дати необхідно відправляти 01.01.1753
ТекДатаНовая Дата);
КонецЕсли;
ТекЧісло ФорматТекЧісло “ЧГ =” // Видаляємо прогалини
ТекстТекущейІнструкціі “UPDATE” ТабліцаSQL ”
| SET
| [C_Char] = N ‘ “ТекСтрокаНовая”‘,
| [C_DateTime] = ‘ “ТекДатаНовая”‘
| WHERE [C_Numeric] = ‘ “ТекЧісло;
спроба
СоедіненіеExecuteТекстТекущейІнструкцііСообщіть “Запис оновлена!”);
виняток
СообщітьОпісаніеОшібкі ());
КонецПопиткі;
Перевіряємо, що запис оновилася:
5. Перегляд вибірки з таблиці
Писати і оновлювати записи в таблиці ми навчилися.