从数据库表中读取(查找多个条件)记录,并使用匹配条件写入数据库表

时间:2015-05-08 12:32:23

标签: vb.net excel database-design ms-access-2010 vlookup

如何在Access Query或VB.net代码中复制下面的等式?

{=SUM(IF('Customer '!$G$3='Glass Fabrication'!$D$3:$G$3,IF("Hole"='Glass Fabrication'!$A$4:$A$15,'Glass Fabrication'!$D$4:$G$15)))*E3}

上面的等式是我在excel中使用的Vlookup超过1个值并返回一个匹配2个条件的值。 (现在,这可以永远持续下去,并且有尽可能多的标准)

现在,我正在使用VB.net制作一个带有MS Access database(。mdb)的报价系统。

我有table列出了所有具有多个标识符且价格为4种不同的产品。为简单起见,我们说我有2个标识符和4个价格。

我有Name Category等字段作为标识符,示例数据如下所示。

Name Category Tier 1 Tier 2 Tier 3 Tier 4

苹果...水果............ $ 2 .......... $ 2 ........... $ 1.7 ...... .. $ 1.5

苹果汁...... ............ $ 1 $ .......... 1 ........... $ 75 .... .... $ 75

Orange..Fruit ......... $ 1.8 ....... $ 1.8 ......... $ 1.5 ......... $ 1.3

...可乐饮料............ $ 1 $ .......... 1 ........... $ 75 .... .... $ 75

用户输入= Apple,Juice,Tier 1

我可以在excel中设置=Sum(If公式以检查Name列是否与所选值匹配,然后检查Category列以检查第二个值,然后检查第一行标题Tier 1 value并返回$1

我是Access数据库的新手,所以我很难如何复制它。我尝试过查询,但它只是"过滤"这样的标准,并没有返回值。

最终,我希望一个名为Shopping Cart的表/查询接受用户输入,例如" AppleJuiceTier 1"和第4列(只读)会自动计算并查找Price $1,查找这3件事。

我已经设置了购物车表,除了我不知道如何包含这个只读的自动计算/ vlookup列之外,它工作得很好。 (我在VB.net中使用DataGridView绑定到一个需要3个用户输入的购物车表。)

最好的方法是什么?在Access中进行查询并使其在数据库本身or VB.net中计算以处理计算并在每次用户输入3个值时写入第4列?

2 个答案:

答案 0 :(得分:0)

在MS Access中尝试此SQL查询,前提是您的示例数据保存为Access表:

SELECT Table.Name, Table.Category, [Enter Tier],
     IIF([Enter Tier] = 'Tier 1', Table.[Tier 1], IIF([Enter Tier] = 'Tier 2', Table.[Tier 2], 
     IIF([Enter Tier] = 'Tier 3', Table.[Tier 3], IIF([Enter Tier] = 'Tier 4', Table.[Tier 4], Null)))) As Price
FROM Table
WHERE Table.Name = [Enter Name] AND Table.Category = [Enter Category]

当您打开查询时,将弹出Enter字段供用户填写为参数请求。最好使用Access表单为用户填充未绑定的文本框,并使用文本框值打开命令按钮打开查询。表单字段可以替换上面的输入字段。

答案 1 :(得分:0)

Dim row AS DataRow = DataTable.Select("ColumnName1 = 'value3'").FirstOrDefault() If Not row Is Nothing Then searchedValue = row.Item("ColumnName2") End If

这里value3是一个常数值。要使用对象(变量),

使用了

Dim row AS DataRow = DataTable.Select("ColumnName1 = '" & variable & "'").FirstOrDefault()