繁体   English   中英

MS Access应用程序脱机工作

[英]MS Access Application Work offline

我有一个通过链接表链接到SQL Server(2012)的MS Access(2010)应用程序。 有什么方法可以让用户脱机工作并在连接后同步到服务器?

提前致谢

在我看来,没有简单的方法可以做到这一点。

通过设计,我会将SQL Server的相关内容镜像到本地访问数据库,并使访问程序可以与此数据库一起工作。

但是您需要找到一种方法来将脱机数据与SQL Server同步。 那是棘手的部分,它在很大程度上取决于应用程序设计的目的。

当然,对于Access from SQL中的只读数据,只需有一个宏即可将SQL表的副本拉到用户运行的Access数据库中,以在离线之前刷新其副本。

如果有多个用户使用同一数据,则将更改同步回SQL Server变得更加复杂。 当同一记录有多个更改时,谁的“数据”优先?

如果您的用户仅添加数据,则可以设计一个保存表来保存新记录,并让它们启动一个宏以将这些插入内容推入SQL表,并在它们插入时获得SQL表的新副本。 但是,如上所述,如果他们正在编辑记录并且有多个用户这样做,那么很容易导致数据丢失和数据损坏。

实现此方法的方法是将表链接到2个DB上的表:SQL Server和本地副本Access DB文件。

  1. 您将日期从远程复制到本地数据库
  2. 让用户处理本地副本
  3. 将数据同步回远程数据库

如果您使用相同的名称保留本地表,并在指向远程表名称的链接(“ Remote”或“ rmt”)中添加一些前缀,则可以保持大多数逻辑:您仍在处理相同的表,只是链接到其他表位置。 您的主要问题仍然是同步 您需要考虑一种方法,具体取决于该系统中的数据流。
在这种情况下,一般的同步代码为:

For Each tdf In CurrentDb.TableDefs  
    If Left (tdf.name, 3) = "rmt" then   
        CurrentDB.Execuet "DELETE FROM " & tdf.name 
        CurrentDB.Execuet "INSERT INTO " & tdf.name & " SELECT * FROM " & Mid (tdf.name, 4)
    End If
Next tdf

此代码从远程数据库删除所有数据,而是从本地数据库插入数据。 查看这是否是您需要的同步方法,或者应该修改代码以适合您的需求。 向每个表中的每个记录添加LastUpdate字段(并在每次数据修改时对其进行更新)可以支持良好的同步决策:将哪些记录删除 ,将哪些记录插入 ,并在上述语句中添加适当的WHERE子句。
您还可以将每个表的常规UPDATE SQL 假定主键命名为表名,并带有“ ID”前缀

Dim strSQL As String, srsbl As String, PK As String
Dim tdf As DAO.TableDef, fld As DAO.Field
For Each tdf In CurrentDb.TableDefs  
    if Left (tdf.name, 3) = "rmt" then  
        srsTbl =  Mid (tdf.name, 4) 
        PK = "ID" & srsTbl 
        strSQL = "UPDATE " & tdf.name & " Inner Join " & srsTbl & " ON " &  tdf.name & "." & PK & " = " & srsTbl & "." & PK & " SET "
        For Each fld in tdf.Fields
            if fld.Name <> PK then
                strSQL = strSQL & tdf.name & "." & fld.Name & " = " & srsTbl & "." & fld.Name & ", "                    
            End If
        Next 
        ' Remove Last comma:
        strSQL = Left (strSQL, Len(strSQL) - Len(","))
        ' strSQL = strSQL & " WHERE "...
    End If
Next tdf

这是技术部分。 这里的主要问题是同步方法。 搜索数据库并发控制

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM