MS ACCESS - zapytanie działa poprzez kwerendę, a w VBA jest błąd. Jak przerobić zapytanie?

Odpowiedz Nowy wątek
2019-05-13 08:39
0

Dzień dobry wszystkim w ten jakże "słoneczny" dzień. Mam problemik - tak na dobry początek tygodnia. Zapytanie:

SELECT SLO_portfele.P_nazwaPortfela from ((SLO_portfele INNER JOIN Ewidencje on SLO_portfele.ID_portfela = Ewidencje.ID_portfela) INNER JOIN KP_KartyProjektow on KP_KartyProjektow.ID_kartyProjektu = Ewidencje.ID_kartyProjektu) WHERE KP_KartyProjektow.KP_krotkaNazwaProjektu = "Generowanie CWU"

działa mi fajnie poprzez kwerendę, jako zapytanie SQL wykonane w MS Accessie. Jednak jak staram się przerobić to na kod VBA robią się cuda, tutaj mój kodzik VBA:

strSql = "SELECT SLO_portfele.P_nazwaPortfela from SLO_portfele INNER JOIN Ewidencje on SLO_portfele.ID_portfela = Ewidencje.ID_portfela INNER JOIN KP_KartyProjektow on KP_KartyProjektow.ID_kartyProjektu = Ewidencje.ID_kartyProjektu WHERE KP_KartyProjektow.KP_krotkaNazwaProjektu = '" & (krotkaNazwaProjektu) & "' "
Set rst = CurrentDb.OpenRecordset(strSql)
przypisanie5 = rst!P_nazwaPortfela
rst.Close

Ten kod generuje błąd o komunikacie: Błąd składniowy (brak operatora). Co ciekawe, podobne kody wykonują się bez problemu, na przykład:

strSql = "SELECT Ewidencje.E_dataPlanowaneZakonczenieProjektu from Ewidencje INNER JOIN KP_KartyProjektow on Ewidencje.ID_kartyProjektu = KP_KartyProjektow.ID_kartyProjektu WHERE KP_KartyProjektow.KP_krotkaNazwaProjektu = '" & (krotkaNazwaProjektu) & "' "
Set rst = CurrentDb.OpenRecordset(strSql)
przypisanie2 = rst!E_dataPlanowaneZakonczenieProjektu
rst.Close

Co muszę poprawić w kodzie VBA?

Pozostało 580 znaków

2019-05-13 09:29
1

Technicznie kod jest prawidlowy, ale wystarczy, że nazwa krótka będzie zawierać ' i się posypie, dlatego, do diagnozy sprawdz dokładnie co masz w strSql bo inaczej nic nie mozna pomóc. Nadmienie że zapytania nie są takie same, aby były takie same musiałby kod vba wyglądać tak:

strSql = "SELECT SLO_portfele.P_nazwaPortfela from SLO_portfele INNER JOIN Ewidencje on SLO_portfele.ID_portfela = Ewidencje.ID_portfela INNER JOIN KP_KartyProjektow on KP_KartyProjektow.ID_kartyProjektu = Ewidencje.ID_kartyProjektu WHERE KP_KartyProjektow.KP_krotkaNazwaProjektu = """ & (krotkaNazwaProjektu) & """ "

Pozostało 580 znaków

2019-05-13 09:41
0

@Panczo: Generalnie zapytanie jest na bank poprawne. Nawet nie wiem co odpisać - kod działa w SQL, tylko w VBA. Nazwa spółki nigdy nie zawiera " ' ", ale to już pomijam. Jak mogę jeszcze próbować ugryźć problem?

Pozostało 580 znaków

2019-05-13 11:34

Teraz spojrzałem dokładniej, join-y nie są poprawne, zwróc uwagę na nawiasy:

((SLO_portfele INNER JOIN Ewidencje on SLO_portfele.ID_portfela = Ewidencje.ID_portfela) INNER JOIN KP_KartyProjektow on KP_KartyProjektow.ID_kartyProjektu = Ewidencje.ID_kartyProjektu)

w vba ich nie masz

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0