powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запись в базу Firebird
9 сообщений из 9, страница 1 из 1
Запись в базу Firebird
    #39796005
Gamlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую всех Гуру.

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

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

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

Отсюда вопросы:
1) Почему обновляется файл базы FDB если в программе происходит только чтение?
2) Как можно обойти эту перезапись?
...
Рейтинг: 0 / 0
Запись в базу Firebird
    #39796007
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gamlex,

gfix -mode read_only my_employee
...
Рейтинг: 0 / 0
Запись в базу Firebird
    #39796008
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gamlex,

Денис ответил. А почему так - даже если идут только чтения из БД, чтения производятся в транзакции, а старт транзакции - это как минимум изменение header page базы данных, а завершение - изменение ее состояния в transaction inventory page.
Режим read-only у базы (не у файла) отрубает указанные выше операции.
...
Рейтинг: 0 / 0
Запись в базу Firebird
    #39796025
Gamlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю за быстрый ответ.

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

Но вот в чём загвоздка. Программа имеет администраторскую и клиентскую версию. Администратор делает правки в базе. А клиент только читает данные из этой базы. Клиентская версия записана на диске. Если я сделаю базу только для чтения, администратор не сможет делать правки в базе. Конечно можно сделать правки администратором, скопировать базу в другую папку, командой c gfix установить признак Read_Only, но тут слишком много действий.
...
Рейтинг: 0 / 0
Запись в базу Firebird
    #39796026
Gamlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программа сделана на Delphi. Используются компоненты TIBDataBase и TIBTransaction.
В TIBTransaction задаются параметры типа:
concurrency
read_committed
rec_version
nowait
read
consistency
write

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

Может кто знает, можно ли настроить клиентскую версию программы (компоненты в ней) так, чтобы файл базы не обновлялся при чтении?
...
Рейтинг: 0 / 0
Запись в базу Firebird
    #39796030
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GamlexКлиентская версия записана на диске. Если я сделаю базу только для чтения, администратор
не сможет делать правки в базе.

Так ты ставь режим read only только непосредственно перед записью на DVD.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в базу Firebird
    #39796031
Gamlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я то без проблем поставил бы.

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

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

Если других решений нет - придётся мне ему ставить Firebird и учить перед записью на диск запускать CMD для перевода базы в read_only.
...
Рейтинг: 0 / 0
Запись в базу Firebird
    #39796038
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gamlex,

господи...

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

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

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

А с админкой и клиентсккой версией - уж чего проще. Админ в RW поменял, потом программа переводит базу в RO, пишет на диск, и обратно исходную БД переводит в RW.
...
Рейтинг: 0 / 0
Запись в базу Firebird
    #39796307
Gamlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё понял. Благодарю.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запись в базу Firebird
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]