Прокручивать определенные столбцы, чтобы соответствовать условиям и обновлять столбцы - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь перестроить некоторую логику запроса на обновление MS Access с помощью кода VBA, поскольку в логике обновления отсутствует несколько аргументов.

Ссылка на диск Google table

В моей базе данных "Распределение счета-фактуры" есть 3 таблицы:

  • Account_Mapping
  • Load_ID
  • Status_ID.

Учетная запись счета по умолчанию в таблицах (Load_ID и Status_ID) обновляется учетной записью счета из таблицы Account_Mapping.

Первичным ключом является «ID», поскольку он существует в таблицах - Load_ID и Status_ID.К таблицам Account_Mapping и Load_ID могут быть присоединены:
Страна происхождения и Страна происхождения,
Страна происхождения Почтовый индекс и почтовый индекс,
Страна назначения и Место назначения, и
Почтовый код и Почтовый код назначения.

В таблице account_mapping есть несколько «isnotnull», это означает, что строковое значение может принимать все что угодно.

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

UPDATE 
   ([Load_ID] 
    INNER JOIN 
    Account_Mapping 
        ON  ([Load_ID].Origin country = Account_Mapping.[Origin country]) AND 
            ([Load_ID].Destination = Account_Mapping.[destination country]) AND 
            ([Load_ID].Origin country = Account_Mapping.[Origin country])) 
    INNER JOIN 
    Status_ID 
        ON [Load_ID].ID = Status_ID.[ID] 
SET 
    [Load_ID].Default Invoice Account = [Invoice Account], 
    Status_ID.[ID] = [Invoice Account]
WHERE 
    ((([Load_ID].Origin country)=));

В идеале цикл «для»

'A loop that iterates 4 columns looking for a match based on 4 matches.
'Also, incase of "isnotnull", it simply means ""not empty. 

Dim db as Database
Dim rs as Recordsset

Set db = CurrentDb
Set rs = db.OpenRecordset("tblestudents",dbOpenSnapshot)

my_rs.MoveLast
lastrecord = my_rs.RecordCount

For i = 0 To rs.RecordCount 
    For j = 0 To rs.RecordCount 
        For k = 0 To rs.RecordCount
            'if the [Load_ID].Origin country = Account_Mapping.[Origin country] 
            'And
            ' if the [Load_ID].Origin Postal code = Account_Mapping.[Postal code]
            '     And
            '  if the [Load_ID].Destination country = 
            'Account_Mapping.[Destination]
            '     And
            'if the [Load_ID]. Destination Postal code= 
            'Account_Mapping.[Destination Postal code]
            'update [Load_ID].Default Invoice Account with Account_Mapping.Invoice 'Account
            'for the "isnotnull" criteria, 
            '     Else
            'If Account_Mapping.[Origin Postal code] = "Isnotnull"
            '     Or
            'if the Account_Mapping. Destination= "Isnotnull"
            '     Or
            'if the Account_Mapping. Destination Postal code= "Isnotnull" 
            'update [Load_ID].Default Invoice Account with Account_Mapping.Invoice 'Account
            '   rs.MoveNext
        Next k
    Next j
Next i

rs.Close

Set.Close
Set rs = Nothing
db.Close

Как выполнить цикл по 3 таблицам, сопоставить условие и обновить значения столбцов таблицы.Большое спасибо за помощь.

...