2013-02-27 60 views
0

我基本上在MS Access中通过VBA代码&查询只是一个保存的查询。这基本上是相同的查询,但VBA代码缺少两个记录,应该包含符合条件的&。保存的查询返回相同的数据集和VBA未返回的两个“缺失”记录。MS Access窗体(VBA)查询和定期查询给出不同的结果

保存的查询SQL:

SELECT ID.Company, CU.GroupCode, CU.CustID, CU.Name, ST.ShipToNum, ST.Name, IH.InvoiceDate, IH.InvoiceNum, ID.ProdCode, ID.PartNum 
FROM ((((PUB_InvcDtl AS ID INNER JOIN PUB_InvcHead AS IH ON (ID.CustNum = IH.CustNum) AND (ID.InvoiceNum = IH.InvoiceNum) AND (ID.Company = IH.Company)) LEFT JOIN PUB_Part AS PT ON (ID.Company = PT.Company) AND (ID.PartNum = PT.PartNum)) LEFT JOIN PUB_ShipTo AS ST ON (ID.CustNum = ST.CustNum) AND (ID.ShipToNum = ST.ShipToNum) AND (ID.Company = ST.Company)) LEFT JOIN V_Customer AS CU ON (ID.Company = CU.Company) AND (ID.CustNum = CU.CustNum)) LEFT JOIN ProdCodeCommRate AS PCC ON ID.ProdCode = PCC.ProdCode 
WHERE (((ID.Company)="BTN") AND ((IH.InvoiceDate) Between #1/1/2013# And #1/31/2013#) AND ((ID.ProdCode) In ('2100','2110','2200','2210','2300','2400','2405','2500','2600','2701','2702','2709','2710','2800','2901','2902','2903')) AND ((ID.PartNum)<>'')); 

VBA查询:

"SELECT ID.Company, CU.GroupCode, CU.CustID, CU.Name AS CustName, ST.ShipToNum, ST.Name AS ShipToName, IH.InvoiceDate, IH.InvoiceNum, ID.InvoiceLine, ID.PartNum, " & _ 
     "ID.ProdCode, PCC.CommRate, ID.PricePerCode, PT.PartDescription, ID.IUM, PT.CostMethod, ID.UnitPrice, ID.OurShipQty, ID.ExtPrice, ID.Discount, [ExtPrice]-[Discount] AS NetPrice, " & _ 
     "ID.LbrUnitCost, ID.BurUnitCost, ID.MtlUnitCost, ID.SubUnitCost, [LbrUnitCost]+[BurUnitCost]+[MtlUnitCost]+[SubUnitCost] AS TotUnitCost, " & _ 
     "([LbrUnitCost]+[BurUnitCost]+[MtlUnitCost]+[SubUnitCost])*[OurShipQty] AS ExtTotCost, IH.OpenInvoice, getSalesRep([IH].[SalesRepList],1,ID.Company) AS SalesRep1, ID.RepRate1, " & _ 
     "ID.RepSplit1, getSalesRep([IH].[SalesRepList],2,ID.Company) AS SalesRep2, ID.RepRate2, ID.RepSplit2, getSalesRep([IH].[SalesRepList],3,ID.Company) AS SalesRep3, " & _ 
     "ID.RepRate3, ID.RepSplit3 " & _ 
     "FROM (((((PUB_InvcDtl AS ID " & _ 
     "INNER JOIN PUB_InvcHead AS IH ON (ID.CustNum = IH.CustNum) AND (ID.InvoiceNum = IH.InvoiceNum) AND (ID.Company = IH.Company)) " & _ 
     "LEFT JOIN PUB_Part AS PT ON (ID.Company = PT.Company) AND (ID.PartNum = PT.PartNum))" & _ 
     "LEFT JOIN PUB_ShipTo AS ST ON (ID.CustNum = ST.CustNum) AND (ID.ShipToNum = ST.ShipToNum) AND (ID.Company = ST.Company))" & _ 
     "LEFT JOIN V_Customer AS CU ON (ID.Company = CU.Company) AND (ID.CustNum = CU.CustNum))" & _ 
     "LEFT JOIN ProdCodeCommRate AS PCC ON ID.ProdCode = PCC.ProdCode)" & _ 
     "WHERE ((ID.Company)=[Forms]![frmSalesMgnAnalysis]![cboComp]) AND ((ID.PartNum)<>'') AND " & _ 
     "((IH.InvoiceDate) Between [Forms]![frmSalesMgnAnalysis]![dtStart] And [Forms]![frmSalesMgnAnalysis]![dtEnd]) AND " & _ 
     "((ID.ProdCode) IN ('2100','2110','2200','2210','2300','2400','2405','2500','2600','2701','2702','2709','2710','2800','2901','2902','2903'))" & _ 
     "ORDER BY ID.ProdCode, IH.InvoiceDate, CU.Name;" 

的形式是使用输入域公司,开始&结束日期,& ProdCodes。 ProdCodes位于包含ProdCode,Desc,&公司(位于VBA一侧的表格中)的表单中的列表框中。这个VBA代码返回我需要的所有记录,除了2条缺失的记录外。无论我是否加入上面的ProdCode VBA表,在WHERE中使用WHERE ID.ProdCode IN(Select distinct ......)等选择它都不会起作用。

想法?提前致谢!!!

+2

如果您删除对输入字段的引用并将它们替换为SQL查询中的硬编码值,会发生什么情况?如果这返回正确的结果,那么你知道问题是值通过你的输入字段之一传递。 – 2013-02-27 18:31:25

+0

我可以删除引用,我仍然会获得记录集,只有没有应该包含的两条记录。我也双倍和三倍检查日期/时间。冉独立查询,发现两个缺失的记录中没有任何内容会使他们失去资格。 – user2116602 2013-02-27 18:54:57

+0

对不起,无法上传数据库。它太大了,并且其中有敏感数据。我已经发布了关于我将能够避免陷入困境的所有信息。我认为这可能是一个形式本身的问题,所以我创建了一个新的表单,它仍然返回所有我想要的,只是它省略了这两个记录。巨大的再次感谢所有的帮助! – user2116602 2013-02-27 19:23:47

回答

1

您的WHERE子句不相同(因为括号不在两个查询之间的相同位置)。我怀疑你可能会遇到问题,特别是该条款的ID.PartNum<>''部分。

您可以尝试在VBA代码中设置断点并获取VBA查询的实际解释输出(包括参数值)。将该SQL语句复制到新的查询窗口(SQL视图)中,然后查看设计器以查看Access如何解释该语句。

您也可以尝试在VBA查询中匹配where子句以匹配参数的相同顺序和括号的数量,但是在使用设计器之前首先证明\反驳我的假设可能更容易VBA查询。

经常遇到像这样的问题,需要逐句回答,然后逐渐将其添加回来以准确找到问题发生的位置,但括号的用法是我开始调查的地方。

+0

+1和基本查询故障排除的最后一段大奖金。 – Smandoli 2013-02-27 20:16:18

+0

感谢所有的帮助!设置与Access查询匹配的断点和解释的VBA查询。重新安排了一些括号,并与它一起玩。 VBA代码仍然不起作用,但由于查询是,我将在此期间为用户自己运行它。已经浪费了太多时间来试图解决这个问题。再次感谢大家的帮助和想法! – user2116602 2013-02-27 22:56:21