Fields.Attributes = dbAutoIncrField
Hi,
I send yesterday this mail, but I don't think it passed.
A VBA Access code was perfectly working in Office 2003, but, now I change to Office 2013…
I search, but nothing I found on the net response exactly to my problem. Can you help me?
Here us the code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Sub Create_MyTable:
Set dbs = appAccess.CurrentDb
sTableName = "MyTable"
Set tdf = dbs.CreateTableDef(sTableName)
With tdf
.Fields.Append .CreateField("Id", dbLong)
.Fields.Append .CreateField("IdOther", dbLong)
Set idx = .CreateIndex("Id")
idx.Fields.Append idx.CreateField("Id")
idx.Primary = True
.Indexes.Append idx
End With
Set fld = tdf.Fields("id")
fld.Attributes = dbAutoIncrField *Here is the problem
dbs.TableDefs.Append tdf
End Sub |
Thanks,
Alain.
Lien avec une table à la place d'une table incluse dans la DB
Bonsoir,
Donc depuis mon passage en 2013, j'ai quelques problèmes. Celui de AutoNumber est résolu. Merci !!!
Mais cette table créée avec DAO ne réagit pas comme les autres.
Une fois créées, je veux transférer la structure de ces tables dans une autre DB, pour ensuite détruire cette DB temporaire une fois les requêtes effectuées.
J'utilise pour cela:
Code:
1 2 3 4 5 6
| sTableCollection= la liste des tables à transférer
sTmpFile= La DB temporaire
For Each v In Split(sTableCollection)
DoCmd.TransferDatabase acLink, "Microsoft Access", sTmpFile, acTable, v, v
Next |
Seule la table créée via DAO bloque ...
Merci ...
Tests sur les tables à transférer
Bonsoir,
Il y avait donc trois tables dans cette variable.
J’ai modifié le VBA pour qu’elles soit toutes créées via le même process (DAO)
J’ai également changé l’ordre de la création des tables, ce qui n’avait aucune influence sur le reste de la procédure.
J’ai donc modifié le transfert avec vos instructions , voici le résultat :
Tempfile 0 TblONSyst
Tempfile 0 TblSystStruct
Tempfile 0 TblON
La dernière bloque, les autres sont bien transférées.
Voici le code de la deuxième (pour exemple):
CODE
CreateTblONSyst:
sTableName = "TblONSyst"
Set oTdf = oDb.CreateTableDef(sTableName)
With oTdf
.Fields.Append .CreateField("IdSyst", dbLong)
.Fields.Append .CreateField("IdStop", dbLong)
.Fields.Append .CreateField("Syst_Name", dbText, 40)
.Fields.Append .CreateField("IdSystLevel", dbLong)
.Fields.Append .CreateField("Syst_OrderNbr", dbLong)
.Fields.Append .CreateField("IdSyst_Sup", dbLong)
.Fields.Append .CreateField("IdSyst87", dbLong)
.Fields.Append .CreateField("IdSyst67", dbLong)
For Each v In Split(Mid$(sSysLevels, 5))
sON = "ON" & v
.Fields.Append .CreateField(sON, dbLong)
Next v
Set oIndex = .CreateIndex("IdSyst")
oIndex.Fields.Append oIndex.CreateField("IdSyst")
oIndex.Primary = True
.Indexes.Append oIndex
End With
oDb.TableDefs.Append oTdf
subHideNavigationPane
GoSub TableCollection
Return
CODE
Voici le code de celle qui pose problème :
CODE
CreateTblON:
sTableName = "TblON"
Set oDb = CurrentDb
Set oTdf = oDb.CreateTableDef(sTableName)
Set oField = oTdf.CreateField("Id", dbLong)
oField.Attributes = dbAutoIncrField
oTdf.Fields.Append oField
oTdf.Fields.Append oTdf.CreateField("IdSyst", dbLong)
Set oIndex = oTdf.CreateIndex("PK_Id")
oIndex.Primary = True
oIndex.Fields.Append oIndex.CreateField("Id")
oTdf.Indexes.Append oIndex
Set oIndex = oTdf.CreateIndex("PK_IdSyst")
oIndex.Fields.Append oIndex.CreateField("IdSyst")
oTdf.Indexes.Append oIndex
oDb.TableDefs.Append oTdf
subHideNavigationPane
GoSub TableCollection
'GoSub TransfertTable
Return
CODE
L'utilisation des objets est différentes entre ces deux création de table, mais celle qui n'a pas été modifiée (la première) passe sans problème ...
Merci,
Alain.