Tabellen - Neues Feld

Wie kann ich ein neues Feld anlegen?

Für den Fall, dass eine Tabelle bereits existiert und nur ein zusätzliches Feld angehängt werden soll, gibt es verschiedene Möglichkeiten. Die Einfachste ist sicherlich alle Feldtypen in einer Funktion abzuhandeln.

Bei allen nachfolgenden Funktionen wird True als Rückgabe geliefert, wenn das Feld erfolgreich erstellt bzw. angehängt werden konnte. Zudem werden neben dem Datenbankobjekt und dem Tabellennamen der anzulegende Feldname, Feldtype und ggf. die Feldgröße mit übergeben.

DAO-Variante

Beispiel:

Public Function DAO_CreateField(pdbs As DAO.Database, _
                                psTable As String, _
                                psFieldName As String, _
                                plFieldType As DAO.DataTypeEnum, _
                                Optional plFieldSize As Long = 0) _
                                As Boolean
 
    ' Benötigte Objektvariablen
    On Error GoTo HandleErr
    Dim tdef As DAO.TableDef
    Dim tfld As DAO.Field
 
    '// Tabelle zuweisen
    Set tdef = pdbs.TableDefs(psTable)
    '// Neues Feld anlegen
    If plFieldType = dbText Then
        ' Wenn Textfeld, dann
        Set tfld = tdef.CreateField(psFieldName, plFieldType, plFieldSize)
    Else
        Set tfld = tdef.CreateField(psFieldName, plFieldType)
    End If
 
    '// Neues Feld in die Tabelle einfügen
    tdef.Fields.Append tfld
    '// Erfolgreich
    DAO_CreateField = True
 
HandleExit:
    '// Speicher freigeben
    If Not tdef Is Nothing Then Set tdef = Nothing
    If Not tfld Is Nothing Then Set tfld = Nothing
    Exit Function
 
HandleErr:
    Select Case Err.Number
        Case Else
            MsgBox "Fehler " & Err.Number & ": " & _
                   Err.Description, vbCritical, _
                   "modKap02.DAO_CreateField"
    End Select
    DAO_CreateField = False
    Resume HandleExit
End Function
ADOX-Variante

Beispiel:

Public Function ADO_CreateField(pcnn As ADODB.Connection, _
                                psTable As String, _
                                psFieldName As String, _
                                plFieldType As ADODB.DataTypeEnum, _
                                Optional plFieldSize As Long = 0) _
                                As Boolean
 
    ' Benötigte Objektvariablen
    On Error GoTo HandleErr
    Dim cat As New ADOX.Catalog
    Dim tbl As ADOX.Table
 
    cat.ActiveConnection = pcnn
 
    '// Tabelle zuweisen
    Set tbl = cat.Tables(psTable)
 
    '// Neues Feld anlegen und einfügen
    If plFieldType = adWChar Then
        ' Wenn Textfeld, dann
        tbl.Columns.Append psFieldName, plFieldType, plFieldSize
    Else
        tbl.Columns.Append psFieldName, plFieldType
    End If
 
    '// Erfolgreich
    ADO_CreateField = True
 
HandleExit:
    '// Speicher freigeben
    If Not tbl Is Nothing Then Set tbl = Nothing
    If Not cat Is Nothing Then Set cat = Nothing
    Exit Function
 
HandleErr:
    Select Case Err.Number
        Case Else
            MsgBox "Fehler " & Err.Number & ": " & _
                   Err.Description, vbCritical, _
                   "modKap02.ADO_CreateField"
    End Select
    ADO_CreateField = False
    Resume HandleExit
End Function
SQL-DDL-Variante

Beispiel:

' DAO-Variante
Public Function DDL_CreateFieldDao(pdbs As DAO.Database, _
                                   psTable As String, _
                                   psFieldName As String, _
                                   psFieldType As String, _
                                   Optional plFieldSize As Long = 0) _
                                   As Boolean
 
  On Error GoTo HandleErr
  Dim sSQL As String
  Const csText As String = "TEXT"
 
  sSQL = "ALTER TABLE " & psTable & " ADD COLUMN " & psFieldName & _
          " " & psFieldType
  If psFieldType = csText Then
    If plFieldSize > 0 Then
      sSQL = sSQL & "(" & plFieldSize & ")"
    End If
  End If
 
  pdbs.Execute sSQL, dbFailOnError
  DDL_CreateFieldDao = True
 
HandleExit:
  Exit Function
 
HandleErr:
  Select Case Err.Number
    Case Else
      MsgBox "Fehler " & Err.Number & ": " & _
             Err.Description, vbCritical, _
             "modKap02.DDL_CreateFieldDao"
  End Select
  DDL_CreateFieldDao = False
  Resume HandleExit
End Function
 
' ADO-Variante
Public Function DDL_CreateFieldAdo(pcnn As ADODB.Connection, _
                                   psTable As String, _
                                   psFieldName As String, _
                                   psFieldType As String, _
                                   Optional plFieldSize As Long = 0) _
                                   As Boolean
 
  On Error GoTo HandleErr
  Dim sSQL As String
  Const csText As String = "TEXT"
 
  sSQL = "ALTER TABLE " & psTable & " ADD COLUMN " & psFieldName & _
          " " & psFieldType
  If psFieldType = csText Then
    If plFieldSize > 0 Then
      sSQL = sSQL & "(" & plFieldSize & ")"
    End If
  End If
 
  pcnn.Execute sSQL, dbFailOnError
  DDL_CreateFieldAdo = True
 
HandleExit:
  Exit Function
 
HandleErr:
  Select Case Err.Number
    Case Else
      MsgBox "Fehler " & Err.Number & ": " & _
             Err.Description, vbCritical, _
             "modKap02.DDL_CreateFieldAdo"
  End Select
  DDL_CreateFieldAdo = False
  Resume HandleExit
End Function