在Access VBA中动态创建where条件

时间:2014-10-03 03:15:11

标签: vba access-vba ms-access-2007 ms-access-2010

我创建了一个表单,显示列表框,在同一个访问数据库中有大约30个本地表。 我创建了删除功能来删除表中的数据。

我想根据条件删除数据。 我想动态创建30个表的where条件。我有6列将成为where子句的一部分

扭曲是 一个表将有2列作为条件, 其他可能有3个条件和 另一个表可能具有所有6个条件条件。 我所知道的是删除语句中最多有6个条件,这些列是固定的

让我向你解释一下 对于1表,它是

Delete from table1 where act ='A' AND LE ='C'

对于2表,它是

Delete from Table 2 where act ='A' AND LE ='C' and gors='G'

因此,对于不同的表格,我将使用不同的where子句。

我正在考虑创建一个动态创建查询中where子句的函数。

我将根据表单上的用户选择将表名存储在变量中 然后会有一个if条件。

   if tnbl = table1
    then where condition =  act ='A' AND LE ='C' 
    Else if if tnbl = table2
    then where condition =  act ='A' AND LE ='C' and gors='G'

我不喜欢上面创建where子句的方式因为如果我有30个表我将需要30个如果Else子句`

这根本不是一个好方法

关于如何以最有效的方式实施它的任何建议。

帮助多多赞赏!!

由于

2 个答案:

答案 0 :(得分:0)

在Excel VBA中使用select case。首先使用连接字符串通过使用ADODB对象并使用recorset和打开连接来连接MSAccess 然后创建一个包含所有30个表列表的下拉列表,然后将该值存储在变量中,然后使用select case为每个表定义每个条件。在每种情况下给出删除查询

答案 1 :(得分:0)

当你谈论30个有不同要求的表格时,我不认为你会解决这个问题有点复杂,但如果你能找到相似之处,你可以简化声明。表'要求。

以上面的示例为例,您要在table1和table2中删除的内容之间存在重叠。如果您编写一些代码来获取这些单独的元素并将它们添加到一个字符串中,以后将其用作SQL'执行'命令,你可以节省一些时间。

例如,表1需要" act =' A' AND LE =' C'" 成为WHERE子句的一部分,Table2需要" gors =' G'" 也要添加。让我们说" act =' A' AND LE =' C'" 在任何一个出现在WHERE语句中的情况下配对,因此可以是单个元素(元素A)和 " gors =' G'" 可能是另一个(元素B)。

当您创建SQL字符串以供执行时,您告诉函数如果选择了Table1,我们将元素A添加到' CombinedElements'串。如果选择了Table2,我们添加两个元素A和B.

在您选择了元素之后,您将组装一个将所有元​​素组合在一起的SQL字符串:

CurrentDb.Execute "DELETE FROM " & TableSelected & " WHERE " & CombinedElements & "; ", dbFailOnError

这样做可能会让它更容易处理,并且如果需要,可以灵活地在将来添加更多表格。此外,只需稍加注意,可以调整此方法以允许一次选择多个表。