别名Access 2007中的标题

时间:2010-10-19 22:42:07

标签: ms-access

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

part
  part_no
  ...
  supplier_id
  special_supplier_id
  ...

supplier
  supplier_id
  supplier_nm      (NB: Caption="Supplier Name")
  special_supplier_flg

现在我已经构建了一个查询:

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

一切都很好,它似乎适用于简单的选择(如果查询本身有任何错误,它是为问题重新输入它的工件,而是什么问题是的,并且也应该适用于代码应用程序。

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

4 个答案:

答案 0 :(得分:3)

对于单表查询,我在Access 2003中看到了同样的事情......如果源字段分配了标题,则该标题将用作查询数据表视图中的列标题,无论是否我在查询定义中为字段指定别名。

除了从源表定义中删除Caption之外,我可以找到解决它的唯一方法是手动使用VBA重新分配字段的Caption属性。 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

答案 1 :(得分:2)

试试这个:

 SELECT p.part_no, s.supplier_nm, (ss.supplier_nm + '') AS special_supplier_nm. . .

但是,如果您正在使用查询构建器,则可能需要注意不要首先使用“默认”别名(来自标题)构建查询,因为这似乎会隐藏在某些不可见的元数据中。

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

答案 2 :(得分:0)

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

您是否可以选择更改字幕字段?将其留空将使用其给定的名称(或视图中的别名)

答案 3 :(得分:0)

工作的替代方法

好的,这个让我疯狂,因为我使用来自我们公司的财务,人力资源和客户关系管理系统的链接(导入)表格中的大量数据,这些数据都是由同一个开发人员设置的,他们认为每个索引都标题为“ID:”是一个好主意。但是当你有一个聚合时,会把很多这些聚集在一起,你会得到一个很大的错误,因为后续的查询无法解决哪个“ID:”就是哪个。他是我的解决方案:

而不是简单地传递值,只是简单地传递标题:如果要重新标题的字段是值字段,只需重新标记它并将其乘以1就像这样(在我的per_id字段中是标题ID:):

 Perid: 1*[pe_id]

这会产生一个标记为Perid的新字段

如果它是一个文本字段,只需将它连接起来就像这样:

Perid: ""&[fname]

有效。