MS Access: программно переименовывать столбцы - PullRequest
4 голосов
/ 02 февраля 2010

Мне нужно обновить все имена столбцов в базе данных Access из 8 таблиц. Короче говоря, каждое подчеркивание в имени столбца должно быть заменено пробелом. Можете ли вы порекомендовать быстрый способ сделать это?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2010

Я написал код для приложения только на прошлой неделе:

  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

В этом случае предыдущий разработчик тупо использовал соглашения об именах переменных 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

Вы можете легко адаптировать подпрограмму 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

Все это говорит о том, что я действительно, действительно настоятельно рекомендую, чтобы вы не заменяли подчеркивания пробелами, поскольку это значительно усложняет работу с именами полей в SQL и в коде , Я бы использовал регистр CAMEL без подчеркиваний, пробелов и тире, чтобы строка Replace () в приведенном выше коде стала такой:

  strNewName = Replace(StrConv(Replace(strFieldName, "_"," "), vbProper)," ", vbNullString)

Это преобразовало бы «Last_Name» или «last_name» в «LastName». Случай верблюда для удобочитаемости имен полей был стандартным для разработчиков Access, пока я программировал в Access (с 1996 года), и избегал проблем, вызванных специальными символами или пробелами (то есть необходимость заключать имя поля в квадратные скобки ).

4 голосов
/ 02 февраля 2010

Вы пытались использовать TableDefs

DatabaseName.TableDefs("TableName").Fields("FieldName").Name = "NewName"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...