我正在尝试编写一些使用SQL删除多个表中的行的代码。在SQL语句中使用VBA数组
用户可以将类型数字键入到文本框中,该文本框由SQL DELETE语句的WHERE子句中使用的逗号分隔。
我已经设法将字符串拆分为一个变体数组,现在我想将其插入到我的SQL语句中。
如何将变量插入到SQL语句中并让它贯穿数组的每个元素?
编辑:一点点挖掘教会了我关于For Each Next语句。这可能是我在寻找的。
我正在尝试编写一些使用SQL删除多个表中的行的代码。在SQL语句中使用VBA数组
用户可以将类型数字键入到文本框中,该文本框由SQL DELETE语句的WHERE子句中使用的逗号分隔。
我已经设法将字符串拆分为一个变体数组,现在我想将其插入到我的SQL语句中。
如何将变量插入到SQL语句中并让它贯穿数组的每个元素?
编辑:一点点挖掘教会了我关于For Each Next语句。这可能是我在寻找的。
我建议你在VBA中构建您的查询,然后您的数字列表可以是IN语句:
sSQL = "DELETE FROM table WHERE ID In (" & MyList & ")"
其中MyList =“1,2,3,4”等等。你可以看到,你不需要一个数组,而且一个文本框比一个组合框更适合。如果您希望允许用户通过说名称来选择,则列表框很有用。您可以遍历列表框中的选定项目,并根据要在Delete语句中使用的ID构建一个字符串。 (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."
一种通用方法
WHERE
','+Array+',' like '%,'+col+',%'
它会考虑所有可用的人数在你的阵列
你可以把它简单阐述一个字符串,像
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
如果要使用来自两个不同阵列数组值上的两个(或多个)列运行SQL查询此方法将失败。 .e.g
where col1=array1(i) and col2=array2(i)
对不起,我弄混了术语,并使用comboxbox时,我确实意味着textbox.I不知道在声明中的位置,我将在未来使用它。我必须对这些数字做其他事情,我需要使用数组,因此在这种情况下您的答案不适用。我已经设法自己解决这个问题。我认为是接受,因为这是一个很好的答案,并且教会了我一些新的东西。 – VBwhatnow 2012-07-23 11:38:16
从VBA的列表中创建一个数组的确很容易。 'List =“1,2,3”; Ary = Split(List,“,”)',但我怀疑你可以在sql语句中使用数组。 – Fionnuala 2012-07-23 11:45:52
我为每个下一个语句使用了一个。 – VBwhatnow 2012-07-23 11:56:17