Как использовать QueryDef, чтобы установить имя - PullRequest
0 голосов
/ 06 июня 2019

Мне нужно экспортировать запрос, чтобы преуспеть из моей базы данных доступа. Есть несколько правил и условий, которым я должен следовать, чтобы гарантировать, что я получаю правильную информацию.

Самым большим препятствием является необходимость выбора имени объекта для экспорта. Я управляю системой для 8 городов, и каждый город имеет несколько соглашений об именах для своей системы. Мне нужно экспортировать информацию, показывающую соглашение об именах, запрошенное городом.

Сначала я создал запрос со всей необходимой мне информацией. Затем я создал таблицу из запроса, заставив ее экспортировать в виде таблицы. Оттуда я использовал TableDef, чтобы изменить имя поля имени (пример = "name1" на "Имя") на более профессиональный вид. Наконец, основываясь на том, какое имя должно присутствовать, я удаляю ненужные имена полей и экспортирую их в 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", но я получаю "Ошибка недопустимой операции"

1 Ответ

1 голос
/ 06 июня 2019

Просто используйте динамический SQL и передайте ему строку в QueryDef.SQL свойство:

SQL (сохранить ниже как объект запроса, используя Query Design, с именем 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!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...