【发布时间】:2018-07-20 07:28:44
【问题描述】:
我已经在互联网上搜索了几个小时,试图弄清楚以下是否可能:
直接从 Excel 中选择 AS400 查询记录。
我还没有找到任何解决方案或说明如何实现这一点,这让我猜测这根本不可能。但是,我还没有看到任何人确认这是不可能的。
所以我的问题是:这可能吗?如果是的话,你能指出我正确的方向,以便我开始学习如何去做吗?
我知道可以从 Excel 运行查询,然后通过 SQL 语句添加参数,但在我的情况下,这会带来一些问题,可以通过在执行查询之前选择记录来避免。
示例:
我有一个包含值 1 和/或 2 的列(我们称之为 ColVal)的查询。在“使用查询”菜单下的 AS400 程序中,然后“选择记录”我可以指定哪些记录查询应包含根据ColVal 中的值运行的时间。这意味着我在运行查询时可以获得三种不同的情况(A、B 和 C):
A) 查询只包含ColVal 中值为1的记录
B) 查询只包含ColVal 中值为2的记录
C) 查询包含ColVal 中的值为 1 或 2 的记录
目标是能够从 Excel 中选择我想要的情况,以绕过打开和使用 AS400 程序。
但是,使用情况 C,然后在 Excel 中编辑查询不能使用 SQL 语句来模拟情况 A 或 B,因为这意味着查询仍然包含不需要的记录。
这整个事情归结为以下几点:是否甚至可以从 Excel 运行查询,本质上更改它包含的数据,而不仅仅是将其输出到 Excel?如果可以,那么是否可以将参数传递给 AS400 系统并使用它来创建情境 A、B 或 C?
我希望这个例子有意义。
编辑 - 新示例
假设我有不同的客户 A 和 B。我可以打开 AS400 程序并运行一个查询,其中我指定我只需要客户 A 的数据。然后我可以打开 Excel 并使用过滤器(如 Hambone 所述)查询以确定我要输出哪些记录。但是,如果我想处理来自客户 B 的数据,我必须再次打开 AS400 并使用不同的参数运行查询。我希望能够从 Excel 将我的数据集从客户 A“更改”为 B,而不必将两者都包含在我的记录集中然后过滤掉其中一个。
我想如果您可以将参数传递给 AS400,这是可行的。然后,AS400 使用此参数作为记录应存储在查询中的条件来运行查询。这意味着如果参数是客户 B,那么如果不再次通过 AS400 运行查询,就无法访问客户 A 的数据。
非常感谢任何想法:)
【问题讨论】:
-
我怀疑不是,但是你有例子吗?您如何在实际获取记录之前“选择”记录,或者您的意思是基于标准,类似于 where 子句?
-
@Hambone 感谢您的回复 - 不幸的是,我没有任何示例,这就是为什么我怀疑这是不可能的。除了“选择”之外,我不知道该怎么称呼它。这就像打开 AS400 程序并使用“使用查询”功能,除了它是从 Excel 完成的。我的想法是在 Excel 中构建一个
Userform,然后提示用户输入不同的输入。然后将这些输入用作应从 AS400 中的查询中获取记录的条件。这有意义吗? :) -
我想我明白了。在这种情况下,我认为您可以将 Microsoft Query 与与 DB2 的 ODBC 连接一起使用。您可能必须执行一些动态 SQL 来容纳可选参数。如果这听起来像是在进行中,并且您需要一个示例,我可能会想出一个。
-
@Hambone 这听起来很有趣。我已经对 Excel 中的 Power Query 搞砸了,而且我已经有一个有效的 ODBC 连接(至少我认为)。但是,在执行查询之前,我找不到更改查询参数的方法。我只能通过 SQL 语句选择要包含在输出表中的列。如果您可以制作一个示例供我查看,那将非常棒并且非常感谢! :)
-
@Hambone 并且记录在案 - 我没有使用数据库连接或 SQL 的经验。所以如果我不善于解释我的情况或发现,这可能就是原因。不要羞于纠正我或要求更好的解释 - 我渴望学习:)
标签: sql excel vba database-connection ibm-midrange