2012-07-23 164 views
3

我正在尝试编写一些使用SQL删除多个表中的行的代码。在SQL语句中使用VBA数组

用户可以将类型数字键入到文本框中,该文本框由SQL DELETE语句的WHERE子句中使用的逗号分隔。

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

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

编辑:一点点挖掘教会了我关于For Each Next语句。这可能是我在寻找的。

回答

7

我建议你在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." 
+0

对不起,我弄混了术语,并使用comboxbox时,我确实意味着textbox.I不知道在声明中的位置,我将在未来使用它。我必须对这些数字做其他事情,我需要使用数组,因此在这种情况下您的答案不适用。我已经设法自己解决这个问题。我认为是接受,因为这是一个很好的答案,并且教会了我一些新的东西。 – VBwhatnow 2012-07-23 11:38:16

+0

从VBA的列表中创建一个数组的确很容易。 'List =“1,2,3”; Ary = Split(List,“,”)',但我怀疑你可以在sql语句中使用数组。 – Fionnuala 2012-07-23 11:45:52

+0

我为每个下一个语句使用了一个。 – VBwhatnow 2012-07-23 11:56:17

0

一种通用方法

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

它会考虑所有可用的人数在你的阵列

0

你可以把它简单阐述一个字符串,像

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 
0

如果要使用来自两个不同阵列数组值上的两个(或多个)列运行SQL查询此方法将失败。 .e.g

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