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