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
我在这里看到了有关同一错误的其他问题,但我仍然遗漏了一些东西。
从之前的问题中,我添加了表名,并将字段名称括起来。
我查看了表格规格,看docsetamount
和paidamount
都定义为[NUMBER,double,fixed,2],两个docnumbers
都是长整数,{{1} }也是NUMBER,double,fixed,2
现在我可能正在盯着这个问题并且没有注意到我的错误,因为我在过去的五年里已经在Access中开发了很多应用程序(自从退休以后我应该添加),所以我一定做错了。
你注意到了这个错误吗?答案 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))
也许这个问题应该被删除 - 这会引起混淆而不是有用。我做不到,或者我愿意。
向任何可能尝试过帮助的人道歉 - 并感谢您的努力。
现在已经解决了