2010-02-02 6 views
2

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

ответ

2

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

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() к югу использовать Заменить() для нового имени, что-то вроде этого:

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 

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

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

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

Смежные вопросы