在Excel查询中从用户获取参数输入

时间:2017-02-16 07:04:41

标签: sql ms-access parameters excel-2007

我的数据库在.mdb文件中,我想使用select查询查询数据,结果显示在excel电子表格中(使用获取外部数据菜单),但我需要查询记录并根据显示结果显示结果用户在特定单元格(4个字段)中输入的输入(在何处条件下)。有时我会在条件中使用一个或两个字段,有时我会在条件中使用3个字段来选择记录,但其余字段将留空。

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

SELECT * FROM P:\Indexing\Data\Services_Indexed_data.mdb。GAS S_CARD WHERE(S_CARD.HOUSE_NO =?)AND(S_CARD.STREET_NAME =?)AND(S_CARD.SUFFIX =?)AND(S_CARD.FILE_NAME =?)AND(S_CARD。 CITY =?)

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

1 个答案:

答案 0 :(得分:0)

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

但是,我也无法弄清楚如何让Excel根据您的参数引用单元格是否为空来创建动态WHERE子句。

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

var mixin = {
    computed: {
        User: function () { return window.User; }
    }
}

您需要为每个留空的参数排列设置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)); ,以及查询应如何返回这些结果。然后,您需要编写VBA过程以连接到Access,打开参数查询,传递参数,执行查询以及导出到Excel文件。这是一项更多的工作。如需帮助,您可以查看部分流程here,但它会处理操作查询而不是选择,也不会复制到Excel。

因为Excel似乎没有为参数命名,所以似乎没有办法测试输入单元格是否为空并相应地调整WHERE子句。当我尝试在定义选项卡上的命令文本中使用Excel OR[PARAMETER 1]中的参数菜单中的名称时,它最终创建了新参数(#3,#4)。

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