Mam przycisk, który powinien wziąć pole "adres" z bieżącego rekordu i dodaj go do tabeli TaddressCorrectionScions, która składa się z tylko identyfikatora (autonumber) i adresu. Jednak gdy uruchomię poniższy kod, podpowiadam o wartość dla tempaddress. Jak przechowywać pole "adresu" bieżącego rekordu jako tempaddress?

Dim SQL As String
Dim TempAddress As String
TempAddress = Me.Address ' This is the part that's not working
SQL = "INSERT INTO TAddressCorrectionExclusions (Address) VALUES (TempAddress)"
DoCmd.RunSQL SQL
0
Robert Patrician 15 wrzesień 2020, 21:37

1 odpowiedź

Najlepsza odpowiedź

Ponieważ TempAddress nie jest polem nazwanym w żadnym kontekście odwołującego, silnik zapytania monituje o taką wartość (co jest naprawdę błędem, jeśli nie używa GUI MS Access GUI). Zauważ, jak używasz TempAddress jak inne identyfikatory: {x2}} i Address.

Pamiętaj, że SQL jest procesem oddzielna z VBA i nie wie nic o swojej warstwie aplikacji. Obejmuje to SQL z innymi warstwami aplikacji: Java, Python, PHP, C # itp.

INSERT INTO TAddressCorrectionExclusions (Address) VALUES (TempAddress)

To, co naprawdę zamierzasz zrobić, jest przekazanie podstawowej wartości zmiennej VBA, tempaddress , do zapytania SQL. Dlatego zwykłą odpowiedzią jest połączenie zmiennych VBA na zapytanie SQL, zawijanie wartości ciągu w cytatach.

SQL = "INSERT INTO TAddressCorrectionExclusions (Address) VALUES ('" & TempAddress & "')"

Jednakże, jeszcze lepszym rozwiązaniem jest użycie sterowania formularza bezpośrednio w zapisanym zapytaniu, który rozpoznaje wartość jako parametr, jeśli zostanie otwarty formularz. To skutecznie oddziela SQL z VBA do czytelności i konserwacji.

sql (Zapisz jako zapisany zapytanie dostępu; Dostosuj nazwę "Myform")

INSERT INTO TAddressCorrectionExclusions (Address) VALUES (Forms!myform!Address)

VBA (pojedyncze polecenie jednorazowe; Zapytania o działanie nie muszą być zamknięte)

DoCmd.OpenQuery "mySavedAppendQuery"
1
Parfait 15 wrzesień 2020, 20:38