Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / SQLite Новый топик    Ответить
 Как монопольно подключиться к базе SQlite  [new]
Dino_zavr
Member

Откуда:
Сообщений: 9
Как монопольно подключиться к базе SQlite?
подключение - ADODB.Connection
.Mode = adModeShareExclusive - но всьо равно могут подключаться к базе другие приложения.
Просьба подсказать, как заблокировать подключение к базе если уже кто-нибудь к ней подключен?
12 окт 18, 12:38    [21702380]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
Dima T
Member

Откуда:
Сообщений: 13939
Явно открой транзакцию и пока не закроешь - никто другой ничего не сможет сделать.
12 окт 18, 13:43    [21702476]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
ShSerge
Member

Откуда: ʚонɔ dиw
Сообщений: 24853
Dima T
Явно открой транзакцию и пока не закроешь - никто другой ничего не сможет сделать.
```
Хуже ответа быть не может. Полный трындец!

Лучше бы узнал, чего топикстартеру таки нужно. Кстати, а зачем?
12 окт 18, 18:24    [21702842]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
Dima T
Member

Откуда:
Сообщений: 13939
ShSerge
Dima T
Явно открой транзакцию и пока не закроешь - никто другой ничего не сможет сделать.
```
Хуже ответа быть не может. Полный трындец!

Лучше бы узнал, чего топикстартеру таки нужно. Кстати, а зачем?

Ты через меня хочешь с ним общаться? Извини, не готов быть передастом, давай как-нибудь с ним напрямую общайся )))
12 окт 18, 19:56    [21702904]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
Dima T
Member

Откуда:
Сообщений: 13939
Да, как ни странно это правильный ответ, мы тут книжку переводили 21601245 и по этой теме спорили, в SQLite транзакция блокирует всю БД, т.е. монопольный доступ.
12 окт 18, 20:08    [21702913]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
Dino_zavr
Member

Откуда:
Сообщений: 9
ShSerge
Лучше бы узнал, чего топикстартеру таки нужно. Кстати, а зачем?


Ну образно говоря есть
connection.open
работа с базой, чтение\запись
connection.close
нужно что-бы между Open и Close другое приложение не могло подключиться к базе.
12 окт 18, 20:25    [21702920]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
Dima T
Member

Откуда:
Сообщений: 13939
Dino_zavr
ShSerge
Лучше бы узнал, чего топикстартеру таки нужно. Кстати, а зачем?


Ну образно говоря есть
connection.open
работа с базой, чтение\запись
connection.close
нужно что-бы между Open и Close другое приложение не могло подключиться к базе.

Это называется транзакция. В начале делаешь BEGIN TRANSACTION в конце COMMIT

Для общего развития почитай книгу 21634151 там чтения на 2-3 часа.
12 окт 18, 20:33    [21702926]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6273
Dima T,

ну нет. это монопольный доступ а не транзакция.

транзакция, например, может затрагивать только нужные тебе данные [эксклюзивно].

это грубое простое объяснение
12 окт 18, 22:07    [21703004]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
ShSerge
Member

Откуда: ʚонɔ dиw
Сообщений: 24853
Я так и не понял что нужно топикстартеру.
ПС SQLite - не серверная база.
13 окт 18, 05:15    [21703145]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
Dima T
Member

Откуда:
Сообщений: 13939
Siemargl
транзакция, например, может затрагивать только нужные тебе данные [эксклюзивно].

В SQlite нет блокировки таблиц/страниц. Тут транзакция блокирует сразу всю БД. https://www.sqlite.org/lockingv3.html

Но я немного напутал, чтобы БД сразу перешла в режим монопольного доступа надо
BEGIN EXCLUSIVE TRANSACTION

https://www.sqlite.org/lang_transaction.html
13 окт 18, 06:16    [21703148]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
Dima T
Member

Откуда:
Сообщений: 13939
Если задача просто ускорить работу, пожертвовав надежностью в случае непредвиденного завершения работы, то
pragma read_uncommitted=ON;
pragma synhronous=OFF;
pragma journal_mode=OFF;
BEGIN EXCLUSIVE TRANSACTION;
...
COMMIT TRANSACTION;
13 окт 18, 10:06    [21703185]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
Dino_zavr
Member

Откуда:
Сообщений: 9
Спасибо всем за подсказки. Буду рулить через
BEGIN EXCLUSIVE TRANSACTION;
...
COMMIT TRANSACTION;

Хотя я хотел как Aкцесе
Если базу .mdb открыть с .Mode = adModeShareExclusive то другие приложения не могут ПОДКЛЮЧИТЬЯ. connection.open - ошибка
16 окт 18, 10:33    [21704846]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
ShSerge
Member

Откуда: ʚонɔ dиw
Сообщений: 24853
С SQLite всё очень просто. Копируешь базу к себе на компьютер, делаешь, что хочешь, и публикуешь.
17 окт 18, 18:23    [21707039]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
pit_alex
Member

Откуда: Kharkov
Сообщений: 684
Dino_zavr,

даже если использовать эксклюзивную транзакцию, то базу для чтения все равно можно будет открыть для чтения с помощью:

sqlite3 file:database_name.db?nolock=1
18 окт 18, 11:09    [21707551]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
pit_alex
Member

Откуда: Kharkov
Сообщений: 684
или как вариант, после открытия шифровать, перед закрытием расшифровывать, тогда однозначно никто не откроет
18 окт 18, 14:18    [21707837]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
Dima T
Member

Откуда:
Сообщений: 13939
pit_alex
Dino_zavr,

даже если использовать эксклюзивную транзакцию, то базу для чтения все равно можно будет открыть для чтения с помощью:

sqlite3 file:database_name.db?nolock=1

Можно, но не нужно. Слишком опасные это грабли. Наступать на них может только тот кто прекрасно понимает как увернуться от последствий.
pit_alex
или как вариант, после открытия шифровать, перед закрытием расшифровывать, тогда однозначно никто не откроет

Исходники открыты, можно просто заменить все файловые функции на свои и скомпилировать. А там внутри можно любое шифрование сделать.
18 окт 18, 19:46    [21708207]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
ShSerge
Member

Откуда: ʚонɔ dиw
Сообщений: 24853
Dima T,

Я всё-таки не понимаю почему нельзя скопировать файл и сделать с ним что хочешь.
18 окт 18, 20:10    [21708226]     Ответить | Цитировать Сообщить модератору
 Re: Как монопольно подключиться к базе SQlite  [new]
Dima T
Member

Откуда:
Сообщений: 13939
ShSerge
Dima T,

Я всё-таки не понимаю почему нельзя скопировать файл и сделать с ним что хочешь.

Можно, но "оригинал" не будет недоступен другим, а задача поставлена именно так чтобы другие не смогли получить доступ.
18 окт 18, 20:21    [21708234]     Ответить | Цитировать Сообщить модератору
Все форумы / SQLite Ответить