2010-02-02 8 views
2

J'ai besoin de mettre à jour tous les noms de colonne dans une base de données Access de 8 tables. En résumé, chaque caractère de soulignement dans un nom de colonne doit être remplacé par un espace. Pouvez-vous recommander une méthode rapide pour cela?MS Access: renommer par programmation les colonnes

Répondre

2

J'écrit le code pour cela pour une application semaine dernière:

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 

Dans ce cas, un développeur précédent avait bêtement utilisé VBA conventions de nommage des variables pour les noms de champs (txtLastName pour ce qui devrait être LastName, par exemple) et j'ai eu besoin de tous les supprimer. Le code est appelé comme ceci:

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 

Vous pouvez facilement adapter les RenameFields() sous utiliser Remplacer() pour le nouveau nom, quelque chose comme ceci:

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 

Tout cela étant dit, je d vraiment, très fortement suggérer que vous pas remplacer les caractères de soulignement par des espaces, car cela rend beaucoup, beaucoup plus difficile de travailler avec les noms de champ dans SQL et dans le code. J'utiliser CamelCase sans soulignement ou des espaces ou des tirets de telle sorte que ce qui précède la ligne dans le code Remplacer() deviendrait:

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

qui transformerait « Last_Name » ou « last_name » à « LastName ». Camel case pour la lisibilité des noms de champs a été standard pour les développeurs Access tant que j'ai été en programmation dans Access (depuis 1996), et évite les problèmes causés par des caractères spéciaux ou des espaces (à savoir, avoir à entourer le nom de champ avec des crochets).