MS Access:以编程方式重命名列

nw.*_*nw. 4 database ms-access database-design

我需要更新 8 个表的 Access 数据库中的所有列名。简而言之,列名中的每个下划线都应替换为空格。你能推荐一种快速的方法来做到这一点吗?

Ily*_*tov 5

你有没有尝试使用 TableDefs

DatabaseName.TableDefs("TableName").Fields("FieldName").Name = "NewName"
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/bb220949.aspx


Dav*_*ton 5

上周我为一个应用程序编写了代码:

  Public Sub RenameFields(ByRef tdf As DAO.TableDef)
    Dim fld As DAO.Field
    Dim strFieldName As String
    Dim strNewName As String

    Debug.Print "==============================================" & vbCrLf & UCase(tdf.Name)
    For Each fld In tdf.Fields
      strFieldName = fld.Name
      strNewName = Mid(strFieldName, 4)
      Select Case Left(strFieldName, 3)
        Case "boo", "byt", "cur", "dat", "hyp", "int", "mem", "obj", "txt"
          fld.Name = strNewName
          Debug.Print tdf.Name & "." & strFieldName & "=>" & strNewName
      End Select
    Next fld
    Set fld = Nothing
  End Sub
Run Code Online (Sandbox Code Playgroud)

在这种情况下,以前的开发人员愚蠢地使用了 VBA 变量命名约定作为字段名称(例如 txtLastName 应该是 LastName),我需要删除所有这些约定。代码的调用方式如下:

  Dim tdf As DAO.TableDef

  For Each tdf in CurrentDB.TableDefs
    If Left(tdf.Name,3) = "tbl" Then ' <= this line may differ for you
       Call RenameFields(tdf)
    End If
  Next tdf
  Set tdf = Nothing
Run Code Online (Sandbox Code Playgroud)

您可以轻松地调整 RenameFields() 子项以使用 Replace() 作为新名称,如下所示:

  Public Sub RenameFields(ByRef tdf As DAO.TableDef)
    Dim fld As DAO.Field
    Dim strFieldName As String
    Dim strNewName As String

    Debug.Print "==============================================" & vbCrLf & UCase(tdf.Name)
    For Each fld In tdf.Fields
      strFieldName = fld.Name
      strNewName = Replace(strFieldName, "_"," ")
      If strFieldName <> strNewName Then
         fld.Name = strNewName
         Debug.Print tdf.Name & "." & strFieldName & "=>" & strNewName
      End If
    Next fld
    Set fld = Nothing
  End Sub
Run Code Online (Sandbox Code Playgroud)

尽管如此,我真的、真的强烈建议您不要将下划线替换为空格,因为这使得在 SQL 和代码中使用字段名称变得非常非常困难。我将使用不带下划线、空格或破折号的 CAMEL 大小写,以便上面代码中的 Replace() 行将变为:

  strNewName = Replace(StrConv(Replace(strFieldName, "_"," "), vbProper)," ", vbNullString)
Run Code Online (Sandbox Code Playgroud)

这会将“Last_Name”或“last_name”转换为“LastName”。自从我在 Access 中编程以来(自 1996 年以来),用于字段名称可读性的驼峰式大小写一直是 Access 开发人员的标准,并且避免了由特殊字符或空格引起的问题(即必须用方括号将字段名称括起来) )。