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

У меня есть база данных реляционного доступа, и я хочу обновить таблицу на основе другой таблицы.Вы можете видеть отношения на картинке Query Picture.Оператор SQL как ниже.Когда я пытаюсь обновить, я сталкиваюсь с «Ваш запрос не включает указанное выражение« TRX900 »как часть статистической функции».

Но когда я пытаюсь увидеть в режиме просмотра таблицы данных, все в порядке.Ваша поддержка приветствуется.

Update
  (
    (
        Sites INNER JOIN Cells ON Sites.ID = Cells.SiteID
    ) INNER JOIN Cells_2G ON Cells.ID = Cells_2G.[Cell ID] 
  ) ,
  ImportedTRX INNER JOIN ActiveStatus ON ImportedTRX.[Active Status] = ActiveStatus.Status
Set
  Cells_2G.TRX900=Sum( IIF ( ImportedTRX.Frequency <=124 , 1,0 )  )
  , 
  Cells_2G.TRX1800=Sum( IIF ( ImportedTRX.Frequency >=512 , 1,0 )  )
WHERE 
  (
    ImportedTRX.[cell name]=[Sites].[SiteID] & [Cells].[Cell_Order]
    AND 
    ActiveStatus.YesNo=True
  )
;

Пример таблицы сайтов:

-----------------------
|    ID      | SiteID |
-----------------------
|     1      | T4000X |
-----------------------

Пример таблицы ячеек:

------------------------------------
|    ID      | SiteID | Cell_Order |
------------------------------------
|     1      |    1   | A          |
|     2      |    1   | B          |
|     3      |    1   | C          |
------------------------------------

Пример таблицы Cell_2G:

------------------------------------------------------------
|    ID      | CellID | Expected TRX900 | Expected TRX1800 |
------------------------------------------------------------
|     1      |    1   |        1        |        2         |
|     2      |    2   |        2        |        1         |
|     3      |    3   |        2        |        3         |
------------------------------------------------------------

Образец таблицы Imported TRX

-------------------------
| Cell Name | Frequency |
-------------------------
|  T4000XA  | 800       |
|  T4000XA  | 801       |
|  T4000XA  | 22        |
|  T4000XB  | 4         |
|  T4000XB  | 33        |
|  T4000XB  | 860       |
|  T4000XC  | 20        |
|  T4000XC  | 21        |
|  T4000XC  | 840       |
|  T4000XC  | 841       |
|  T4000XC  | 842       |
-------------------------

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

После некоторой попытки я использовал следующий код, но он пока медленный.

UPDATE 
  ImportedTRX, 
  (
    Sites INNER JOIN Cells ON Sites.ID=Cells.SiteID
  ) INNER JOIN Cells_2G ON Cells.ID= cells_2G.[Cell ID] 
SET 
  Cells_2G.TRX900 = DSUM("IIF(Frequency<=124,1,0)", "ImportedTRX", "[Cell Name]='"& Sites.SiteID & Cells.Cell_Order & "'")
  , 
  Cells_2G.TRX1800 = DSUM("IIF(Frequency>=512,1,0)", "ImportedTRX", "[Cell Name]='"& Sites.SiteID & Cells.Cell_Order & "'")
WHERE 
  (
    ImportedTRX.[Cell Name]=Sites.[SiteID] & Cells.[Cell_Order]
  );
0 голосов
/ 01 октября 2018

Существует два подхода к этой проблеме:

  1. Создание 2 запросов, 1 подготовка результата и 1 выполнение обновления, где
  2. Разбор с использованием VBA.

Я собираюсь поделиться вторым подходом.

Первый запрос - это, по сути, ваш текущий запрос, преобразованный в запрос SELECT, удалена только таблица, которую вы обновляете

Query Query1:

SELECT
  Sum( IIF ( ImportedTRX.Frequency <=124 , 1,0 )  ) As TRX900
  , 
  Sum( IIF ( ImportedTRX.Frequency >=512 , 1,0 )  ) As TRX1800,
  Cells.ID

FROM
    (
        Sites INNER JOIN Cells ON Sites.ID = Cells.SiteID
    ),
  ImportedTRX INNER JOIN ActiveStatus ON ImportedTRX.[Active Status] = ActiveStatus.Status
WHERE 
  (
    ImportedTRX.[cell name]=[Sites].[SiteID] & [Cells].[Cell_Order]
    AND 
    ActiveStatus.YesNo=True
  )
GROUP BY
  Cells.ID
;

Затем мы собираемся обновить таблицу, используя DLookUp и выполняя запросы из этого запроса:

Query Query2:

UPDATE Cells_2G 
SET
Cells_2G.TRX900= DLookUp("TRX900", "Query1", "ID = " & [Cell ID]),
Cells_2G.TRX1800= DLookUp("TRX1800", "Query1", "ID = " & [Cell ID])

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

К сожалению,это утверждение слишком сложно для меня, чтобы записать его в один запрос на обновление, поэтому этот двухэтапный подход - лучшее решение, не относящееся к VBA, которое я могу придумать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...