Ms access 在Access 2007中为标题添加别名

Ms access 在Access 2007中为标题添加别名,ms-access,Ms Access,好的,我的Access 2007数据库中有两个表(好吧,不止这些,但问题适用于这两个…): 及 现在,我构建了一个查询: SELECT p.part_no, s.supplier_nm, ss.supplier_nm AS special_supplier_nm FROM part AS p INNER JOIN supplier AS s ON p.supplier_id = s.supplier_id INNER JOIN supplier AS ss on p.supplie

好的,我的Access 2007数据库中有两个表(好吧,不止这些,但问题适用于这两个…):

现在,我构建了一个查询:

SELECT p.part_no, s.supplier_nm, ss.supplier_nm AS special_supplier_nm
FROM
  part AS p INNER JOIN
  supplier AS s ON p.supplier_id = s.supplier_id INNER JOIN 
  supplier AS ss on p.supplier_id = ss.supplier_id
一切都很好,它似乎适用于简单的select(如果查询本身有任何错误,这是为问题重新键入的工件,而不是问题的内容),并且也适用于代码应用程序


但问题是,如果打开查询的数据表视图,两个名称字段都标记为“供应商名称”。有什么办法可以解决这个问题吗?

在表格定义中是否设置了标题?这些定义将显示您的别名,而不是您的别名。由于您选择的列具有相同的标题(alias的reguardless),因此您将在数据表视图中看到这两个列的相同标题


您可以选择更改标题字段吗?将其保留为空将使用其给定名称(或视图中的别名)

是否在表定义中设置了标题?这些定义将显示您的别名,而不是您的别名。由于您选择的列具有相同的标题(alias的reguardless),因此您将在数据表视图中看到这两个列的相同标题


您可以选择更改标题字段吗?保留为空将使用其给定名称(或视图中的别名)

我在Access 2003中看到了同样的情况,即使是单个表查询。。。如果源字段指定了标题,则该标题将用作查询数据表视图中的列标题,而不管我是否在查询定义中为该字段指定了别名

除了从源表定义中删除标题外,我能找到的唯一解决方法是使用VBA手动重新分配字段的标题属性。Query1包含一个名为id的字段,该字段在源表中的标题为“Foo id”:

CurrentDb.QueryDefs("Query1").Fields("id").Properties("Caption") = "foo_id"
该命令确实导致查询数据表视图使用foo_id作为列标题

如果将别名指定给查询字段,则该别名将用作查询的“字段”集合中的名称。您可以使用以下步骤检查查询的字段名及其标题:

Public Sub InspectQueryFieldCaptions(ByVal pQuery As String)
    Dim fld As DAO.Field
    Dim strMsg As String

On Error GoTo ErrorHandler

    For Each fld In CurrentDb.QueryDefs(pQuery).Fields
        Debug.Print "Field: " & fld.Name, "Caption: " & fld.Properties("Caption")
    Next fld

ExitHere:
    Set fld = Nothing
    On Error GoTo 0
    Exit Sub

ErrorHandler:
    Select Case Err.Number
    Case 3270 ' Property not found. '
        Debug.Print "Field: " & fld.Name, "no caption"
        Resume Next
    Case Else
        strMsg = "Error " & Err.Number & " (" & Err.Description _
            & ") in procedure InspectQueryFieldCaptions"
        MsgBox strMsg
        GoTo ExitHere
    End Select
End Sub

我在Access 2003中看到了同样的情况,即使是一个表查询。。。如果源字段指定了标题,则该标题将用作查询数据表视图中的列标题,而不管我是否在查询定义中为该字段指定了别名

除了从源表定义中删除标题外,我能找到的唯一解决方法是使用VBA手动重新分配字段的标题属性。Query1包含一个名为id的字段,该字段在源表中的标题为“Foo id”:

CurrentDb.QueryDefs("Query1").Fields("id").Properties("Caption") = "foo_id"
该命令确实导致查询数据表视图使用foo_id作为列标题

如果将别名指定给查询字段,则该别名将用作查询的“字段”集合中的名称。您可以使用以下步骤检查查询的字段名及其标题:

Public Sub InspectQueryFieldCaptions(ByVal pQuery As String)
    Dim fld As DAO.Field
    Dim strMsg As String

On Error GoTo ErrorHandler

    For Each fld In CurrentDb.QueryDefs(pQuery).Fields
        Debug.Print "Field: " & fld.Name, "Caption: " & fld.Properties("Caption")
    Next fld

ExitHere:
    Set fld = Nothing
    On Error GoTo 0
    Exit Sub

ErrorHandler:
    Select Case Err.Number
    Case 3270 ' Property not found. '
        Debug.Print "Field: " & fld.Name, "no caption"
        Resume Next
    Case Else
        strMsg = "Error " & Err.Number & " (" & Err.Description _
            & ") in procedure InspectQueryFieldCaptions"
        MsgBox strMsg
        GoTo ExitHere
    End Select
End Sub
试试这个:

 SELECT p.part_no, s.supplier_nm, (ss.supplier_nm + '') AS special_supplier_nm. . .
但是,如果您使用的是查询生成器,则可能需要注意不要首先使用“默认”别名(来自标题)构建查询,因为在某些不可见的元数据中,这似乎会一直存在

此外,如果可以在Access的“查询生成器”中编辑此查询,如果右键单击相关字段,则可以在查询中设置标题属性,这将覆盖原始表列上的任何标题。

尝试以下操作:

 SELECT p.part_no, s.supplier_nm, (ss.supplier_nm + '') AS special_supplier_nm. . .
但是,如果您使用的是查询生成器,则可能需要注意不要首先使用“默认”别名(来自标题)构建查询,因为在某些不可见的元数据中,这似乎会一直存在

此外,如果可以在Access的“查询生成器”中编辑此查询,如果右键单击相关字段,则可以在查询中设置标题属性,这将覆盖原始表列上的任何标题。

解决方法

好吧,这一条让我发疯,因为我使用了来自我们公司财务、人力资源和CRM系统的链接(导入)表的大量数据,所有这些数据都是由同一个开发人员建立的,他认为在每个索引“ID:”上加上标题是个好主意。但是,当你有一个聚合,它将许多这些聚集在一起,你会得到一个容易出错的大混乱,因为随后的查询无法计算出哪个“ID:”是哪个。他是我的解决方案:

与其简单地传递值,而只是传递标题:如果要重新添加标题的字段是一个值字段,只需重新标记它并将其乘以1,就像这样(在本例中,my per_id字段是标题id:):

这将产生一个新字段,名为Perid

如果它是一个文本字段,只需将其与以下内容连接:

Perid: ""&[fname]
它有效。

有效的解决方法

好吧,这一条让我发疯,因为我使用了来自我们公司财务、人力资源和CRM系统的链接(导入)表的大量数据,所有这些数据都是由同一个开发人员建立的,他认为在每个索引“ID:”上加上标题是个好主意。但是,当你有一个聚合,它将许多这些聚集在一起,你会得到一个容易出错的大混乱,因为随后的查询无法计算出哪个“ID:”是哪个。他是我的解决方案:

与其简单地传递值,而只是传递标题:如果要重新添加标题的字段是一个值字段,只需重新标记它并将其乘以1,就像这样(在本例中,my per_id字段是标题id:):

这将产生一个新字段,名为Perid

如果它是一个文本字段,只需将其与以下内容连接:

Perid: ""&[fname]

它是有效的。

是的,我说的是表定义中的标题集,我完全观察到了您描述的行为(有一段时间我将其设置为空白)。这其实没什么大不了的,因为我几乎不会向用户展示数据表&我可以重新定义表单和报表上的标签。我是