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"
pytanieJeś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 № 1W 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.