Cainoor [ Mów mi wuju ]
MS Access - problem ze składnią SQL
:)
Narmo [ Naczelny Maruda ]
Klikasz 2 razy ma makro czy może wybierasz "Projektuj"? :)
Cainoor [ Mów mi wuju ]
Dzięki Narmo.
Cainoor [ Mów mi wuju ]
W czym problem?
szkolenie_id = Me.PracSzkol_szkolenie_id.Value
sql = "INSERT INTO Certyfikaty ( certyfikat_nazwa, certyfikat_opis, certyfikat_organizator_id )" & _
"SELECT [Szkolenia].[szkolenie_nazwa], [Szkolenia].[szkolenie_opis], [Szkolenia].[szkolenie_organizator_id]" & _
"FROM Szkolenia" & _
"WHERE [Szkolenia].[szkolenie_id]='" & szkolenie_id & "';"
DoCmd.RunSQL sql
Runtime error 3131
Błąd składniowy w klauzuli FROM
Azzie [ bonobo ]
Nie znam sie na Accesie ale od kiedy w skladni SQL stosuje sie &?
Grzesiek [ - ! F a f i k ! - ]
Cainoor ---> nie bardzo rozumiem, co chcesz zrobić.
Jak jest INSERT INTO musi też być VALUES
Edit:
Azzie ---> pewnie to wrzuca w C# albo VB, a & to po prostu łącznik z linijką niżej, żeby wizualnie było ładniej :-)
Cainoor [ Mów mi wuju ]
Azzie to jest VBA do Accessa i tak sie przenosi linie.
Grzesiek ---> To VALUES to są wartości kolumn wiersza z innej tabeli. Stad ten SELECT.
Azzie [ bonobo ]
Aha to sorry :)
Grzesiek [ - ! F a f i k ! - ]
Wygląda na początku, że chcesz coś wstawić w tabele Certyfikaty, ale nie piszesz jakie wartości, później nagle do SELECTa przechodzisz ...
ElNinho [ Konsul ]
Grzesiek - oczywiscie ze nie musi byc VALUES
tzw insert z selecta
Grzesiek [ - ! F a f i k ! - ]
Spróbuj tak może ...
sql = "INSERT INTO Certyfikaty ( certyfikat_nazwa, certyfikat_opis, certyfikat_organizator_id )" & _
"VALUES (SELECT [Szkolenia].[szkolenie_nazwa], [Szkolenia].[szkolenie_opis], [Szkolenia].[szkolenie_organizator_id]" & _
"FROM Szkolenia" & _
"WHERE [Szkolenia].[szkolenie_id]='" & szkolenie_id & )"';"
Hmmm insert z selecta ? Zaraz sprawdzę.
ElNinho [ Konsul ]
Cainoor - sprobu wziac selecta wewnetrzengo w nawiasy tzn
insert into certyfikaty (..) (select ....)
Grzesiek:
przeciez to z values sie nie wykona w takiej postaci
Cainoor [ Mów mi wuju ]
Grzesiek ---> VALUES tutaj nie ma nic do rzeczy. To jest INSERT z SELECTA ( )
ElNinho ---> Zaraz spróbuje.
Grzesiek [ - ! F a f i k ! - ]
sql = "INSERT Certyfikaty (certyfikat_nazwa, certyfikat_opis, certyfikat_organizator_id)
SELECT [Szkolenia].[szkolenie_nazwa], [Szkolenia].[szkolenie_opis], [Szkolenia].[szkolenie_organizator_id]
FROM Szkolenia
WHERE State = [Szkolenia].[szkolenie_id]='" & szkolenie_id &"';"
Wszystko spróbuj w jednej linijce.
Tutaj pomocy poszukaj też :
ElNinho [ Konsul ]
Cainoor - nie trzymaj w niepewnosci - dziala ? :)
Cainoor [ Mów mi wuju ]
Niestety nie działa. Jest to samo. Zrobiłem to w taki sposób.
sql = "INSERT INTO Certyfikaty ( certyfikat_nazwa, certyfikat_opis, certyfikat_organizator_id )" & _
"(SELECT [Szkolenia].[szkolenie_nazwa], [Szkolenia].[szkolenie_opis], [Szkolenia].[szkolenie_organizator_id]" & _
"FROM Szkolenia" & _
"WHERE [Szkolenia].[szkolenie_id]='" & szkol_id & "');"
ElNinho [ Konsul ]
mam pytanko - a dlaczego kolumny w selekcie sa w nawiasach [] ? to jest jakas skladnia Accesa ?
Cainoor [ Mów mi wuju ]
Jest to kod przekopiowany prosto z kwerendy (querry). Ten nawias [] jest potrzebny, gdy w nazwie tabeli jest odstęp (np. Szkol Enia). Tutaj wstawiony z automatu i tak naprawdę nie powinien niczemu bruździć.
legrooch [ MPO Squad Member ]
Cainoor ==> To jest żywcem skopiowanie?
legrooch [ MPO Squad Member ]
sql = "INSERT INTO Certyfikaty ( certyfikat_nazwa, certyfikat_opis, certyfikat_organizator_id ) " & _
"(SELECT [Szkolenia].[szkolenie_nazwa], [Szkolenia].[szkolenie_opis], [Szkolenia].[szkolenie_organizator_id] " & _
"FROM Szkolenia " & _
"WHERE [Szkolenia].[szkolenie_id]='" & szkol_id & "');"
Cainoor [ Mów mi wuju ]
legrooch
Prawie żywcem, z moją modyfikacją jeśli chodzi o przeniesienie do innej lini (dodałem "" i & _)
Ok, zaraz sprawdze.
diuk [ Generaďż˝ ]
cainoor --> w SQL z posta 16 nie ma spacji pomiędzy "Szkolenia" i "WHERE" (przy łamaniu linii TRZEBA pamiętać o spacjach).
legrooch [ MPO Squad Member ]
sql = "INSERT INTO Certyfikaty ( certyfikat_nazwa, certyfikat_opis, certyfikat_organizator_id ) " & _
"(SELECT [Szkolenia].[szkolenie_nazwa], [Szkolenia].[szkolenie_opis], [Szkolenia].[szkolenie_organizator_id] " & _
"FROM Szkolenia " & _
"WHERE [Szkolenia].[szkolenie_id]=" & szkol_id & ");"
:PPPP
Działa :PPP
Cainoor [ Mów mi wuju ]
Dzięki wszystkim za pomoc. Rzeczywiście błąd był w samej składni... Chodziło o te małe ' ' przy parametrze.
"WHERE [Szkolenia].[szkolenie_id]=" & szkol_id & ";"
i działa.
ElNinho [ Konsul ]
no to teraz impra stary :)
Cainoor [ Mów mi wuju ]
Taa... do 17 normalnie chyba z pięć imprez urządze :P
Cainoor [ Mów mi wuju ]
Czy to w ogóle możliwe?
INSERT INTO tabA (col1, col2, col3) (SELECT col1 FROM tabB WHERE cos=cos) AND VALUES (val1, val2)
diuk [ Generaďż˝ ]
Cainoor -->
INSERT INTO tabA (col1,col2,col3) SELECT col1,val1 as col2,val2 as col3 FROM tabB WHERE ....
legrooch [ MPO Squad Member ]
Nie.
INSERT INTO tabA (col1, col2, col3) (SELECT col1 FROM tabB WHERE cos=cos, val1, val2)
Cainoor [ Mów mi wuju ]
Dzięki.
diuk [ Generaďż˝ ]
legrooch -->
Podane przez Ciebie rozwiązanie wygląda na niepoprawne...
legrooch [ MPO Squad Member ]
diuk ==> Ten element (SELECT col1 FROM tabB WHERE cos=cos, val1, val2) to jest przenośnia deweloperska.
Chodzi o wynik, który po wykonaniu selecta da (1, 2, 3)
Cainoor [ Mów mi wuju ]
Zrobiłem tak jak diuk i jest dobrze.
diuk [ Generaďż˝ ]
legrooch -->
SQL nie dopuszcza takiej składni (gdziekolwiek by tego nie wykorzystać):
SELECT pole FROM Tabela, Stała1
poprawna natomiast jest:
SELECT pole, Stała1 FROM Tabela
To, co ma zwrócić zapytanie, MUSI być pomiędzy SELECT a FROM
SELECT pola FROM Tabela1,Tabela2 jest skrótowym zapisem tłustego (każdy z każdym) JOINa