我们有一个大型MS Access应用程序,它使用SQL Server作为数据库(大约200个表)。
我们希望将其转换为多租户数据库,我们将拥有一个大型SQL Server数据库。在数据库内部,每个客户端将在自己的模式中拥有自己的一组表。例如,十个客户端使用数据库 - 该数据库中有十个模式。
然后,我们将其迁移到Azure,并将MS Access应用程序作为Azure RemoteApp运行。
我们希望为每个客户端创建一个Active Directory用户组,并将其映射到该客户端的默认SQL Server架构。
我们的想法是将新用户添加到相关的AD用户组中,默认情况下会将其映射到正确的架构及其数据,
我们遇到的问题是MS Access链接表包含一个硬编码的显式Schema(默认为dbo)。
任何人都可以想到一种在MS Access中存储“源”/外部/链接表而无需指定架构的方法。例如。只是“tblSales”,而不是“dbo.tblSales”。
答案 0 :(得分:0)
典型的重新链接代码是这样的(仅限剪辑):
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
如果它是只读的,则必须删除链接表并重新创建链接。
那就是说,我不确定你对每个客户的架构的想法是不是一个好主意。我们有类似的考虑,并决定只为每个客户创建一个数据库。如果没有别的,客户端备份和恢复将大大简化。