WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Excel nach Access ... (http://www.wcm.at/forum/showthread.php?t=139737)

Montafon 20.07.2004 10:51

den Datentyp damit ich die Tabelle komplett definiert habe

Feldname
Format
Beschreibung

wbendl 20.07.2004 10:59

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

Montafon 20.07.2004 11:07

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



wbendl 20.07.2004 11:25

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

Montafon 20.07.2004 14:17

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

wbendl 20.07.2004 15:06

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

wbendl 20.07.2004 15:40

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

Montafon 20.07.2004 16:10

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