尝试运行sql时出现错误3075(缺少运算符)。更新查询

时间:2015-12-07 09:53:50

标签: sql excel vba excel-vba

VBA代码是:

''sql1 = "select  InvoiceCNotes.[docsetamount] ,InvoiceCNotes.[docsetamount] + AllocationsTEMP.[paidamount] from AllocationsTEMP inner join  InvoiceCNotes on AllocationsTEMP.Docnumber = InvoiceCNotes.Docnumber where InvoiceCNotes.[docnumber] = AllocationsTEMP.[docnumber] AND AllocationsTEMP.[paidamount] <> 0"

sqlline = sql1

DoCmd.RunSQL sql1

上面sqlline中显示的代码如下:

Update InvoiceCNotes 
set InvoiceCNotes.[docsetamount] = InvoiceCNotes.[docsetamount] + AllocationsTEMP.[paidamount] 
from AllocationsTEMP inner join  InvoiceCNotes 
    on AllocationsTEMP.Docnumber = InvoiceCNotes.Docnumber 
where InvoiceCNotes.[docnumber] = AllocationsTEMP.[docnumber] 
    AND AllocationsTEMP.[paidamount] <> 0

我在这里看到了有关同一错误的其他问题,但我仍然遗漏了一些东西。

从之前的问题中,我添加了表名,并将字段名称括起来。 我查看了表格规格,看docsetamountpaidamount都定义为[NUMBER,double,fixed,2],两个docnumbers都是长整数,{{1} }也是NUMBER,double,fixed,2

现在我可能正在盯着这个问题并且没有注意到我的错误,因为我在过去的五年里已经在Access中开发了很多应用程序(自从退休以后我应该添加),所以我一定做错了。

你注意到了这个错误吗?

2 个答案:

答案 0 :(得分:0)

UPDATE t1 SET t1.f=foo FROM t1 JOIN t2的{​​{1}}语法来自Sql Server。

在Access SQL中,您将JOIN放在第一个子句中,如下所示:

FROM

UPDATE InvoiceCNotes INNER JOIN AllocationsTEMP ON InvoiceCNotes.Docnumber = AllocationsTEMP.Docnumber SET InvoiceCNotes.[docsetamount] = InvoiceCNotes.[docsetamount] + AllocationsTEMP.[paidamount] WHERE AllocationsTEMP.[paidamount] <> 0 是多余的,因为它已经处于JOIN状态。

答案 1 :(得分:0)

我发现了一种完全不同的语法 - 它运行得很好。 也许我的原始来源是错误的,正如我所做的那样,它说。

我的更新新语法是:

UPDATE InvoiceCNotes INNER JOIN AllocationsTEMP 
    ON InvoiceCNotes.Docnumber = AllocationsTEMP.Docnumber 
SET InvoiceCNotes.docsetamount = InvoiceCNotes.[docsetamount]+AllocationsTEMP.[paidamount] 
WHERE (((InvoiceCNotes.docnumber)=[AllocationsTEMP].[docnumber]) 
  AND ((AllocationsTEMP.paidamount)<>False))

也许这个问题应该被删除 - 这会引起混淆而不是有用。我做不到,或者我愿意。

向任何可能尝试过帮助的人道歉 - 并感谢您的努力。

现在已经解决了