5

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

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

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

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

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

сайт

4 ответа4

1

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

1

Смотрите эту статью: Объедините несколько баз данных 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
0

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

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

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

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .