【问题标题】:Dynamically create the where condition in Access VBA在 Access VBA 中动态创建 where 条件
【发布时间】:2020-07-13 21:17:09
【问题描述】:

我创建了一个表单,该表单在同一个访问数据库上显示包含大约 30 个本地表的列表框。 我创建了删除函数来从表中删除数据。

我想根据 where 条件删除数据。 我想为 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 个 if Else 子句`

这可不是什么好办法

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

帮助非常感谢!

谢谢

【问题讨论】:

  • 添加一个将表名与where子句相关联的表?或使用Select Case 方法。

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


【解决方案1】:

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

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

例如,Table1 需要 "act ='A' AND LE ='C'" 作为 WHERE 子句的一部分,而 Table2 需要 "gors='G'" em> 也要添加。假设 "act ='A' AND LE ='C'" 在任何一个出现在 WHERE 语句中的任何情况下都是配对的,因此这可能是单个元素(元素 A)和"gors='G'" 可能是另一个(元素 B)。

当您创建要执行的 SQL 字符串时,您告诉函数如果选择了 Table1,我们将元素 A 添加到“CombinedElements”字符串中。如果选择 Table2,我们添加 both 元素 A 和 B。

选择元素后,您可以组装一个 SQL 字符串,将它们放在一起:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 2011-12-14
      • 1970-01-01
      • 2016-07-03
      • 2021-04-16
      相关资源
      最近更新 更多