Не получается организовать многопользовательский доступ к базе.

Автор serkondr, 18 июля 2012, 22:00

0 Пользователи и 1 гость просматривают эту тему.

serkondr

Доброго времени суток, уважаемые господа!

Имеющая база данных часто падает, особенно во время программирования и внесения поправок в запросы. И по сети доступа нет, одновременно с базой работает только один пользователь.
Нашёл вот такую инфу:
http://wiki.i-rs.ru/wiki/RU/kb/00000352

Всё сделал по написанному. Скачал из инета  hsqldb-1.8.0.4.jar, прописал его в параметрах ООВ. Старый файл базы данных metiz.odb поместил на локальном диске D:\ и прописал к нему URL:

hsqldb:file:D:\metiz.odb;default_schema=true; shutdown=true           user=sa passw=""  

Получил все сообщения об успешном подключении. Но открывшаяся в итоге база не содержит вообще ничего. Нет ни таблиц, ни запросов.
Что я не так сделал?

Спасибо.

p.s. По факту локальная база не открывается таким путём. В папке D:\ создаются файлики metiz.odb.script , metiz.odb.propertis , metiz.odb.lck , т.е. хранилище для данных новой базы, сохраняемой в новом файле 1.odb. Можно подключиться к этому же хранилищу через другой сеанс OOBase, сохранив результат в другом файле 2.odb. В новом файле 2.odb видны таблицы, созданные в первом файле 1.odb и наоборот.
Обнаружил, что структуру созданных таблиц  поменять не получается - свойства полей становятся недоступными, если созданную таблицу сохранить, закрыть, и попытаться изменить. Поле первичного ключа сохраняю с автозначением, а оно оказывается без автозначения и изменить не получается.

Как мне перенести данные из локального файла базы данных в новый файл с многопользовательским доступом?
Как изменять структуру таблиц и почему не работает автоинкремент поля первичного ключа?

Спасибо.


[вложение удалено Администратором]

Yakov

Какая у вас версия OpenOffice/LibreOffice?


Перенести таблички можно мышкой:
1. Зарегистрировать вашу существующую БД в источниках данных.
2. Создать (или открыть) БД, в которую собираетесь перенести данные.
3. Открыть Calc!, и нажать F4. Откроется список зарегистрированных БД.
4. Мышкой перетащить таблицы из источников данных, открытых в Calc в раздел таблицы Base!
5. Откроется мастер импорта. Нажать далее, выбирая данные для переноса и отвечая на вопросы мастера.
6. Данные перенесены!

Yakov

Аналогично, можно мышкой перетащить таблицы не только из Calc, но и из другой Base. Тогда даже БД регистрировать не надо!

serkondr

Спасибо за ответ!

У меня ООО 3.3.0 от Инфра-ресурс.
Одновременно открыть две базы (локальную и многопользовательскую) не удаётся. "Класс драйвера не может быть загружен". Так что из Base  в Base таблицы не получается скопировать.

Попробовал зарегистрировать локальную базу данных. Удалил путь класса, чтоб открывались локальные базы, перезапустил офис, добавил в параметрах файл базы в список источников. В кальке пытаюсь открыть пункт "Таблицы" или "Запросы", а мне пишет ошибку:

Состояние SQL: S1000
Код ошибки: -40

General error: java.lang.UnsatisfiedLinkError: java.io.WinNTFileSystem.createFileExclusively(Ljava/lang/String;Z)Z

p.s.

Получил нужный результат следующим образом:

В папке, где хранятся данные многопользовательской базы (у меня в D:\), удалил все 4 вновь созданных файлика  metiz.odb.script , metiz.odb.propertis , metiz.odb.lck  metiz.odb.data. Открыл архиватором 7-zip старый файл локальной базы, распаковал папку database и скопировал её содержимое в D:\ вместо четырёх удалённых файлов. Это файлы script, data, propertis и backup. Затем переименовал их в соответственно metiz.odb.script, metiz.odb.data, metiz.odb.propertis и metiz.odb.backup.
После этого вновь открыл файл 1.odb. И увидел там все свои таблицы!!!
Они все доступны для заполнения данными  и автоинкремент тоже есть!!!   Ура!
А вот изменить структуру таблиц почему-то невозможно :(

Осталось ещё перенести запросы, но их можно по одному в текстовый редактор скопировать, открыв каждый запрос на изменение в режиме SQL. Если можно как-то проще перетащить запросы, подскажите пожалуйста.
Спасибо.



А остался ещё второй вопрос по инкременту поля ключа, он для меня важнее. Если инкремента не будет, то ничего работать не будет. Мне надо как-то добиться работы этого инкремента, и получить доступ к изменению свойств полей таблиц.

Yakov

Цитата: serkondr от 19 июля 2012, 18:33А остался ещё второй вопрос по инкременту поля ключа, он для меня важнее. Если инкремента не будет, то ничего работать не будет. Мне надо как-то добиться работы этого инкремента, и получить доступ к изменению свойств полей таблиц.
Может быть неправильно настроены индексы? (Сервис- Проектирование индекса)
Должен быть создан индекс для поля ключа (обычно он создаётся автоматически)
и должна быть установлена галочка "уникальный индекс"
Ну и данные должны быть уникальными (не повторяющимися)


serkondr

Похоже, у меня всё дело в правах доступа, которые определяются в строке URL источника данных.

Если убрать всё, что после D:\metiz.odb , то доступ к таблицам будет только в режиме чтения, ни добавить, ни изменить данные нельзя. Во вновь созданных таблицах инкремент не работает.
Когда строка имеет вид, приведённый в первом топике, у меня есть права на изменение и добавление данных в таблицы, но всё ещё нет права на изменение структуры таблиц. Инкремент работает, если он ранее был установлен при создании таблицы в старой, локальной базе. Связи между таблицами также сохранились от локальной базы.

Как мне установить права суперпользователя для этой базы данных?

И как скопировать формы и отчёты?

Yakov


serkondr

Разобрался.
В режиме с внешними базами структуру таблиц невозможно менять. Установку инкремента можно сделать из меню "Сервис/SQL" текстовой командой. Изменить типы полей вообще нельзя. Я сделал обходной манёвр:
1. Скопировал исходную таблицу с опцией "только структура", без данных.
2. Открыл для изменения структуру скопированной таблицы и удалил те поля, которые меня не устраивали.
3. Ввёл новые поля с нужными свойствами.
4. Скопировал исходную таблицу с опцией "Только данные", указав имя новой таблицы. Появилось окошко, где можно указать соответствие между старыми и новыми полями. Скопировал данные.
5. Удалил старую таблицу.
6. Скопировал новую таблицу в таблицу с именем, которое было у старой таблицы.
7. Удалил новую таблицу.
В итоге получил копию таблицы со старым именем и содержимым, но с новой структурой.

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

В таком режиме с внешним расположением баз данных работа офиса ускорилась и порчи данных при зависании офиса не происходит.



serkondr

Доброго времени суток!

База данных теперь открывается с любого компьютера. Однако, если база открыта на одной машине, то её невозможно одновременно открыть на другой машине, т.к. файл *.lck в папке с базой данных создаётся программой, не расшаренный.

The database is already in use by another process: lockFile: org.hsqldb.persist.LockFile@77fa387e[file =U:\krepezh.odb.lck, exists=true, locked=false, valid=false, ] method: openRAF reason: java.io.FileNotFoundException: U:\krepezh.odb.lck (Отказано в доступе)

Подскажите пожалуйста, как разрешить эту проблему?

adi_den2013

Нашла такую тему CONNECT MULTIPLE USER RESTRICT ACCESSIBILITY  http://www.oooforum.org/forum/viewtopic.phtml?p=432826#432826.

Загрузка mydb.exe для Windows тут http://www.oooforum.org/forum/viewtopic.phtml?p=396523#396523

Организация доступа клиент-сервер. Сейчас пробую.  :roll:

Написано доступно. Но пока стопор на указании IP в URL серверной базы. Тест на коннект не проходит. Странно  ???. Драйвер org.hsqldb.jdbcDriver успешно подгружается. Разбираюсь.

hsqldb:hsql://ХХХ.ХХХ.ХХХ.ХХХ/;default_schema=true;get_column_name=false
Яна (in real)