如何使用TABLE名称的字符串变量编写DDL ALTER TABLE修改语句

时间:2016-02-22 15:05:59

标签: ms-access access-vba ms-access-2010 ddl

在循环中,我想以编程方式更改某些字段的类型和长度。 使用DDL语句ALTER Table Alter Column I成功, 但只能使用硬编码的表名。对于我可以使用的字段名称 一个字符串变量。 正如我写的表名TDF.Name,这是产品 a"对于每个TDF"声明,并运行此代码:

Set dbs = CurrentDb()
For Each TDF In dbs.TableDefs 
strfield = "M1"
strSQL = "ALTER TABLE TDF.Name ALTER COLUMN strField TEXT(5);"
DBEngine(0)(0).Execute strSQL, dbFailOnError

发生错误。 " TDF.MDB"无法找到。 请有人能告诉我正确的语法 目标数据库和表的变量 表例如 - > " databasename.MDB / tablename" ?

非常感谢提前 Helmut Steinecker

3 个答案:

答案 0 :(得分:2)

db引擎对TDF.NamestrField一无所知,所以在DDL语句中包含它们的值......

strSQL = "ALTER TABLE [" & TDF.Name & "] ALTER COLUMN [" & strField & "] TEXT(5);"

注意For Each TDF In dbs.TableDefs表示代码将尝试对数据库中的每个表执行ALTER TABLE,包括MSysObjects等系统表。我建议你不要试图改变系统表......

For Each TDF In dbs.TableDefs
    If Not (TDF.Name Like "MSys*") Then
        ' ALTER TABLE
    End If
Next

答案 1 :(得分:0)

非常感谢,HansUp, 既然我已经阅读了你的很多答案, 我希望,你会回答,所以: 你给了我解决方案。 我可以将数据库名称附加到表变量吗? 由于我有255个字段,我得到了着名的 - 太多字段错误消息。 我将减少字段,然后慢慢地增加 添加字段。有600个表,这将是另一个DDL语句。 但现在我正走向成功之路。 非常感谢慕尼黑南部的奥托布伦巴伐利亚州。

答案 2 :(得分:0)

为了我的目的,减少字段数量(主要是MEMO字段)对我来说比文本字段更好。现在我有6xLongInteger,1xText,241xMEMO字段,现在我已经没有了#34; Too Many Fields"消息。