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

Автор Николай174, 18 марта 2016, 18:14

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

Николай174

Цитата: idro от 20 марта 2016, 19:11
Цитироватьу меня есть файл базы данных
У вас есть файл базы SQLite ? Или Вы пытаетесь свою базу подцепить ?
Нет, у меня файл в open bace сделан, вроде как дает сбой при одновременно работе на разных компах, вот я и пытаюсь разобраться, может, что и не так обзываю. Я дрова на оба компа поставил, с одного на другой по сети файл прописал. А вот когда новую базу формирую, то не знаю что получается, он предлагает создать Новую базу... я тут вот и спотыкаюсь, что для чего?

idro

#16
ЦитироватьПишешь  имя базы, которая в списке будет , и путь до файла где будет сама база хранится
Надо сделать как я написал. Имя , например BaseSQLite1. Путь , например, C:\temp\BaseSQLote.db (это путь пока ведет в "никуда" т.к. этого файла нет , он создаться при первом обращение к базе.  Далее, создаете новый файл Open BASE , выбираете ODBC и подтягиваете из списка BaseSQLite1 .  Потом напишите макрос и перегоните данные из старой базы в новую.

Николай174

Цитата: idro от 20 марта 2016, 19:25
ЦитироватьПишешь  имя базы, которая в списке будет , и путь до файла где будет сама база хранится
Надо сделать как я написал. Имя , например BaseSQLite1. Путь , например, C:\temp\BaseSQLote.db (это путь пока ведет в "никуда" т.к. этого файла нет , он создаться при первом обращение к базе.  Далее, создаете новый файл Open BASE , выбираете ODBC и подтягиваете из списка BaseSQLite1 .  Потом напишите макрос и перегоните данные из старой базы в новую.
Лады, буду пробовать... спасибо!

Николай174

Цитата: Николай174 от 20 марта 2016, 19:29
Цитата: idro от 20 марта 2016, 19:25
ЦитироватьПишешь  имя базы, которая в списке будет , и путь до файла где будет сама база хранится
Надо сделать как я написал. Имя , например BaseSQLite1. Путь , например, C:\temp\BaseSQLote.db (это путь пока ведет в "никуда" т.к. этого файла нет , он создаться при первом обращение к базе.  Далее, создаете новый файл Open BASE , выбираете ODBC и подтягиваете из списка BaseSQLite1 .  Потом напишите макрос и перегоните данные из старой базы в новую.
Лады, буду пробовать... спасибо!
При открытии "новой базы" пишет "Невозможно установить соединение с источником данных "Название базы" cjnntct failed - что бы это? Или пока не перепишу базы - так и будет??

idro


idro

#20
Вот попробуйте создать таблицу ( имя базы естественно  свое пропишите) . Крыжик не забыли снять с Don`t Create DateBase ? Его можно будет поставить после создания файла,  что бы пользователи , в случае случайного удаления, стали бить тревогу, а не писать данные в новь созданный пустой файл.

Function DbConnect as Object
Dim  DatabaseContext as Object
Dim oDB as Object
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDB = DatabaseContext.getByName("BasaSQLite")
DbConnect=oDB.getConnection("","")
End Function

Sub CreateTableSotrudnik() 'создание таблицы с сотрудниками
      Dim oCon as Object
      Dim oStmt as Object
       Dim oSQL as String
       Dim oTbName as String
         oCon =DbConnect        
          oTbName = "SOTRUDNIK"
          oStmt = oCon.createStatement()
          'Создаем таблицу со списком сотрудников IF NOT EXISTS - создаем если таблицы нет, AUTOINCREMENT - автозаполнение по поряку, DEFAULT - значение по умолчанию
         oSQL = "CREATE TABLE IF NOT EXISTS " & oTbName & "(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, FAMILIA TEXT NULL,NAME TEXT NULL,OTCHSTVO TEXT NULL," &_
         "ORGANIZATION TEXT NULL,LICNOMER INTEGER NULL,UDALENIE NUMERIC DEFAULT 0 NULL,SOT_GROUP TEXT NULL,TABNOMER INTEGER NULL)"
         oStmt.execute(oSQL)
           oCon.getTables().refresh()         
      oCon.close()
      oCon.dispose
End Sub

maksvlad

Для нескольких компов выбирал между вариантами: firebird и hsql - standalone.
Пришел к выводу, что для моих целей (БД с несколькими неодновременными пользователями) лучше всего sqlite.
Есть нюансы в использовании, например, создание субформ требует определенной настройки доступа к БД (есть в хелпе по опенофису и sqlite)
Наиболее удобным менеджером для доступа к базе sqlite пока считаю sqlitestudio.
Редактирую базу в студии, а гуй-морда для пользователя в base

idro

maksvlad А как у тебя реализовано решение коллизий при одновременной записи в базу разными пользователями ? Под Access при работе с mdb, я делал обработку ошибки, таймаут, и последующую запись. Или на SQlLite   все реализовано внутри. 

maksvlad

Цитата: idro от  5 апреля 2016, 05:42
maksvlad А как у тебя реализовано решение коллизий при одновременной записи в базу разными пользователями ? Под Access при работе с mdb, я делал обработку ошибки, таймаут, и последующую запись. Или на SQlLite   все реализовано внутри. 
У меня это решено организационно: база доступна по сети, но вносят данные разные люди в разное время: то есть на запись у меня только один пользователь, а на чтение сколько угодно

обработчик не писал
SQLite предопределенное поведение "BUSY":
Цитировать
Can multiple applications or multiple instances of the same application access a single database file at the same time?

    Multiple processes can have the same database open at the same time. Multiple processes can be doing a SELECT at the same time. But only one process can be making changes to the database at any moment in time, however.
<...>
       When SQLite tries to access a file that is locked by another process, the default behavior is to return SQLITE_BUSY. You can adjust this behavior from C code using the sqlite3_busy_handler() or sqlite3_busy_timeout() API functions.
https://www.sqlite.org/faq.html#q5

В общем, для реального мультиюзера нужно брать что-нить более приспособленное: firebird, mysql, PostgreSQL - в зависимости от нужды.
Sqlite, как замена встроенной, ИМХО, идеальна: просто копируется, просто редактируется