2017-02-16 73 views
1

我有我的.mdb文件数据库,我想(使用获取外部数据菜单)查询使用选择查询和excel电子表格中显示的结果的数据,但我需要查询记录并显示基于用户在特定单元格(4个字段)中输入的输入(在哪里条件下)的结果。有时候我会在某些情况下使用一个或两个字段,或者有时我会使用3个字段来选择记录,但其余字段将保留为空。获取参数输入Excel中查询

我可以写的查询,当用户在所有四个字段中输入值,而不会在任何领域留白,但我需要查询搜索的任何一种情况下。

SELECT * FROM P:\Indexing\Data\Services_Indexed_data.mdb。气体S_CARD WHERE(S_CARD.HOUSE_NO =α)和(S_CARD.STREET_NAME =α)和(S_CARD.SUFFIX =α)和(S_CARD.FILE_NAME =α)和(S_CARD.CITY =? )

“?”当我从用户选择输入单元作为参数时将被填充。另外我需要查询与LIKE运算符在哪里条件。请让我知道如何为此编写查询。

+0

这是一个有效的SQL字符串吗?你在使用数据库连接吗?您可以尝试查看[this](http://datapigtechnologies.com/blog/index.php/running-an-access-parameter-query-from-excel/)并了解如何从Excel连接到Access,在哪里构建原始参数查询,并将这些参数的值从Excel传递到Access。 – MoondogsMaDawg

+0

是的,它是一个有效的SQL查询。它的工作很好,当我使用两/三在那里与和/或运营,但我需要查询一样,如果我留为空白的任何字段,则查询应返回基于有效的参数(条件)的值,任何一种情况下,它不被从哪里考虑空白的领域条件。不,我直接连接文件夹中的mdb文件。 – Mahi

回答

0

参考:我使用Excel的MS Query外部连接来链接到我的.accdb文件(我知道这与你的不一样,但它不应该有很大的区别)。然后打开外部数据属性菜单并单击连接名称右侧的按钮打开连接属性窗口。我导航到定义选项卡,并选择底部的参数按钮,并使用“从下面的单元格获取值”选项来引用输入单元格。

不过,我也想不出如何让Excel创建一个动态的WHERE子句根据您的参数参考细胞是否为空。

解决方案: 我会建议在Access中建立一个参数查询和扩大你的WHERE子句中占的参数Null值的每个排列。这将是一个巨大的字符串,很难阅读和格式化,但应该可以在Access的GUI中管理。例如,仅使用两个的参数HOUSE_NO和STREET_NAME的(数据类型可能不正确):

PARAMETERS [HOUSE_NO] Text (255), [STREET_NAME] Text (255); 
SELECT * FROM S_CARD 
WHERE (([HOUSE_NO] Is Not Null) AND (S.CARD.HOUSE_NO Like [HOUSE_NO]) 
    AND ([STREET_NAME] Is Not Null) AND (S.Card.STREET_NAME Like [STREET_NAME])) 
OR (([HOUSE_NO] Is Null) AND ([STREET_NAME] Is Not Null) 
    AND (S.Card.STREET_NAME Like [STREET_NAME])) 
OR (([HOUSE_NO] Is Not Null) AND (S.Card.HOUSE_NO Like [HOUSE_NO]) 
    AND ([STREET_NAME Is Null)) 
OR (([HOUSE_NO] Is Null) AND ([STREET_NAME] Is Null)); 

您将需要为参数的每个排列所留空的OR,以及如何查询应返回这些结果。然后您需要编写一个VBA过程来连接到Access,打开参数查询,传递参数,执行查询并导出到您的Excel文件。这是更多的工作。为了获得帮助,您可以看到部分流程here,但它处理动作查询而不是选择,并且不复制到excel。

因为Excel似乎并不命名参数,似乎没有要测试的进细胞是否是空白的,并相应地调整WHERE子句的方式。当我尝试在定义选项卡的命令文本中使用Excel [PARAMETER 1][PARAMETER 2]中的参数菜单中的名称时,它最终创建了新的参数(#3,#4)。

这是一个很好的问题,虽然我会建议等待另一个用户权衡,我们可能会得到幸运。