/ / Update Table base na Innej Tabeli - sql, access-vba, ms-access-2007

Zaktualizuj bazę tabel w innej tabeli - sql, access-vba, ms-access-2007

Dotyczy to dwóch tabel w naszym programie Access 2007.

ZA "Zawiadowca" tabela składa się z zapisów stacji roboczych

ZA „Move-Add-Change” tabela składa się z rekordów ruchu, dodawania, zmiany kroków dla szczegółów Identyfikator projektu.

Stworzyłem zapytanie, aby pobrać wszystkie rekordy z „Move-Add-Change”, które pasują do a Identyfikator projektu. Następnie będę musiał przetworzyć w następujący sposób:

Przejdź przez każdy rząd "Pull MAC Records by Project # Qry" zapytanie (istnieje pole Sekwencja numeracja od 1 również tam liczona)

Jeśli pole Akcja w wierszu to Przenieś:

  • Jeśli „Do Loc” tego samego wiersza nie zaczyna się od TSS (używanego do Inventory Loc), aktualizuj rekordy w "Zawiadowca„o nazwie Loc równej „Z Loc” pole tego samego rzędu w "Pull MAC Records by Project # Qry" zapytanie, zmień jego wartość na pole To Loc tego samego wiersza w "Pull MAC Records by Project # Qry" pytanie

  • Jeśli „Do Loc” tego samego rzędu zaczyna się od TSS, usuń rekordy w "Zawiadowca" który ma Loc Name pasujący do „From Loc” tego samego rzędu "Pull MAC Records by Project # Qry" pytanie.

Jeśli pole Akcja w wierszu to Dodaj:

  • Utwórz nowy rekord w "Zawiadowca" z Loc Name to pole „To Loc” w wierszu

Jeśli pole Akcja w wierszu to Zmień:

  • Zrób to samo, co Move plus udpate Opis "Zawiadowca" korzystając z informacji z pola Notatki w tym samym wierszu "Pull MAC Records by Project # Qry" pytanie

Kod musi przejść jeden po drugim w wierszu "Pull MAC Records by Project # Qry" ponieważ możemy przenieść inną stację do miejsca, które właśnie się wyprowadziło.

Przykładowe wyniki częściowe z zapytania:

Project Id   Seq   Action   From Loc   To Loc       Notes
A123456      1     Move     WFC1234    TSSRepair    For OEM service
A123456      2     Move     WFC9999    WFC1234      Test station
...

Jeśli wywołam zapytanie, aby wykonać aktualizację, wygląda na to, że nie przechodzi przez wiersz po wierszu i prosi o naruszenie (myślę, że próbował zmienić WFC9999 do WFC1234 kiedy oryginał WFC1234 rekord nadal istnieje, powoduje duplikat

Oto SQL mojego zapytania:

UPDATE [Station Master], [Pull MAC Records by Project # Qry]
SET [Station Master].[Loc Name] = [Pull MAC Records by Project # Qry]![To Loc],
[Station Master].[Loc Function] = Left([Pull MAC Records by Project # Qry]![To Loc],3), [Station Master].[Loc #] = Right([Pull MAC Records by Project # Qry]![To Loc],Len([Pull MAC Records by Project # Qry]![To Loc])-3)
WHERE
((([Station Master].[Loc Name]) = [Pull MAC Records by Project # Qry]![From Loc]));

Co zrobiłem źle? Czy mogę mieć wszystkie te procesy wyłącznie w kodzie VBA (o czym nie mówię dobrze)?

Odpowiedzi:

0 dla odpowiedzi № 1

W zależności od tego, czy chcesz rzeczywistej pętli, możesz użyć VBA, aby to zrobić:

"Set your variables

Dim myR as Recordset
Dim myR2 as Recordset

"Then set your recordsets to the two tables you want to work with

Set myR = db.OpenRecordset("Station Master", dbOpenDynaset)
Set myR2 = db.OpenRecordset("Move-Add-Change", dbOpenDynaset)

"Now select the table you wish to work with until the end of file(EOF)

while Not myR.EOF
If myR![Action] = "Move" Then

"Code goes here if true

Else

"Code goes here if false

End If

"Move to the next record and loop if not end of file(EOF)

myR.MoveNext
Loop

"Make sure to set close your recordsets when done

Set myR = Nothing
Set myR2 = Nothing

Sprawdź również tutaj i tutaj więcej przykładów pętli.