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

Откуда:
Сообщений: 16
Приветствую всех Гуру.

Написал программу под Windows работающую локально с базой на Firebird (файл FDB). Программа ничего не записывает в базу а только берёт оттуда данные (только чтение). Сервер Firebird на компьютер не установлен, все необходимые для работы Firebird файлы лежат в папке с программой.

Возникла необходимость записать данную программу на DVD диск и запускать с диска. При работе с диска при запуске программы и как я понял в любой момент обращения к базе появляется ошибка "no permission for read-write access to database OTTEST.FDB".

К слову сказать если посмотреть на работу программы, расположенной на жёстком диске, видно, что при работе программы обновляется и файл базы .FDB, а на диске обновить файл невозможно.

Отсюда вопросы:
1) Почему обновляется файл базы FDB если в программе происходит только чтение?
2) Как можно обойти эту перезапись?
3 апр 19, 20:37    [21851769]     Ответить | Цитировать Сообщить модератору
 Re: Запись в базу Firebird  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9393
Gamlex,

gfix -mode read_only my_employee
3 апр 19, 20:44    [21851784]     Ответить | Цитировать Сообщить модератору
 Re: Запись в базу Firebird  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 27915
Gamlex,

Денис ответил. А почему так - даже если идут только чтения из БД, чтения производятся в транзакции, а старт транзакции - это как минимум изменение header page базы данных, а завершение - изменение ее состояния в transaction inventory page.
Режим read-only у базы (не у файла) отрубает указанные выше операции.
3 апр 19, 20:48    [21851790]     Ответить | Цитировать Сообщить модератору
 Re: Запись в базу Firebird  [new]
Gamlex
Member

Откуда:
Сообщений: 16
Благодарю за быстрый ответ.

Да, это сработало.

Но вот в чём загвоздка. Программа имеет администраторскую и клиентскую версию. Администратор делает правки в базе. А клиент только читает данные из этой базы. Клиентская версия записана на диске. Если я сделаю базу только для чтения, администратор не сможет делать правки в базе. Конечно можно сделать правки администратором, скопировать базу в другую папку, командой c gfix установить признак Read_Only, но тут слишком много действий.
3 апр 19, 22:05    [21851853]     Ответить | Цитировать Сообщить модератору
 Re: Запись в базу Firebird  [new]
Gamlex
Member

Откуда:
Сообщений: 16
Программа сделана на Delphi. Используются компоненты TIBDataBase и TIBTransaction.
В TIBTransaction задаются параметры типа:
concurrency
read_committed
rec_version
nowait
read
consistency
write

Так же есть галочка Read Only. Однако установка этих параметров не помогает - база всёравно обновляется (если не делать команду с gfix).

Может кто знает, можно ли настроить клиентскую версию программы (компоненты в ней) так, чтобы файл базы не обновлялся при чтении?
3 апр 19, 22:09    [21851855]     Ответить | Цитировать Сообщить модератору
 Re: Запись в базу Firebird  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47284

Gamlex
Клиентская версия записана на диске. Если я сделаю базу только для чтения, администратор
не сможет делать правки в базе.

Так ты ставь режим read only только непосредственно перед записью на DVD.

Posted via ActualForum NNTP Server 1.5

3 апр 19, 22:30    [21851868]     Ответить | Цитировать Сообщить модератору
 Re: Запись в базу Firebird  [new]
Gamlex
Member

Откуда:
Сообщений: 16
Я то без проблем поставил бы.

Пользователь административной версии - обычный юзер. Firebird у него не установлен. Про команды в командной строке он ничего не слышал. Ему нужно чтобы в административной версии подправил базу, кинул её в клиентскую версию, записал на диск и чтобы всё работало. Поэтому я и хотел бы узнать, можно ли сделать это изменение в самой Делфе.

Можно было бы в программе или CMD файле запускать эту команду для клиентской версии, чтобы пользователь-админ сам ничего не делал. Для этого скидывал в папку с CMD файлом файлы gfix.exe и fbclient.dll, но без установленного Firebird команда не проходит - пишет Unavailable database.

Если других решений нет - придётся мне ему ставить Firebird и учить перед записью на диск запускать CMD для перевода базы в read_only.
3 апр 19, 22:48    [21851873]     Ответить | Цитировать Сообщить модератору
 Re: Запись в базу Firebird  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 27915
Gamlex,

господи...

есть Services API
http://www.ibase.ru/ibx#servapi

unavailable database выдается если идет попытка коннекта к базе НЕ через embedded, и т.д.

Gamlex
Так же есть галочка Read Only. Однако установка этих параметров не помогает

да потому что это параметр транзакции, которая стартует в read-write базе данных.
Я же популярно объяснил, что происходит при старте и завершении транзакций, любых, до тех пор пока БАЗА не переведена в read-only.

А с админкой и клиентсккой версией - уж чего проще. Админ в RW поменял, потом программа переводит базу в RO, пишет на диск, и обратно исходную БД переводит в RW.
3 апр 19, 23:32    [21851898]     Ответить | Цитировать Сообщить модератору
 Re: Запись в базу Firebird  [new]
Gamlex
Member

Откуда:
Сообщений: 16
Всё понял. Благодарю.
4 апр 19, 11:43    [21852351]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить