Ссылка на запрос в другом событии в базе данных - PullRequest
0 голосов
/ 26 мая 2018

Имеется следующий код для запроса кросс-таблицы, который экспортируется в Excel.В начале кода я ссылаюсь на запрос, который я создал в сетке QBE и который называется 1ACTMasterQuery , и все работает.

Но я скопировал этот SQL в VBA в строку с именем MasterPivot , и он прекрасно работает.Но я хочу, чтобы следующее использовало PivotMaster вместо 1ACTMasterQuery .

Как изменить код, чтобы использовать данные из PivotMaster ?

Ошибка говорит, что не может найти PivotMaster .Я знаю, что это запрос на выборку, и ему нужно подделать систему, чтобы она считала таблицу следующим образом:

     CurrentDb.CreateQueryDef "SKbyYrByMo", SKbyYrByMo

Пробовал несколько догадок, но ни одно из них не сработало.

 SKbyYrByMo = "TRANSFORM Sum([1ACTMasterQuery].Extension) AS SumOfExtension" 
 & _
 " SELECT [1ACTMasterQuery].Year, [1ACTMasterQuery].Sku, 
 Sum([1ACTMasterQuery].Extension) AS [Total Of Extension]" & _
 " FROM 1ACTMasterQuery" & _
 " GROUP BY [1ACTMasterQuery].Year, [1ACTMasterQuery].Sku" & _
 " PIVOT [1ACTMasterQuery].MonthNo"

 'Create the view/query to like a table object
 CurrentDb.CreateQueryDef "SKbyYrByMo", SKbyYrByMo

 '-----Set Query Running Status--------------------------------------------- 
 -
 Me.QueryStatus.Visible = True
 Me.QueryStatus.SetFocus
 Me.QueryStatus.BackColor = vbGreen
 Me.QueryStatus.Text = "     Processing"

---------------------------------------------------------------------------

DoCmd.TransferSpreadsheet _
acExport, _
acSpreadsheetTypeExcel12Xml, _
"SKbyYrByMo", _
"C:\Users\John\Desktop\RSExcel.xlsx", _
True

CurrentDb.QueryDefs.Delete "SKbyYrByMo"

'-----End query Staus-------------------------------------------------------
Me.QueryStatus.Text = " "
Me.SKbYbM.SetFocus
Me.QueryStatus.Visible = False
MsgBox "Complete"

Спасибо

1 Ответ

0 голосов
/ 28 мая 2018

Рассмотрим следующую процедуру для создания и уничтожения необходимых запросов с помощью QueryDefs .Кроме того, используйте псевдоним таблицы в инструкциях SQL, чтобы сократить длину и легко заменить исходную таблицу:

Dim qdef As QueryDef
Dim strSQL As String 

' DELETE QUERIES IF THEY EXIST
For Each qdef in CurrentDb.QueryDefs
   If qdef.Name = "SKbyYrByMo" Or qdef.Name = "PivotMaster" Then
      CurrentDb.QueryDefs.Delete qdef.Name
   End If
Next qdef

' CREATE PivotMaster QUERY
strSQL = "SELECT d.Account_Number, d.Transaction_Type, d.Sku, " & _
         "       d.Extension, d.Year, d.MonthNo" & _
         " FROM dbo_Transaction_Table d"

Set qdef = CurrentDb.CreateQueryDef("PivotMaster", strSQL)
Set qdef = Nothing     ' SAVE NEW QUERY

' CREATE SKbyYrByMo QUERY
strSQL = "TRANSFORM Sum(t.Extension) AS SumOfExtension" & _
         " SELECT t.Year, t.Sku, Sum(t.Extension) AS [Total Of Extension]" & _
         " FROM 1ACTMasterQuery t" & _
         " GROUP BY t.Year, t.Sku" & _
         " PIVOT t.MonthNo"

' REPLACE SOURCE TABLE
strSQL = Replace(strSQL, "1ACTMasterQuery", "PivotMaster")

Set qdef = CurrentDb.CreateQueryDef("SKbyYrByMo", strSQL)
Set qdef = Nothing     ' SAVE NEW QUERY

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
        "SKbyYrByMo", "C:\Users\John\Desktop\RSExcel.xlsx", True
...