0

我有一个主表和多个其他表,我想将每个表链接到主表的一行。

主表“Data”由列 (Name, x, y) 组成,其中“Name”是主键,所有值都是唯一的。

其他每个表都有列 (Name2, z),其中“Name2”的值在每一行中都是相同的,并且也对应于表名。

我想让每个表成为“数据”的子数据表,其中“数据”中的每一行显示表中与其名称对应的值。(即其中名称 = 名称 2)

以下是我到目前为止的内容,但代码不起作用,因为需要从子表单运行 linkchildfields 和 linkmasterfields。(?)一旦代码到达 linkchildfields 行,我得到的错误是“找不到属性”。

我将是数据库的唯一用户。简而言之,我正在寻找一种方法来自动化将一个表设置为另一个表的子数据表的过程。我可以直接从访问表手动执行此操作,但我想在创建新表并需要将其设置为主表的子数据表时自动执行此操作。

谢谢。

Sub STS()

Dim i As TableDef
Dim db As Database
Dim tbl As TableDef

Set db = CurrentDb()
Set tbl = db.TableDefs("Data")

For Each i In db.TableDefs
    If Left$(i.Name, 4) <> "MSys" Or i.Name <> "Data" Then
        tbl.Properties("SubdatasheetName") = i.Name
        tbl.Properties("LinkChildFields") = "Name2"
        tbl.Properties("LinkMasterFields") = "Name"
    End If
Next
End Sub
4

2 回答 2

0

您为什么要尝试使用代码来执行此操作?此功能通过关系的概念内置到 Access 中,为您可能添加的任何新表设置实际上需要 2 分钟。查看这些文档以了解它是如何完成的,这两个文档都是由 Microsoft 人员撰写的:

创建、编辑或删除关系

如何在 Access 数据库中定义表之间的关系

于 2013-10-31T14:11:05.660 回答
0

迟到了,但是由于我在链接表方面遇到了这个问题,并且此功能将有助于查询。

如果您没有该属性,则必须创建它。

我使用此代码将 subdatasheetName 添加到链接的 sql 表

use:
    TBSetAttrib "TableName", "SubdatasheetName", "subtable"
    TBSetAttrib "TableName", "LinkChildFields", "subTableLinkID"
    TBSetAttrib "TableName", "LinkMasterFields", "masterTableLinkID"


Sub TBSetAttrib(tbName As String, tbAttribute As String, tbValue As String)
    Dim DB As DAO.Database
    Set DB = CurrentDb
    Dim tb As TableDef, p As Property
    Set tb = DB.TableDefs(tbName)

    On Error GoTo noAttribTBSetAttrib
    tb.Properties(tbAttribute).Value = tbValue
    
saidaTBSetAttrib:
    Debug.Print tbName; " "; tbAttribute; ": " & tb.Properties(tbAttribute).Value
    Set DB = Nothing
    Exit Sub
noAttribTBSetAttrib:
    Dim np As Property
    Set np = tb.CreateProperty(tbAttribute, dbText, tbValue)
    tb.Properties.Append np
    GoTo saidaTBSetAttrib
End Sub
于 2022-01-20T14:15:36.500 回答