循环访问表

时间:2012-07-12 00:27:02

标签: ms-access vba loops

我在Access中创建一个数据库,它将有许多相似的表,并且它们的名称都将按顺序命名,例如table_0,table_1 ......

我想知道是否有办法在VBA中创建一个循环来首先创建表,然后更改它们,例如更容易添加字段。

因此,如果我要制作表格,这将是流程,但在VBA中

while(i=0, i<20,i++){
CREATE TABLE  table_i(
field_1 int PRIMARY KEY,
field_2 CHAR(255));
}

1 个答案:

答案 0 :(得分:2)

在VBA中,您可以像这样遍历编号的表名......

Dim strTable As String
Dim i As Long
For i = 0 To 20
    strTable = "table_" & CStr(i)
    Debug.Print strTable
Next i

但是除了打印之外,你想对每个表名做些什么。所以说你已经制定了CREATE TABLE声明。也许它看起来像这样......

CREATE TABLE table_name (
field_1 INTEGER PRIMARY KEY,
field_2 TEXT(255));

因此,您可以将该DDL语句加载到字符串变量中,然后每次通过For循环将table_name替换为当前值strTable,并执行该DDL语句。< / p>

Dim strTable As String
Dim i As Long
Dim strSql As String
strSql = "CREATE TABLE table_name (" & vbCrLf & _
    "field_1 INTEGER PRIMARY KEY," & vbCrLf & _
    "field_2 TEXT(255));"
For i = 0 To 20
    strTable = "table_" & CStr(i)
    CurrentProject.Connection.Execute Replace(strSql, _
        "table_name", strTable)
Next i

Replace()函数首次可用于Access 2000.如果您使用的是较旧的Access版本,则需要使用其他方法来处理SQL字符串。

如果您想执行ALTER TABLE语句,则可以改为执行此操作。

因此,我认为使用VBA可以轻松完成您想要的任务。但是我不确定你是否应该这样做。具有相同结构的多个表通常是表示设计错误的红旗。没有证据表明您的案例中存在设计错误。 OTOH,没有证据表明它的设计错误 。 ; - )