点击事件上的访问表单创建传递查询

时间:2014-05-14 20:22:20

标签: mysql sql vba ms-access ms-access-2010

我有一个包含数字列表的访问表单[1,2,3,4,5]。单击一个数字时,我想运行一个传递查询,打开查询的数据表视图。因此,例如,单击[3],然后传递查询将运行SQL,如

select * from mytable where number=3  

我必须使用VBA吗?它是如何在VBA中完成的?我有SQL服务器的登录信息,但没有查询表以外的权限。

3 个答案:

答案 0 :(得分:0)

您可以通过ADO将SQL查询发送到SQL Server数据库。

有关ADO的更多信息:http://support.microsoft.com/kb/257819

另请参阅:Connecting to SQL Server over network using ADO from Excel VBA

答案 1 :(得分:0)

实现您想要做的最简单的方法是在数据库中创建并保存一个Query,您可以在其上调用DoCmd.OpenQuery。

提取数据的最有效方法是传递查询,该查询已经设置了谓词(WHERE元素)(以及所有连接属性)。这里的挑战是将参数(1-5)传递给保存的传递查询,方法是可以在其上调用DoCmd.OpenQuery。

执行此操作的方法是在提供1-5的更新控件的AfterUpdate事件上,使用动态SQL创建传递QueryDef(请参阅此处:https://support.microsoft.com/kb/112108),确保WHERE子句表示要过滤的数字。您需要将新QueryDef对象的Connect属性设置为具有到外部数据库的连接字符串。保存您创建的QueryDef,然后使用DoCmd.OpenQuery通过名称调用它。这应该为您提供您正在寻找的功能。

在创建传递QueryDef之前,您确实需要做的事情是检查它是否存在并删除它(如果它已经存在(或更新其属性,我猜)或者您将收到错误。

答案 2 :(得分:0)

使用已保存的传递查询和DAO。

您可以为总共2行代码执行此操作。

此代码可以使用:

CurrentDb.QueryDefs("MyPass").SQL = "select * from mytable where number = " & Me.Number
DoCmd.OpenQuery "MyPass"