Access + sql : run-time error '3075'

0
mam taki kod:
strSQL = "UPDATE " & tbl & " SET nr_rysunku = " & """" & [Forms]![f_Detale_mod]![nr_rysunku] & _
"""" & ", nazwa =  " & """" & [Forms]![f_Detale_mod]![nazwa] & """" & _
"""" & ", material = " & """" & [Forms]![f_Detale_mod]![material] & _
" WHERE identyfikator = " & [Forms]![f_Detale_mod]![Identyfikator]
MsgBox (strSQL)

DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True

wyskakuje taki błąd:

Run-time error '3075':
Błąd składniowy (brak operatora) w wyrażeniu kwerendy '"fasf"", material = "4'.>

z MsgBox komunikat jest taki:

UPDATE tblDetale SET nr_rysunku = "nr", nazwa = "d"", material="4 WHERE identyfikator =59>

co w nim jest nie tak? nie mogę dojść do tego.
Proszę o wyrozumiałość to moja pierwsza baza danych w accessie. Uczę się dopiero.

Z góry dzięki za podpowiedź

3

Nie umiem w Accessa, ale ewidentnie nie zgadzają się tu cudzysłowy

0

No też tak myślę ale nie wiem które, próbowałem już na różne sposoby usuwałem dodawałem ponownie i dalej te same błędy

2

Przecież wystarczy prześledzić wynik z kodem.

Tutaj masz podwójny cudzysłów zamykający: nazwa = "d""
No i w kodzie tez masz podwójnie na końcu:

nazwa =  " & """" & [Forms]![f_Detale_mod]![nazwa] & """" & _"""" &

Tutaj brakuje zamknięcia: material="4
No i w kodzie tez go brakuje (albo na odwrót z przodu ma nie być):

material = " & """" & [Forms]![f_Detale_mod]![material] & 
3

Musisz poprawić domykanie cudzysłowiów:

strSQL = "UPDATE " & tbl & " SET nr_rysunku = " & """" & [Forms]![f_Detale_mod]![nr_rysunku] & """" & _
 ", nazwa =  " & """" & [Forms]![f_Detale_mod]![nazwa] & """" & _
"""" & ", material = " & """" & [Forms]![f_Detale_mod]![material] &  """" & _
" WHERE identyfikator = " & [Forms]![f_Detale_mod]![Identyfikator]

Generalnie jednka nie jest to czytelne bo mozna się pogubić w tych cudzysłowiach, dodatkowo przy wartościach tekstowych trzeba by było sprawdzać czy ktoś nie wpisał cudzysłowu.
No i generalnie poczytać o SQL Injection.

Proponuje tak:

strSQL = "UPDATE " & tbl & " SET nr_rysunku = [pnr_rysunku] " & _
", nazwa =  [pnazwa] " & _
", material = [pmaterial]" & _
" WHERE identyfikator = [pid]"


Set qdf = CurrentDb.CreateQueryDef(vbNullString, strSQL)
With qdf
    .Parameters("pnr_rysunku").Value =  [Forms]![f_Detale_mod]![nr_rysunku] 
    .Parameters("pnazwa").Value =  [Forms]![f_Detale_mod]![nazwa]
    .Parameters("pmaterial").Value = [Forms]![f_Detale_mod]![material] 
    .Parameters("pid").Value =  [Forms]![f_Detale_mod]![Identyfikator]
    .Execute dbFailOnError
End With

Pozbawiasz się problemów i jest czytelniej

0

Dzięki za odpowiedzi, już mi to dziala.
Ale mam jeszcze jedno pytanie. Jak zrealizować wstawienie do tabeli załączników?

0

a co jest nie tak tutaj:

strSQL = "INSERT INTO " & tbl & " (" & col & ") VALUES (""" _
& [Forms]![f_Klienci]![klient_skrot] & """, """ & [Forms]![f_Klienci]![Klient_pelna_nazwa] _
& """, """ & [Forms]![f_Klienci]![ulica] & """, " & [Forms]![f_Klienci]![kod_pocztowy] _
& ", """ & [Forms]![f_Klienci]![Miasto] & """, " & [Forms]![f_Klienci]![NIP] _
& ", """ & [Forms]![f_Klienci]![Osoba_kontaktowa] & """, " & [Forms]![f_Klienci]![telefon] _
& ", """ & [Forms]![f_Klienci]![e-mail] & """, """ & [Forms]![f_Klienci]![uwagi] & ")"

Pojawia się błąd składniowy 3134

z msgBox

Insert INTO tblKlienci (klient_skrot, Klient_pelna_nazwa, ulica, kod_pocztowy, Miasto, NIP, Osoba_kontaktowa, telefon, e-mail, uwagi) VALUES ("skrot", "pelna", "ulica", 22-222, "miasto", 444-444-44-44, "osoba", 555555555, "mail", "uwagi")

0

NIP i kod pocztowy są ciągami znaków, a nie opakowałeś ich w cudzysłowy. Telefon pewnie też, ale na to pytanie Ty musisz odpowiedzieć

Swoją drogą, czemu nie wykorzystasz parametrów zgodnie z zaleceniem @Panczo ?

0

z bazami danych mam do czynienia 3 dni. Uczę się z forum i YT.
dopisałem cudzysłowy, i dalej wyskakuje błąd, ale do tabeli dane dopisuje.
Czy tamta metoda też działa z insert into?
Ta metodą co napisałem to skorzystałem z YT ale masz rację zaraz spróbuję też metody @Pancho.

1

Rodzaj zapytania nie ma znaczenia. Zadziała też dla inserta

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.