2016-07-18 16 views
1

Ich habe eine Datenbank Database und eine Tabelle Table. Ich habe online gefunden, wie man ein Feld aus einer neu erstellten Datenbank und Tabelle in VBA in MS Access erstellt, aber ich weiß nicht, wie dies zu tun ist, wenn die Datenbank und die Tabelle bereits vorhanden sind, bevor das Makro ausgeführt wurde.Wie erstellt man ein Feld in einer bereits vorhandenen Tabelle mit VBA für MS Access?

Sub CreateTable() 

    Dim db As DAO.Database 
    Dim table1 As DAO.TableDef 

    Set db = CurrentDb 

    Set table1 = db.CreateTableDef("ExampleTable") 

    With table1 
     .Fields.Append.CreateField("newField", String) 
    End With 

Aber wie kann ich anpassen dies das gleiche Feld zu einer bereits existierenden Tabelle hinzuzufügen:

Um es ohne eine bereits existierende Datenbank und Tabelle zu tun, kann ich folgende ausführen?

Oder genauer gesagt, wie ändere ich

Set table1 = db.CreateTableDef("ExampleTable") 

so dass table1 auf eine vorhandene Tabelle in der Datenbank db?

Antwort

4

Sie können ein Feld zu einer vorhandenen Tabelle hinzufügen, indem Sie eine Access DDL-Anweisung ausführen

Dim strDdl As String 
strDdl = "ALTER TABLE ExampleTable ADD COLUMN newField TEXT(255);" 
CurrentProject.Connection.Execute strDdl 

In TEXT(255), 255 ist die Feldgrße --- die maximale Anzahl von Zeichen, das Feld enthalten kann. Und 255 ist die absolute Obergrenze für ein Access-Textfeld. Beim Erstellen eines TEXT-Felds aus der ADODB.Connection.Execute-Methode müssen Sie einen Wert für die Feldgröße angeben. Wählen Sie einen kleineren Wert, wenn Sie bevorzugen.

Wenn Sie ein neues Feld mit DAO-Methoden erstellen, wie in Ihrer Frage, ist die Feldgröße für ein Textfeld optional. Wenn Sie jedoch keine Größe angeben, verwendet Access die Einstellung "Standard-Textfeldgröße" aus Ihren Zugriffsoptionen.

+1

Was ist die '255' in' TEXT (255) 'für? – Paradox

+0

Erläuterung hinzugefügt. – HansUp

2

So etwas wie das. Verweisen Sie einfach auf den Tabellennamen in der TableDefs Sammlung, anstatt einen zu erstellen.

Public Sub CreateTable() 

Dim table1 As DAO.TableDef 
Dim fld As DAO.Field 
Dim tdf As DAO.TableDef 

' Create the new Table Def object 
Set table1 = New DAO.TableDef 

' Name the Table 
table1.Name = "Test" 

' Create the new Field 
Set fld = New DAO.Field 
fld.Name = "newField" 
fld.Type = DataTypeEnum.dbText 

' Append the Field to the table 
table1.Fields.Append fld 

' Append the table to the Table Def Collection 
' Without this the table just lives in memory 
CurrentDb.TableDefs.Append table1 

' Create another Field 
Set fld = New DAO.Field 
fld.Name = "newField2" 
fld.Type = DataTypeEnum.dbText 

' Append the New Field to the EXISTING table 
CurrentDb.TableDefs("Test").Fields.Append fld 

End Sub 
+0

Vielen Dank für Ihre Hilfe! Würde es Ihnen etwas ausmachen, den Code ein wenig zu kommentieren? Es gibt ein paar Teile, die mir unklar sind (ich bin nicht sehr erfahren mit VBA) – Paradox

+0

Ich habe gerade die Antwort aktualisiert. Ich hoffe, das hilft! –