«Давным-давно, в далекой-далекой галактике…», а точнее начале 2019 года был пост про БД. На днях снова пришлось столкнуться и освежить память.
Цель достаточно простая: что-то помещать и/или читать ил БД. В сегодняшнем случае это MySQL.
Что нам потребуется:
самое главное — это драйвер
Для того, что бы посмотреть список драйверов надо в «пуске» написать «ODBC», открыть соответствующее приложение (как правило оно в самом верху). И перейти в одноименную вкладку.
Вот с этими БД, мы точно сможем соединиться (доступны версии и кодировки).
По умолчанию нет драйверов Access — их нужно устанавливать. Стоит отметить, что есть х32 (AccessDatabaseEngine.exe) и х64 (AccessDatabaseEngine_X64.exe).
Основной «затык» в разрядности в том, что все приложения «Office» (Microsoft Word, PowerPoint, Excel и OneNote), должны быть этой же разрядности. Если нет, то придется переустанавливать.
Далее нужна библиотека «ADOLISP_Library.lsp» — в нее зализать не нужно, а тем более что-то править (просто подгружать в Автокад при необходимости).
С примерами можно найти в интернете архив «SQL adolisp252». Пользуясь моментом, еще раз выражу благодарность создателю (даже, если он не увидит этот пост). В примере из архива будет БД х32.
Грузим библиотеку:
(if (not ADOLISP_ConnectToDB) (load "ADOLISP_Library.lsp"))
Теперь самое интересное:
для того, что бы подключиться к БД нужно указывать какой драйвер использовать. Вот разные примеры:
dbFile — полный путь до БД
ConnectString — (значение строка) параметры подключения
(setq ConnectString и далее ….
(strcat ; MSAccess метод1
"Provider=MSDASQL;"
"Driver={Microsoft Access Driver (*.mdb)};"
"DBQ=" dbFile
)
(strcat ; MSAccess метод2
"Provider=Microsoft.Jet.OLEDB.3.51;"
"Data Source=" dbFile
)
(strcat ; MSSQL метод1
"Provider=SQLOLEDB;"
"Driver={SQL Server};"
"Server=" dbServer ";"
"Database=" dbName ";"
"UID=" dbUser ";"
"PWD=" dbPassword
)
(strcat ; MSSQL метод2
"Provider=SQLOLEDB;"
"Data Source=" dbServer ";"
"Initial Catalog=" dbCatalog ";"
"User ID=" dbUser ";"
"Password=" dbPassword
)
(setq ConnectString
"DATABASE=komp_texnika;
DRIVER={MySQL ODBC 8.0 ANSI Driver};
OPTION=0;
PORT=0;
SERVER=localhost;
UID=root2"
)
И еще примеры (возможно неправильные):
(setq ConnectString
"Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\Sapralfa-DEMO\\Alpha70\\DataBase\\CableBase.mdb"
)
(setq ConnectString
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Sapralfa-DEMO\\Alpha70\\DataBase\\CableBase.mdb;Persist Security Info=False")
(setq ConnectString
"Provider=SQLOLEDB.1;Password=gdbuser;Persist Security Info=True;User ID=gdbuser;Initial Catalog=GDB_System;Data Source= 46.149.233.164\\GDB_1"
)
Думаю понятно: указать драйвер, сервер, логин и пароль (в разных вариациях)
Вот точно рабочий вариант MySQL:
(setq ConnectString (strcat
"DATABASE=имя_базы;"
"DRIVER={MySQL ODBC 8.0 ANSI Driver};"
"OPTION=0;"
"PORT=0;"
"SERVER=IP_адрес_БД;"
"UID=логин_пользователя;"
"Password=пароль_пользователя"
))
Предполагаем, что библиотека работы с БД уже загружена в Автокад.
Подключение:
(if (not (setq ConnectionObject
(ADOLISP_ConnectToDB ConnectString "" "")
))
(progn
(prompt "\n\nНе могу подключиться к БД!")
(ADOLISP_ErrorPrinter)
)
(prompt "\n\nСвязь с БД установлена!")
)
Если все Ok, то дальше можно работать с БД используя стандартные запросы MySQL.
Запись в таблицу, (столбцы) и (соответственно данные)
(setq SQLStatement
"INSERT INTO 'test' ('user', 'work', 'permission' ) VALUES ('user2', 'yes', '10');"
)
Могут возникнуть танцы с кавычками: ' ` — как оказалось имеет значение
"INSERT INTO `имя_базы`.`имя_таблицы` (`company`, `phone`, `mail`, `user`) VALUES ('данные1', 'данные2', 'данные3', 'данные4');»
Еще пара примеров (возможно и тут закрались ошибки):
"UPDATE `test` . `test` SET 'user' = 'user5' WHERE `test` . `id` = 3;»
"DELETE FROM `test` WHERE `test`.`id` = 4;»
Как я делал:
в phpmyadmin формировал запросы и просто их копировал, а вместо данных подставлял свои переменные. Это самый надежный и успешный вариант! Набив несколько шаблонов/функций — дальше все как по маслу.
Еще нужно не забывать про то, что к БД могли не подключиться и отправлять запросы было бы бессмысленно. Кстати, библиотека «ADOLISP_Library.lsp» выдает описание ошибок, если они будут.
Стоит еще понимать разницу между виртуальным и VPS хостингом, если работаем с внешним сервером. В первом варианте создание пользователей и прав сильно ограничено.
Вот пример использования:
Пишем в БД log при запуске той или иной функции в Автокад.
Для того, что бы не лазить по phpmyadmin — на развернутом локально сайте просматриваем БД и частично ее редактируем.
В примере MySQL (вкладка «БД тестовая») — сидит в интернете и MSAccess («Кабельная продукция») — расположена локально.
PS
Буду надеяться, что изложенной информации достаточно.
Больше статей в группе: https://vk.com/auto_lisp