Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 访问错误3141_Vba_Ms Access - Fatal编程技术网

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字符串,原因如下:

  • 保存之前,会检查所有语法错误。无法通过MS Access查询设计GUI保存不可编译的查询

  • 存储访问查询比VBA字符串查询更高效,因为数据库引擎为存储查询保存了最佳执行计划,并且在VBA中动态调用时无法执行

  • 您可以使用较少的代码将保存的查询设置为大多数Access对象(组合框或列表框行源、窗体或报表记录源)

    Me.cboText.RowSource = "myStoredQuery"
    Me.cboText.RowSourceType = "Table/Query"
    Me.cboText.Requery
    
    Me.Form.RecordSource = "myStoredQuery"
    Me.Form.Requery
    
  • 由于避免了VBA字符串连接,应用程序代码更具可读性和可维护性。此外,还可以从应用程序层代码中抽象出SQL的特殊用途

    Dim RS As Recordset
    Set RS = CurrentDb.OpenRecordset("myStoredQuery")
    
  • 参数化的行业标准更容易通过存储的查询实现,这些查询可以用作准备好的语句。如果需要为动态查询传递VBA变量值,则可以在仍然使用存储查询的情况下使用
    参数
    子句和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'))
    with
    Customers.CustomerType输入('GREEN','GREEN-JC','GREEN-DL','SIHU PAPYRUS')