Access 2003: count(*) produces syntax error

蓝咒 提交于 2020-02-16 12:21:28

问题


I am using ms-access and for some reason, the code here produces a Syntax error which I dont understand.

UPDATE Korrekturentlastung
SET Schueler = SELECT COUNT(*)
    FROM Korrekturentlastung 
    WHERE 
        Korrekturentlastung_Kurs.Kuerzel = Korrekturentlastung.Kuerzel
AND Korrekturentlastung_Kurs.Klasse = Korrekturentlastung.Klasse
AND Korrekturentlastung_Kurs.Fach = Korrekturentlastung.Fach
AND Korrekturentlastung_Kurs.Kursart = Korrekturentlastung.Kursart

The error is:

Syntax error. in query expression 'SELECT COUNT(*)
    FROM Korrekturentlastung'

回答1:


Subqueries need their own parentheses:

UPDATE Korrekturentlastung
SET Schueler = (SELECT COUNT(*)
                FROM Korrekturentlastung 
                WHERE Korrekturentlastung_Kurs.Kuerzel = Korrekturentlastung.Kuerzel
AND Korrekturentlastung_Kurs.Klasse = Korrekturentlastung.Klasse
AND Korrekturentlastung_Kurs.Fach = Korrekturentlastung.Fach
AND Korrekturentlastung_Kurs.Kursart = Korrekturentlastung.Kursart
              );



回答2:


Whilst @Gordon Linoff has correctly identified the syntax error in your query, if you were to run the query in MS Access, you'll likely receive the familiar response:

Operation must use an updateable query.

This arises as a result of a restriction of the JET database engined used by MS Access whereby no part of an update query can use aggregation. In your case, this arises as a result of the use of count(*).

One possible alternative is to use the DCount domain aggregate function, which is evaluated separately from the evaluation of the main query and therefore retains the "updateability" of the query.

update korrekturentlastung
set schueler = 
dcount
(
    "*",
    "Korrekturentlastung",
    "Kuerzel = " & Korrekturentlastung.Kuerzel & " and "
    "Klasse = " & Korrekturentlastung.Klasse & " and " 
    "Fach = " & Korrekturentlastung.Fach & " and "
    "Kursart = " & Korrekturentlastung.Kursart
)

Note that if your fields are text fields, you'll also need to surround the above values with single or double quotes, e.g.:

update korrekturentlastung
set schueler = 
dcount
(
    "*",
    "Korrekturentlastung",
    "Kuerzel = '" & Korrekturentlastung.Kuerzel & "' and "
    "Klasse = '" & Korrekturentlastung.Klasse & "' and " 
    "Fach = '" & Korrekturentlastung.Fach & "' and "
    "Kursart = '" & Korrekturentlastung.Kursart & "'"
)


来源:https://stackoverflow.com/questions/60174688/access-2003-count-produces-syntax-error

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!