如何使用QueryDef设置名称

时间:2019-06-06 18:03:19

标签: vba access-vba

我需要从我的访问数据库中导出查询以使其表现出色。要确保我获得正确的信息,我需要遵循的规则和条件很少。

最大的障碍是必须选择要导出的对象名称。我正在为8个城镇管理一个系统,每个城镇都有针对其系统的多个命名约定。我需要导出显示城镇要求的命名约定的信息。

我首先要做的是创建包含所有我需要的信息的查询。然后,我确实从查询中创建了表格,使其可以导出为表格。从那里,我使用TableDef将名称字段的名称(例如=“ name1”更改为“ Name”)更改为更专业的外观。最后,根据需要显示的名称,我删除不需要的字段名称,然后导出到excel。

我发现此QueryDef的运行方式与以前相同,但重命名该字段时出现问题。

Select Case displayName
    Case Is = "Name 1"
        db.QueryDefs(queryName).Fields("name1").name = "Name"
        db.QueryDefs(queryName).Fields("name2").VisibleValue = False
    Case Else
        MsgBox ("Name does not extist in system")
End Select

我希望“ name1”字段为“ Name”,但会收到“ Invalid Operation Error”

1 个答案:

答案 0 :(得分:1)

仅使用动态SQL并将其传递给QueryDef.SQL属性中的字符串:

SQL (以下使用查询设计另存为查询对象,名为mySavedQuery)

SELECT * FROM myOriginalQueryOrTable

VBA (请参阅对mySavedQuery的所有引用)

Dim db   As Database
Dim qdef As QueryDef

Set db = CurrentDb
Set qdef = db.QueryDefs("mySavedQuery")              ' SQL QUERY ABOVE

' UPDATE SQL
Select Case displayName
     Case "Name 1"
     qdef.SQL = "SELECT name1 As [Name], ..." _
              & " FROM myOriginalQueryOrTable" _
              & " WHERE ..." _
              & " GROUP BY ..." _
              & " ORDER BY ..."

     Case Else
     MsgBox ("Name does not extist in system")
End Select

Set qdef = Nothing                                   ' SAVES NEW SQL
Set db = Nothing

' EXPORT TO EXCEL
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "mySavedQuery", _
      "C:\Path\To\Output\Spreadsheet.xlsx", True, "OUTPUT!"