我正在使用Microsoft Access进行小型企业的产品定价。我有产品表,我们的供应商价格和专业客户表。有不同的查询采用我们的供应商的价格并应用不同价格水平的标记。对于某些客户,我们对某些产品给予特价,但其余产品属于特定价格水平。然后,我将客户的特殊定价与其价格水平查询相结合。如果存在特殊价格,则使用该价格而不是其常规价格水平价格。要获得此查询,我首先必须对每个客户进行查询,以便从客户定价查询中获取所有产品和特殊价格。然后我用价格水平查询加入该查询。如果我没有做第一步并加入价格水平查询的客户定价,那些对同一产品有特殊定价的客户,该产品多次显示我不能拥有。因此,如果我创建一个查询,以便从客户定价中取出价格,然后以价格水平加入,那就可以了。
很抱歉,如果我不清楚的话。如果您有任何疑问或想要了解更多细节,我将提供。
我根本不认识VBA。我可以阅读并遵循,但从未编写过VBA代码。
我想要的是VBA代码搜索customers表并检查每个客户是否有自己的查询将其价格与客户价格分开,因此如果添加新客户,它会自动为他们创建查询。然后创建一个查询,将其价格水平与刚刚创建的查询相结合。
这可能吗?或者有更好的方法来解决这个问题。非常感谢。
到目前为止,这是我的表格
供应商 产品 CustomerPrds 客户
Prcode< -------- Prcode 1 ------ 许多 Prcode
Prname CustID 许多 ------- 1 CustID
CustPrice
以下是一个价格级别和一个客户的查询示例
J6
字段:PrCode PrName PrBulked PrMultiple $ / GAL $ / UNIT
Src:所有这些都来自产品tbl“$ / GAL:计算字段以标记供应商$”“$ / UNIT:$ / GAL * PrMultiple”
CustomerPricing
字段:CustID CustName PrCode PrName Cust $
Src:CustPrds Custms CustPrds Prds CustPrds
Cust1
CustPricing查询的所有字段,其中CustID = 1
加入Cust1和J6 加入J6的所有记录并记录J6.PrCode = CustomerPricing.PrCode 的记录
PrCode - 来自J6的多个。 $ / Gal:如果CustID = 1,cust $,J6。$ / GAL
以下是查询的SQL
SELECT [Customer Products].customerid,
customers.customer,
[Customer Products].[Product Number],
chevron_products.[MATERIAL NAME],
chevron_products.bulked,
chevron_products.uom,
chevron_products.multiple,
[Customer Products].[Customer Price],
[Customer Price] * [Chevron_Products]![Multiple] AS [$/UNIT]
FROM customers
INNER JOIN ((chevron91311
RIGHT JOIN chevron_products
ON chevron91311.[MATERIAL NUMBER] =
chevron_products.[MATERIAL NUMBER])
INNER JOIN [Customer Products]
ON chevron_products.[MATERIAL NUMBER] =
[Customer Products].[Product Number])
ON customers.[Customer Number] = [Customer Products].customerid;
SELECT [Customer Pricing].customerid,
[Customer Pricing].[Product Number],
[Customer Pricing].[Customer Price]
FROM [Customer Pricing]
WHERE (( ( [Customer Pricing].customerid ) = 2 ));
SELECT j6.[MATERIAL NUMBER],
j6.[MATERIAL NAME],
j6.bulked,
j6.uom,
j6.multiple,
Iif([Customer Pricing].[CustomerID] = 2,
[Customer Pricing].[Customer Price], [J6].[$/GAL]) AS [$/GAL],
[$/GAL] * [J6].[Multiple]
AS [$/UNIT]
FROM j6
LEFT JOIN cobbprds
ON j6.[MATERIAL NUMBER] = cobbprds.[Product Number]
ORDER BY j6.[MATERIAL NAME];
答案 0 :(得分:1)
我不完全确定,但看起来快速的VBA条件语句就足够了......您可以使用dlookup来确定是否有客户特定的价格并根据结果设置您的查询。如果我离开基地 - 您能提供更详细的样本数据方案吗?
以下是一些VBA代码,我将根据该客户/产品的CustPrice的存在,在两个不同的查询之间进行选择......
if not isnull(dlookup("CustPrice","CustomerPrds","CustID=" & Forms!MyForm!cboSelectCustomer & " AND Prcode=" & Forms!MyForm!cboSelectProduct)) then
lookupQuery = "SELECT foo FROM bar WHERE baz='abc'"
else
lookupQuery = "SELECT foo From bar WHERE baz='xyz'"
现在,您有条件地将查询设置为执行您需要的操作,并且可以通过记录集执行:
dim rs as recordset
set rs = currentdb.openrecordset(lookupQuery)
while not rs.eof
'do stuff with the recordset here
wend
rs.close
顺便说一句 - 上面的dlookup与此查询相同。虽然我确定使用dlookup和记录集之间存在开销差异,但我不熟悉它们是什么。
qry = "SELECT CustPrice FROM CustomerPrds WHERE CustID=" & Forms!MyForm!cboSelectCustomer & " AND Prcode=" & Forms!MyForm!cboSelectProduct