С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
912 / 286 / 57
Регистрация: 01.06.2023
Сообщений: 808

Расширенные возможности SQL в Access через SQLite3

15.02.2024, 23:33. Показов 962. Ответов 3

Студворк — интернет-сервис помощи студентам
Основная ссылка на репозиторий

Проект предназначен для демонстрации подключения таблиц Access как виртуальные таблицы в SQLLite3.
Возможности запросов SQLite шире чем у Acccess, становятся доступны CTE таблицы, рекурсивные запросы, нумерация строк, частичная агрегация, оконные функции и тд. В целом SQL в SQLite является достаточным что бы на нем писать программы, например решение задачи 5 букв.

С таблицами Аccess поддерживаются операторы SELECT, DELETE, INSERT, UPDATE. Для последних трех обязательно должен быть ключевой столбец с типом целое число, для него должен быть создан индекс (на 1 столбец).

Есть поддержка прилинкованных таблиц, но работа по уникальным индексам с ними будет медленнее чем с обычными таблицами.

Внимание! Решение пока не является законченным промышленным. Не выполняйте запросы над чувствительными данными или делайте резервные копии.

Установка

Проверялась работа только в 32 разрядном MS Office. Движок написан на VBScript и подключается к Access через компонент ScriptControl. Данное решение связано с тем что DLL скомпилирована по стандарту cdecl, для VBA нужно что бы было stdcall.

Нативный движок SQLite3 представлен в виде DLL (sqlite3.dll). Можно скачать актуальную версию или версию с большими возможностями (нужно 32 разрядная) с официального сайта SQLite. Версия должна быть не младше 3.10.0.

Для работы с DLL используется компонент DynamicWrapperX. для проверки установлен компонент или нет запустите файл SQLite.vbs. Если выполнится без ошибок значит дополнительно ни чего устанавливать не нужно.
Если появилась ошибка, то необходимо зарегистрировать библиотеку `dynwrapx.dll` как COM объект. Для этого скопируйте файл в постоянное место и выполните команду (Подробнее)

Bash
1
2
regsvr32.exe <путь-к-компоненту>\dynwrapx.dll — для всех пользователей.
regsvr32.exe /i <путь-к-компоненту>\dynwrapx.dll — для текущего пользователя.
В 64 битной системе в фоне создается окно для работы с 32 битными скриптами.

Начало работы

Добавьте класс SQLiteEngine.cls в проект. При необходимости поправьте пути до файлов sqlite3.dll и SQLite.vbs в функции Class_Initialize.

Пример работы

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
'Создаем движок
Set Engine = New SQLiteEngine
 
'Открываем пустую БД в памяти. Можно открыть и физическую
Set SQLite_Connection = Engine.OpenDataBase(":memory:")
 
'Добавляем возможность подключать виртуальные таблицы из Access
SQLite_Connection.AttachAccessDB CurrentDb(), ""
 
'Для того что бы можно было работать с таблицами нужно создать их виртуальную копию
SQLite_Connection.Execute "Create virtual table if not exists MyTable using Access(MyTable)"
 
'Дальше можно открывать набор данных, который по составу методов похож на обычный Recordset
Set SQLite_Recorset = SQLite_Connection.OpenRecordset("select * from MyTable", 0)
If Not SQLite_Recorset.EOF Then
  Debug.Print "Name = [" & SQLite_Recorset.Fields(0).Name & "] Value = [" & SQLite_Recorset.Fields(0).Value & "]"
End If
SQLite_Recorset.Close
Set SQLite_Recorset = Nothing
 
'для удаления таблиц используйте команду 
SQLite_Connection.Execute "drop table if exists MyTable"
 
'Хорошим тоном является все закрыть за собой
SQLite_Connection.Close
Ограничения

Поддержка русского языка частичная,
  • Поля на кириллицы становятся регистр зависимыми. т.е. как записано в БД так к ним и нужно обращаться.
  • Не работают функции Lower Upper.

В SQLite всего 4 базовых типа данных
  • Integer - 32 битное целое
  • Double - вещественное двойной точности
  • Text - Строки
  • Blob - Двоичные строки

В данном проекте поддерживаются только первые три.

Тип данных AccessТип данных SQLiteПримечание
Boolean, Byte, Integer и LongIntegerTrue приводится к 1, False к 0
Date, Timestamp, TimeDoubleВ SQLLite Есть поддержка даты и времени но их кодирование отличается от кодирования в Access. Если нужно сравнить дату Access с датой SQLLite к первой нужно прибавить 2415018.5.
Double, Float, SingleDouble 
Все остальныеText 

Результаты запроса нельзя куда-либо вывести, только программная обработка.

Вывод отладочных сообщений

Для вывода отладочных сообщений в файл используйте метод LogToFile класса SQLiteEngine

Visual Basic
1
Engine.LogToFile CurrentDb().Name & ".log"
Так же сообщения можно перенаправить в любое другое место. Для этого создайте объект с методом Output принимающий единственный параметр - текстовое сообщение лога.

Например вывод в текстовое поле на форме:

Visual Basic
1
2
3
Public Sub Output(text)
  If Me.log.Value <> "" Then Me.log.Value = Me.log.Value & (vbCrLf & text) Else Me.log.Value = Me.log.Value & text
End Sub
Затем подключите логирование

Visual Basic
1
Engine.ScriptControl.Run "SetPrintProvider", Me
Комментарии к Demo

Тестовая БД для быстрой демонстрации. Основная форма предоставляет графический интерфейс к основным функциям.

Описание элементов управления:
  • Кнопка "Создать подключение SQLite". Создает подключение и инициализирует ресурсы. Эту кнопку жмем первой
  • Кнопка "Подключить таблицы ACCESS". Создает линки в SQLite на таблицы Access.
  • Кнопка "Показать список доступных таблиц" - Выводит в окно вывода информации список доступных таблиц. Если ничего не менять, то будет доступно три таблицы из Access
  • Кнопка "Показать лог" - Показывает или прячет окно логирования
  • Кнопка "Очистить лог" - Очищает поле с логом
  • Кнопка "Включить логирование" - Выводит в окно лога отладочные сообщение об этапах выполнения запроса
  • Поле "Введите запрос" - Окно ввода для запросов. Перед вводом запросов нужно прожать кнопки "Создать подключение SQLite" и "Подключить таблицы ACCESS"
  • Кнопка "Выполнить" - Выполняет запрос из поля "Введите запрос" и выводит результаты выполнения в окно вывода информации.
  • Кнопка "Следующий пример" - Выводит из таблицы SQLExamples в поле "Введите запрос" очередной пример и отправляет его на выполнение. Каждый пример начинается с постановки в комментарии и затем идет SQL запрос с решением.
  • Список вывода информации. Сюда выводится результат выполнения запроса. Размер колонок можно менять, таская их за границы.
Миниатюры
Расширенные возможности SQL в Access через SQLite3  
Вложения
Тип файла: zip AccessToSQLiteConnector.zip (571.0 Кб, 11 просмотров)
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2024, 23:33
Ответы с готовыми решениями:

Редирект php расширенные возможности
Такой вопрос нужно запретить к индексации ссылку на редирект в robots все сделал, но страницы с редиректами упорно попадают в индекс гугла....

Windows 8 получит расширенные сетевые возможности
В Microsoft говорят, что в будущей операционной системе Windows 8 намерены значительно упростить и автоматизировать установку и подключение...

Компьютер для повседневных задач + расширенные графические и вычислительные возможности
Комп для повседневных задач + расширенные графические и вычислительные возможности бюджет:16800p Материнская плата ASUS...

3
598 / 404 / 51
Регистрация: 06.03.2022
Сообщений: 2,129
16.02.2024, 01:14
И чё? (Очередное "улучшение" старого,доброго,проверенного SQL)
0
912 / 286 / 57
Регистрация: 01.06.2023
Сообщений: 808
16.02.2024, 07:02  [ТС]
В целом да, разработка началась с того что не нравится ограниченность SQL в Access. Но в процессе понял что, появляются новые ограничения, что вызывает вопросы в целесообразности использования. Так что под конец остался только интерес как работает SQL изнутри. Так же можно рассмотреть как готовый драйвер для подключения к базам данным SQlite без ODBC. Модуль можно использовать при написании приложений на VBScript.
0
Эксперт MS Access
 Аватар для Eugene-LS
12058 / 5843 / 1492
Регистрация: 05.10.2016
Сообщений: 16,432
16.02.2024, 07:32
Swa111, спасибо! - Забираю.
Видел много софтины на базе SQLite (любимый FireFox например) - пригодится!
... можно свою "чистелку" слепить например
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.02.2024, 07:32
Помогаю со студенческими работами здесь

Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS SQL Server?
ВОПРОС: Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS SQL Server? MS SQL Server...

из БД (access) в Edit через SQL
Привет, как правильно написать SQL запрос чтоб получить значение из таблицы в Edit ? Делал так: ADOQuery.Close; ...

Ограничения в Access (через SQL)
Здравствуйте, уважаемые форумчане. Прошу помощи по заданиям. Надо написать SQL-инструкции для создания ограничений. 1. Создать домен:...

не могу соединить access c sql сервером.sql server 2005 и access 2003, windows 7
помогите пожалуйста! в sql нормально соединяется с сервером,а в аццессе нет,хотя данные те же ввожу.через пользовательский DNS создала...

База данных через SQL в Access
Всем привет! Помогите, пожалуйста, составить БД по заданию: Разработать базу данных СПОРТСМЕН, содержащую: • наименование вида...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru