【问题标题】:Howto write DDL ALTER TABLE Modify statement using string variable for TABLE name如何使用 TABLE 名称的字符串变量编写 DDL ALTER TABLE Modify 语句
【发布时间】:2016-06-04 01:50:52
【问题描述】:

在循环中,我想以编程方式更改某些字段的类型和长度。 使用 DDL 语句 ALTER Table Alter Column 我成功了, 但只能使用硬编码的表名。对于我可以使用的字段名称 一个字符串变量。 在我写表名 TDF.Name 时,它​​就是产品 “对于每个 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”。 请有人告诉我正确的语法 目标数据库和表的变量 表例如->“数据库名.MDB/表名”?

非常感谢提前 赫尔穆特·斯坦尼克

【问题讨论】:

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


    【解决方案1】:

    减少字段的数量,主要是 MEMO 字段 - 对我来说,比文本字段更好,就我的目的而言,确实有效。现在我有 6xLongInteger、1xText、241xMEMO 字段,现在我不再收到“Too Many Fields”消息。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你好,赫尔穆特。 Access 不允许您在 SQL 语句中使用数据库或模式名称来限定表名,正如您可能从使用其他数据库的经验中所期望的那样。您可以连接到远程访问数据库并执行该语句。
      【解决方案3】:

      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
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 2020-05-08
      • 2013-01-26
      相关资源
      最近更新 更多