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

15279
KronoS

Я провожу исследование, где мы будем собирать данные с помощью Access. Поскольку эти исследования будут проводиться несколькими людьми, использующими одну и ту же структурированную базу данных Access, нам необходимо найти способ обновления / синхронизации с центральной базой данных, используя информацию, полученную из всех других баз данных. Другими словами, данные, которые собираются несколькими людьми, должны быть собраны в одной центральной области. Как мне это сделать?

По сути, это именно то, что я хочу сделать, но не знаю как:

Косвенная синхронизация

Косвенная синхронизация полезна, когда вы работаете в автономной среде, например, когда вы путешествуете с ноутбуком.

Косвенная синхронизация может быть настроена только с помощью диспетчера репликации. После настройки косвенной синхронизации с помощью Replication Manager можно выполнить косвенную синхронизацию с помощью Microsoft Access, Replication Manager или JRO.

сайт

5
Рассматривали ли вы Google Docs и создавали ли вы одну БД, доступ к которой можно получить через любой современный браузер? Darius 13 лет назад 0
@Darius К сожалению, gDocs не является ответом здесь, поскольку он не такой мощный, как Microsoft Access. Кроме того, я не думаю, что у gdocs есть альтернатива базе данных KronoS 13 лет назад 0
a @ KronoS - Базы доступа будут работать в локальной сети? Нет хорошего способа заставить его работать по глобальной сети, скорее всего, он взорвется. Darius 13 лет назад 0
@Darius ты хочешь сказать мне, что крупные корпорации работают только в локальных сетях со своими БД? О_О не имеет смысла там. KronoS 13 лет назад 0
Что я говорю, что крупные корпорации не используют доступ через глобальную сеть Darius 13 лет назад 1
Разработка пользовательских приложений с MS Access МОЖЕТ БЫТЬ И ОБЫЧНО БОЛЬШЕ БОЛЬШЕ, чем разработка бизнес-приложений с MSDE или MS SQL Server. ИТ-отделы тратят больше времени, больше усилий и сталкиваются с новыми проблемами с MS Access. MS Access значительно сложнее развертывать и контролировать как распределенное бизнес-приложение, не увеличивая затраты на ИТ-поддержку. И даже если вы потратили дополнительное время и усилия на преодоление ограничений, платформа MS Access не масштабируется. Darius 13 лет назад 5
@KronoS Крупные корпорации будут использовать VPN и соответствующие централизованные серверы баз данных, такие как MSSQL, Oracle, MySQL и т. Д. Darth Android 13 лет назад 0
Находятся ли люди в автономном режиме во время сбора данных? oleschri 13 лет назад 0
Может быть разумной идеей иметь базу данных Access, хранящуюся на сетевом диске, и создать простой пользовательский интерфейс для ввода данных. Даже если у вас есть несколько пользователей, открывающих базу данных Access, если они только добавляют, а не удаляют данные, у вас все будет в порядке. Breakthrough 13 лет назад 0

4 ответа на вопрос

1
TuxRug

The most reliable way I know of to do this is to write a program that works with the database off a fileserver. I've had to work on a program (from scratch) to do this for a client that wanted to use MS Access, nothing else. Unfortunately, it's too tricky to explain here. If you can just access the Access database file from multiple places, the MS Access software should be able to make changes but I don't know if those changes would propagate through other systems, or how reliable it would be.

1
harrymc

Смотрите эту статью: Объедините несколько баз данных MS Access в одну :

Ниже приведена функция Merge (), написанная в MS Access VBA для объединения нескольких обычно структурированных баз данных в одну. Мне пришлось написать эту функцию для одного из моих проектов, где мне нужно было объединить множество островных баз данных. Структура баз данных была точно такой же.

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

Сам скрипт просто зацикливается на выполнении команд, которые выглядят так:

INSERT INTO target SELECT * FROM source 

Поскольку оригинальный веб-сервер, кажется, сломан, весь сценарий извлекается из Wayback Machine и воспроизводится здесь:

Option Compare Database Option Explicit  'Set the below variable to TRUE 'When you are done with testing 'Basically testing mode will print 'the names of all the databases 'you are going to merge Const bTest = False  Sub Merge()  'Copyright © iLoveCoding, 2010 'Web: http://www.iLoveCoding.co.uk  'The Merege() is a function that merges 'records from multiple MS Access databases 'into a consolidated one provided that the 'structure of all databases are exactly same. ' 'This function assumes that there are 'no relationships defined among the tables. 'Which is typically the scenario when an 'MS Access database is used in an Intranet or 'Web application.  'However properly altering the order of the 'dbfiles() initialization one can easily 'address the issue of relationships and 'data integrity among tables  On Error GoTo errhand Dim appPath$ '---------------------------------------------- 'Change the below number to number of databases 'you are going to merge '---------------------------------------------- Const ndb = 22 Dim dbfiles$(2 To ndb) Dim i% 'ANA.mdb '---------------------------------------------- 'Array of the database file names without path 'Copy this code into a module of the first database 'The first database is going to be the consolidated 'capturing the records from all other databases. 'The first database name is not present here 'That is why the index starts with 2. '---------------------------------------------- dbfiles(2) = "second.mdb" '<= change the file name dbfiles(3) = "third.mdb" dbfiles(4) = "fourth.mdb" ' 'similarly initialize other files ' dbfiles(10) = "tenth.mdb" '---------------------------------------------- ' The databases should be copied to the same ' folder of the first database '---------------------------------------------- appPath = CurrentProject.Path For i = 2 To ndb Dim dbpath$, db As Database dbpath = appPath & "\" & dbfiles(i) Set db = OpenDatabase(dbpath) Dim tbl As TableDef, j% For j = 0 To db.TableDefs.Count - 1 DoEvents Set tbl = db.TableDefs(j) If tbl.Attributes = 0 Then If bTest Then Debug.Print tbl.Name Else DoCmd.TransferDatabase acLink, "Microsoft Access", _ dbpath, acTable, tbl.Name, tbl.Name & "_Linked", False Dim sql$ sql = "INSERT INTO [" & tbl.Name & "] SELECT * FROM [" & _ tbl.Name & "_Linked" & "]" DoCmd.RunSQL sql DoCmd.DeleteObject acTable, tbl.Name & "_Linked" End If End If Next j Debug.Print dbfiles(i) Next i Exit Sub errhand: MsgBox Err.Description End Sub 
ссылка не работает KronoS 13 лет назад 0
Найдено на [Wayback Machine] (http://wayback.archive.org/web/) и скопировано выше. harrymc 13 лет назад 0
Похоже, код не работает :( Я продолжаю получать синтаксическую ошибку в строке 64: "dppath = appPath &" \ "& dbfiles (i)" ... так как я ничего не знаю о VBA, я не уверен, что Проба точно. KronoS 13 лет назад 0
Код был воспроизведен неправильно, возможно, даже с момента первоначальной публикации. «&» - это html-кодировка «&» (амперсанд). Я исправил код и надеюсь, что он будет работать сейчас. harrymc 13 лет назад 0
Все еще не повезло. Скрипт работает правильно, однако при добавлении значений выдает ошибку. KronoS 13 лет назад 0
Какое сообщение об ошибке? harrymc 13 лет назад 0
0
Sharken

Нечто подобное уже обсуждалось в StackOverflow, возможно, оно может дать вам несколько советов о том, как продолжить.

Другой вариант, который может превышать ваш бюджет, может быть Altova DatabaseSpy, он может импортировать данные CSV / XML в базу данных Access.

0
chris

Я не уверен, какой тип пользовательского интерфейса вы используете для ввода данных, но я бы посоветовал НЕ использовать доступ, а вместо этого использовать SQL Express и, возможно, вводить данные как приложение .Net.

Затем вы можете запустить SQL Server и объединить отдельные экспресс-базы данных обратно в главную. Взгляните на http://msdn.microsoft.com/en-us/library/ms152746.aspx

У вас нет сведений о данных, которые вы собираете, но похоже, что не будет никаких совпадений - то есть каждый сборщик имеет уникальный набор данных, без какой-либо возможности конфликтов слияния - так что все должно пройти довольно легко.

Похожие вопросы