![]() |
den Datentyp damit ich die Tabelle komplett definiert habe
Feldname Format Beschreibung |
Der Typ kann bereits bei der Erstellung mit CreateField festgelegt werden.
Wenn das Feld mit Append zu Auflistung hinzugefügt wurde, ist die Type-Eigenschaft schreibgeschützt. mfg WB |
genau dieses Problem - schreibgeschützt
nun ist guter Rat teuer mein Code Do Until rs.EOF Set fld = tbl.CreateField(rs.Fields(0), dbText, 255) tbl.Fields.Append fld rs.MoveNext Loop db.TableDefs.Append tbl rs.MoveFirst Set tbl = db.TableDefs("neue Felder") Do Until rs.EOF Set fld = tbl.Fields(rs.AbsolutePosition) If Not IsNull(rs.Fields(1)) Then fld.Properties.Append fld.CreateProperty("Description", dbText, rs.Fields(1)) End If rs.MoveNext Loop Do Until rs.EOF Set fld = tbl.Fields(rs.AbsolutePosition) If Not IsNull(rs.Fields(1)) Then fld.Properties.Append fld.CreateProperty("Felddatentyp", dbText, rs.Fields(2)) End If rs.MoveNext Loop rs.Close Set db = Nothing End Sub die 2. Schleife kann ich mir sparen denn ab der 1. Schleife das neue Feld einen Schreibschutz |
Wie ich schon sagte:
Der Typ kann bereits bei der Erstellung mit CreateField festgelegt werden. Oder du änderst den Typ bevor das Feld zu Auflistung hinzugefügt wird. mfg WB |
so nun hats geklappt
für die's interessiert Private Sub StartImport(FileName As String) Dim db As DAO.Database Dim tbl As DAO.TableDef Dim fld As DAO.Field Dim rs As DAO.Recordset Dim Format As Byte Set db = CurrentDb Set rs = db.OpenRecordset("Felder für RC-Plant", dbOpenDynaset) 'zuerst die neuen Felder inkl. Beschreibung nach Access importieren - Felder für RC-Plant Set tbl = db.CreateTableDef("neue Felder für RC-Plant") 'in der Datenbank sind die neuen Feldnamen inkl. Beschreibungen enthalten und können dann 'mittels kopieren einfügen direkt in die Tabelle Element übernommen werden Do Until rs.EOF Select Case rs.Fields(2) Case "Text" Format = 10 Case "Zahl" Format = 3 Case "Ja/Nein" Format = 1 Case Else Format = 10 End Select Set fld = tbl.CreateField(rs.Fields(0), Format) tbl.Fields.Append fld rs.MoveNext Loop db.TableDefs.Append tbl rs.MoveFirst Set tbl = db.TableDefs("neue Felder") Do Until rs.EOF Set fld = tbl.Fields(rs.AbsolutePosition) If Not IsNull(rs.Fields(1)) Then fld.Properties.Append fld.CreateProperty("Description", dbText, rs.Fields(1)) End If rs.MoveNext Loop 'Do Until rs.EOF ' Set fld = tbl.Fields(rs.AbsolutePosition) ' If Not IsNull(rs.Fields(1)) Then ' fld.Properties.Append fld.CreateProperty("Format", dbText, rs.Fields(2)) ' End If 'rs.MoveNext 'Loop rs.Close Set db = Nothing MsgBox ("Fertig!") End Sub und anschließend kopieren und einfügen im Entwurfsmodus vielleicht nicht elegant aber es löst mein Problem Danke |
Gratulation!
Ich kann mir nicht vorstellen, daß das Anfügen dieser Felder an die "echte" Tabelle nicht funktioniert. Entscheidend ist wahrscheinlich die Reihenfolge der Operationen. Wahrscheinlich läßt sich alles in einem Schleifendurchlauf erledigen. Jetzt bin ich echt neugierig. Ich glaube ich muß das mal ausprobieren. EDIT: Wie ich's mir dachte. Es funktioniert tadellos. mfg WB |
Die Zeit zum Editieren war leider schon abgelaufen
Hier der Code mit dem ich's probiert habe. Tabelle1 ehält vorher bereits 3 Felder. Set tbl = db.TableDefs("Tabelle1") Do Until rs.EOF Select Case rs.Fields(1) Case "Text" Format = 10 Case "Zahl" Format = 3 Case "Ja/Nein" Format = 1 Case Else Format = 10 End Select Set fld = tbl.CreateField(rs.Fields(0), Format) tbl.Fields.Append fld fld.Properties.Append fld.CreateProperty("Description", dbText, rs.Fields(2)) rs.MoveNext Loop Mit der kleinen Änderung ersparst du dir kopieren/einfügen. mfg WB |
danke
was ein db.CreateTablDef so alles ausmacht nun steht db.TableDefs und es funktioniert es gibt nur noch einen Hacken es kommt der Fehler "zuviele Felder definiert" hängt aber vielleicht mit der Länge der Feldnamen zusammen |
Alle Zeitangaben in WEZ +2. Es ist jetzt 00:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag