UcanAccess 中的 DELETE 函数抛出奇怪的异常

DELETE Function in UcanAccess throws strange exception

自从从 Java 1.8 中删除了 JDBC 桥(我们仍在哀悼)并转移到 UcanAccess,我一直在调试 SQL 过去的代码从来没有给我任何问题。其中一个陈述是:

DELETE TreatmentRecords.DateGiven, TreatmentRecords.TimeGiven, SInformation.Surname, SInformation.FirstNames, TreatmentRecords.Diagnosis, TreatmentRecords.*
FROM SInformation INNER JOIN TreatmentRecords ON SInformation.SID = TreatmentRecords.SID
WHERE (((TreatmentRecords.DateGiven)=#2015-03-07#) AND ((TreatmentRecords.TimeGiven)='17;16') AND ((SInformation.Surname)='Doe') AND ((SInformation.FirstNames)='John') AND ((TreatmentRecords.Diagnosis)='Headache'));

在 Access 本身中执行时,我完全没有遇到任何错误或问题。 但是 Ucancess 抛出以下异常:

net.ucanaccess.jdbc.UcanaccessSQLException: unexpected token: TREATMENTRECORDS required: FROM

如有任何想法,我们将不胜感激!

这是一个非标准的 SQL delete 语句,ucanaccess 不支持它,即使 Jet 引擎支持。这没什么奇怪的。 所以你必须为此使用标准 SQL。

编辑 例如,像这样(我没有添加所有条件):

   DELETE FROM TreatmentRecords tr WHERE 
    tr.DateGiven=#2015-03-07# AND EXISTS 
(SELECT * FROM SInformation s WHERE s.SID=tr.SID AND  s.Surname='Doe')