【问题标题】:Using a VBA array in a SQL statement在 SQL 语句中使用 VBA 数组
【发布时间】:2013-08-11 12:38:49
【问题描述】:

我正在尝试编写一些代码,使用 SQL 从多个表中删除行。

用户可以在文本框中键入类型数字,这些数字用逗号分隔,用于 SQL DELETE 语句的 WHERE 子句。

我已经设法将字符串拆分为一个变体数组,现在我想将它插入到我的 SQL 语句中。

如何将变量插入到 SQL 语句中并让它遍历数组的每个元素?

编辑:更多的挖掘让我了解了 For Each Next 语句。这可能是我正在寻找的。​​p>

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    我建议你在 VBA 中构建你的查询,然后你的数字列表可以是一个 IN 语句:

     sSQL = "DELETE FROM table WHERE ID In (" & MyList & ")"
    

    其中 MyList = "1,2,3,4" 或类似的。

    如您所见,您不需要数组,文本框比组合框更合适。如果您希望允许您的用户通过名称进行选择,那么列表框很有用。您可以遍历列表框中的选定项目,并从 ID 构建一个字符串以在 Delete 语句中使用。 (MS Access 2007 - Cycling through values in a list box to grab id's for a SQL statement)

    然后您可以针对数据库实例执行 sql。例如:

     Dim db As Database
    
     Set db = CurrentDB
     db.Execute sSQL, dbFailOnError
    
     MsgBox "You deleted " & db.RecordsAffected & " records."
    

    【讨论】:

    • 抱歉,当我实际上是指文本框时,我混淆了我的术语并使用了组合框。我不知道声明中的位置,我将来会使用它。我必须对这些数字做其他事情,我需要使用一个数组,所以你的答案在这种情况下不合适。我自己设法解决了这个问题。不过我会标记为接受,因为这是一个非常好的答案,并教会了我一些新东西。
    • 在 VBA 中从列表创建数组确实非常容易。 List = "1,2,3"; Ary = Split(List,","),但我怀疑你可以在sql语句中使用数组。
    • 我使用了 for each next 语句来做到这一点。
    • 这是一个漫长的过程。 :)
    【解决方案2】:

    通用方法

    WHERE 
    ','+Array+',' like '%,'+col+',%'
    

    它将考虑数组中所有可用的数字

    【讨论】:

      【解决方案3】:

      你可以把它简单化并详细说明一个字符串,比如

      stringBuilder sb = StringBuilder("DELETE FROM YOURTABLE WHERE ");
      foreach(string st in stringArray){
          sb.append("YOURFIELD='" + st + "'");
          //If it is not the last element, add an "OR"
          if (st != stringArray[stringArray.length -1]) sb.append(" OR ");
      }
      
      //Now, you have a string like
      //DELETE FROM YOURTABLE WHERE YOURFIELD='hello' OR YOURFIELD='YES'
      
      //... do something with the command
      

      【讨论】:

        【解决方案4】:

        如果您想使用来自两个不同数组的数组值对两列(或多列)运行 SQL 查询,此方法将失败。 .例如

        where col1=array1(i) and col2=array2(i)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-12
          • 1970-01-01
          • 1970-01-01
          • 2012-06-16
          • 1970-01-01
          • 1970-01-01
          • 2021-10-09
          相关资源
          最近更新 更多