Database 将两个Microsoft Access数据库合并为一个数据库,并使用表单在其中进行选择
所以我被分配去处理两个相同的数据库,它们的制作非常糟糕。两者都分为前端/后端,但具有不同的数据 是否可以将两个数据库合并为一个,并创建一个表单,以允许用户选择与哪个“数据库”交互 为了澄清,使用这些数据库的学校有秋季学期和春季学期的数据库。两者包含完全相同的表单/查询/表,但具体数据不同。e、 也许一个老师在秋天教3节课,但在春天教4节课(尽管数据库比这个复杂得多)。数据的结构保持不变,但具体数据会根据数据库的不同而变化 因此,如果他们需要访问数据,他们需要打开相应的数据库。因此,他们不断地打开/关闭不同的数据库。他们想要做的是能够只使用一个数据库并在秋季/春季之间切换Database 将两个Microsoft Access数据库合并为一个数据库,并使用表单在其中进行选择,database,ms-access,Database,Ms Access,所以我被分配去处理两个相同的数据库,它们的制作非常糟糕。两者都分为前端/后端,但具有不同的数据 是否可以将两个数据库合并为一个,并创建一个表单,以允许用户选择与哪个“数据库”交互 为了澄清,使用这些数据库的学校有秋季学期和春季学期的数据库。两者包含完全相同的表单/查询/表,但具体数据不同。e、 也许一个老师在秋天教3节课,但在春天教4节课(尽管数据库比这个复杂得多)。数据的结构保持不变,但具体数据会根据数据库的不同而变化 因此,如果他们需要访问数据,他们需要打开相应的数据库。因此,他们不断地打开
这有可能吗 在不知道数据的确切结构的情况下,很难给出具体的答案,但我的直觉是这两个数据库可以结合起来。合并同名表中的所有数据,但在任何会产生重复数据的表中添加“Serm”列。然后,只需创建应用程序前端,以便用户在必要时选择要查看的学期,并将其传递给检索数据的查询。正如您所指出的,您甚至可以从一开始就携带“学期”值,并将其从一个屏幕传递到另一个屏幕(带有全局应用程序级别变量)
在我的职业生涯中,我已经有一段时间没有在Access中编写代码了,但我相信有一种方法可以实现您的目标。也许可以发布更多关于您的特定数据结构的详细信息,我们都可以加入并给出一些建议 我认为应该可以使用原始表名为每个表创建查询,并使用额外的一两个字母为新的组合表命名。假设您有一个表Students,新表成为JointStudents,您创建了一个查询Students:
SELECT F1, F2, F3 FROM JointStudents WHERE Semester=Forms!PickSem!txtSemester
这意味着任何引用表Students的表单或查询现在都将使用内置的过滤器接收查询Students。这是我多年来多次使用的表链接函数。为了使用它,您必须提供两个函数:
Public Function LinkTables() As Boolean
On Error GoTo HandleError
Dim tdf As TableDef
Dim tdfNew As TableDef
Dim strName As String
Dim tdfs As TableDefs
Dim strSource As String
Dim strConnect As String
Dim blnThrowErr As Boolean
Dim arr() As Variant
Set tdfs = CurrentDb.TableDefs
Dim intCount As Integer
Dim i As Integer
intCount = tdfs.Count
strConnect = GetConnectionString()
i = 1
'Save a copy of the existing table names'
ReDim arr(tdfs.Count, 2)
For Each tdf In tdfs
strName = tdf.Name
If ThisTableShouldBeChanged(strName) Then
If tdf.Connect <> "" Then
strSource = tdf.SourceTableName
arr(i, 1) = strName
arr(i, 2) = strSource
i = i + 1
End If
End If
Next tdf
tdfs.Refresh
Dim strNameRep As String
'Create new linked tables'
For i = 1 To UBound(arr)
If arr(i, 1) <> "" Then
Set tdfNew = New TableDef
strName = arr(i, 1)
tdfNew.Name = arr(i, 1)
tdfNew.SourceTableName = arr(i, 2)
tdfNew.Connect = strConnect
strNameRep = strName & "_temp"
'rename the old table'
tdfs(strName).Name = strNameRep
tdfs.Refresh
tdfs.Append tdfNew
If Err.Number <> 0 Then
Debug.Print Err.Description
tdfs(strNameRep).Name = strName
Err.Clear
Else
tdfs.Delete strNameRep
End If
On Error GoTo HandleError
End If
Next i
tdfs.Refresh
LinkTables = True
ExitHere:
Exit Function
HandleError:
MsgBox Err.Description & " (" & Err.Number & ")"
LinkTables = False
Resume ExitHere
End Function
Public函数LinkTables()作为布尔值
关于错误转到HandleError
将tdf调暗为TableDef
将tdfNew变暗为TableDef
将strName设置为字符串
将tdfs变暗为TableDefs
作为字符串的Dim strSource
作为字符串的Dim strConnect
Dim blnThrowErr作为布尔值
Dim arr()作为变量
设置tdfs=CurrentDb.TableDefs
Dim intCount为整数
作为整数的Dim i
intCount=tdfs.Count
strConnect=GetConnectionString()
i=1
'保存现有表名的副本'
ReDim arr(tdfs.Count,2)
对于tdfs中的每个tdf
strName=tdf.Name
如果该表需要更改(strName),则
如果tdf.Connect为“”,则
strSource=tdf.SourceTableName
arr(i,1)=strName
arr(i,2)=strSource
i=i+1
如果结束
如果结束
下一个tdf
刷新
作为字符串的Dim strNameRep
“创建新的链接表”
对于i=1至UBound(arr)
如果arr(i,1)“,则
设置tdfNew=新表格定义
strName=arr(i,1)
tdfNew.Name=arr(i,1)
tdfNew.SourceTableName=arr(i,2)
tdfNew.Connect=strConnect
strNameep=strName&“临时”
'重命名旧表'
tdfs(strName).Name=strNameRep
刷新
追加tdfNew
如果错误号为0,则
调试.打印错误说明
tdfs(strNameRep).Name=strName
呃,明白了
其他的
删除strNameRep
如果结束
关于错误转到HandleError
如果结束
接下来我
刷新
LinkTables=True
出口:
退出功能
手柄错误:
MsgBox错误说明(“&Err.Number&”)
LinkTables=False
继续离开那里
端函数
一个初始成本最低的解决方案,即设置一个接口链接到适当的学期,仍然需要触摸所有表单并添加另一个表单(用于用户友好地控制“活动”数据库),并且您仍然需要为今后所需的任何更改承担额外成本(因为它们将在两个地方而不是一个地方制作)
您不必手动更改表:您可以编写SQL来完成此操作。您可以编写一个过程,逐步遍历现有表,添加一个“学期”列并填充它…最好在两个数据库中运行它,以便您也可以填充同一过程中的列。如果两个数据库中的表名称相同