【问题标题】:Loop through Access tables循环访问表
【发布时间】:2012-07-11 17:03:17
【问题描述】:

我正在 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));
}

【问题讨论】:

    标签: ms-access vba loops


    【解决方案1】:

    在 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 语句。

    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,没有证据表明它不是设计错误。 ;-)

    【讨论】:

    • +1。如果可以的话,我会为添加最后一段添加额外的赞成票。 :-)
    • @KenWhite 最后一段是我提交这个答案的真正动机。 :-) 干杯。
    • 感谢您的详尽回答,:-) 至于最后一段,我不确定我的结构是否正确,但我不确定这是否是正确的地方关于那个。我正在从具有相同字段和行的 excel 中组织相同的表进行访问。我可以将所有数据放入一张表中,但我只会有一个大电子表格
    • 你在我完成编辑之前回复了,这就是我问的地方。再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    相关资源
    最近更新 更多