Vba 访问错误3141
我正在尝试使用以下查询为报表设置记录集:Vba 访问错误3141,vba,ms-access,Vba,Ms Access,我正在尝试使用以下查询为报表设置记录集: Dim RS As Recordset Set RS = CurrentDb.OpenRecordset("Select DISTINCT SalesOrders.SalesOrderNumber, Vendors.Name, SalesOrders.OrderDate, SalesOrders.Grade, SalesOrders.QuantityUOM, SalesOrders.PortOfDischarge, SalesOrders.Quantit
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("Select DISTINCT SalesOrders.SalesOrderNumber, Vendors.Name, SalesOrders.OrderDate, SalesOrders.Grade, SalesOrders.QuantityUOM, SalesOrders.PortOfDischarge, SalesOrders.Quantity, IIf([SalesOrders.DTHCIncludedYN],'DTHC INCLUDED','DTHC NOT INCLUDED') AS DTHCIncludedYN," & _
" SalesOrders.DeliveryTerms, SalesOrders.SalesOrderID, SalesOrders.GenesisDocumenationAssistant, Products.ProductLoadPorts, Customers.CustomerType, SalesOrders.UnitPriceUOM, SalesOrders.UnitPrice, Customers.CustomerName, Products.ProductName, SalesOrders.PaymentTerms, SalesOrders.PlaceOfDelivery, SalesOrders.SalesCommission, SalesOrders.LatestShipDate, [SalesOrders.Quantity]*[UnitPrice] AS Amount," & _
" IIf([AdvisingBank]='GEB','GREAT EASTERN BANK',IIf([AdvisingBank]='BOC','BANK OF CHINA',IIf([AdvisingBank]='CB','CATHAY BANK',IIf([AdvisingBank]='HSBC','HSBC Bank USA',IIf([AdvisingBank]='COM','COMMERCE BANK'))))) AS [Bank Name]," & _
" IIf([CCICType]= '1','ONE ORIGINAL INSPECTION CERTIFICATE ISSUED BY CCIC NORTH AMERICA INC','ONE ORIGINAL PRESHIPMENT INSPECTION CERTIFICATE ISSUED BY ANY CCIC EUROPEAN OFFICE') AS [CCIC-Clause]," & _
" IIf([OnCarriageIncluded],'ON CARRIAGE INCLUDED','ON CARRIAGE NOT INCLUDED') AS OCIText, IIf(IsNull([PlaceOfDelivery]),[PortOfDischarge],[PlaceOfDelivery]) AS PODText, Vendors.AB1AddressLine1, Vendors.SupplierLocation AS [Swift Code], " & _
" IIf(IsNull(AdvisingBank),' ','TEL ' & [Vendors.AB1Phone] & ', ' & 'FAX ' & [Vendors.AB1Fax]) AS [Contact Details], IIf(IsNull(AdvisingBank),'',Vendors.AB1AddressLine1 & ', ' & [Vendors.AB1City] & ', ' & [Vendors.AB1State] & ' ' & [Vendors.AB1Zip] & ' ' & [Vendors.AB1Country]) AS AddressLine," & _
" FROM (Products INNER JOIN (Customers INNER JOIN SalesOrders ON Customers.CustomerID = SalesOrders.CustomerID) ON Products.Grade = SalesOrders.Grade) LEFT JOIN Vendors ON SalesOrders.AdvisingBank = Vendors.VendorID " & _
" WHERE (SalesOrders.SalesOrderNumber= Forms!frmPrintContracts!txtGreenSales AND ((Customers.CustomerType)='GREEN' Or (Customers.CustomerType)='GREEN-JC' Or (Customers.CustomerType)='GREEN-DL' Or (Customers.CustomerType)='SIHU' Or (Customers.CustomerType)='PAPYRUS'))ORDER BY SalesOrders.SalesOrderNumber DESC ")
我在说我使用了保留关键字或有标点错误时出错了。有人能帮我找出错误是什么吗。
感谢您的帮助。谢谢考虑将SQL语句保存为Access存储查询,而不是VBA字符串,原因如下:
Me.cboText.RowSource = "myStoredQuery"
Me.cboText.RowSourceType = "Table/Query"
Me.cboText.Requery
Me.Form.RecordSource = "myStoredQuery"
Me.Form.Requery
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("myStoredQuery")
参数
子句和querydfs。见下例:
存储查询
参数[myParam]日期;
选择DISTINCT SalesOrders.SalesOrderNumber
来自销售订单
其中SalesOrders.OrderDate=[myParam]
VBA
Dim qdef作为QueryDef
将遥感器作为记录集
Set qdef=Currentdb.querydfs(“myStoredQuery”)
qdef!myParam=日期()
Set RS=qdef.OpenRecordset()
在这种情况下,将SQL预先写入变量,
Debug。将其打印到即时窗口,然后复制粘贴到新的查询窗口。然后尝试执行它。您将收到相同的错误消息,突出显示所讨论的部分。您在之后有一个额外的逗号作为AddressLine
-作为AddressLine,FROM(Products…
。您在ORDER BY
-='PAPYRUS'))ORDER BY
之前也没有空格,这不是错误,但是您可以通过替换((Customers.CustomerType)='GREEN'或(Customers.CustomerType)='GREEN-JC'或(Customers.CustomerType)='GREEN-DL'或(Customers.CustomerType)='SIHU'或(Customers.CustomerType)='PAPYRUS'))
withCustomers.CustomerType输入('GREEN','GREEN-JC','GREEN-DL','SIHU PAPYRUS')