【问题标题】:Microsoft Access -> SQL Server - blank/default SchemaMicrosoft Access -> SQL Server - 空白/默认架构
【发布时间】:2016-12-13 04:29:53
【问题描述】:

我们有一个大型 MS Access 应用程序,它使用 SQL Server 作为数据库(大约 200 个表)。

我们希望将其转换为多租户数据库,其中我们将拥有一个大型 SQL Server 数据库。在数据库内部,每个客户端都将在自己的模式中拥有自己的一组表。例如,十个客户端使用数据库 - 该数据库中有十个模式。

然后我们会将其迁移到 Azure 并将 MS Access 应用程序作为 Azure RemoteApp 运行。

我们希望为每个客户端创建一个 Active Directory 用户组,并将其映射到该客户端的默认 SQL Server 架构。

这个想法是将新用户添加到相关的 AD 用户组中,并且默认情况下会使用他们的数据映射到正确的架构,

我们遇到的问题是 MS Access 链接表包含硬编码的显式架构(默认为 dbo)。

任何人都可以想出一种方法来在 MS Access 中存储“源”/外部/链接表,而无需指定架构。例如。只是“tblSales”,而不是“dbo.tblSales”。

【问题讨论】:

    标签: sql-server database azure ms-access


    【解决方案1】:

    典型的重​​新链接代码如下所示(仅片段):

    For Each tdf In dbs.TableDefs
        strName = tdf.Name
        If Asc(strName) <> Asc("~") Then
            If InStr(tdf.Connect, cstrDbType) = 1 Then
                tdf.Connect = strConnect
                tdf.RefreshLink
                Debug.Print Timer, tdf.Name, tdf.SourceTableName, tdf.Connect
                DoEvents
            End If
        End If
    Next
    

    除了 dbo 之外,我没有其他架构可供测试,而且我不确定属性 SourceTableName 是否为只读。如果没有,可以调整:

    For Each tdf In dbs.TableDefs
        strName = tdf.Name
        If Asc(strName) <> Asc("~") Then
            If InStr(tdf.Connect, cstrDbType) = 1 Then
                tdf.Connect = strConnect
                tdf.SourceTableName = strNewSchema & "." & Split(tdf.SourceTableName, ".")(1)
                tdf.RefreshLink
                Debug.Print Timer, tdf.Name, tdf.SourceTableName, tdf.Connect
                DoEvents
            End If
        End If
    Next
    

    如果它是只读的,则必须删除链接表并重新创建链接。

    也就是说,我不确定您对每个客户端的架构的想法是否是个好主意。我们有类似的考虑,并决定简单地为每个客户创建一个数据库。如果不出意外,客户端的备份和恢复将大大简化。

    【讨论】:

    • 感谢您的回复。我们希望为许多客户提供一个具有单个数据库的应用程序代码副本。拥有多个 Access 代码副本,每个副本都有不同的外部数据库链接,这并不实际或有效,对于 200 个表,每次登录都重新链接也不实际。使用模式来支持多租户数据库应该可以工作,我们只需要一种方法来弄清楚如何从 MS Access 前端处理它。
    • 你似乎有点困惑。在任何情况下,您都只需要一个前端,但您必须为每个客户端重新链接一次,无论它应该链接到特定模式还是特定数据库。当(重新)链接到特定模式或数据库时,无论用户登录多少次,前端都会保持不变。简单的重新链接代码可用于浏览,但对于现实生活中的应用程序,您更喜欢用体面的表单和错误处理来包装它。
    猜你喜欢
    • 1970-01-01
    • 2010-11-01
    • 2011-04-17
    • 2018-07-28
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    相关资源
    最近更新 更多