Как создать таблицу с полем Autonumber в MS - Access во время выполнения? - PullRequest
5 голосов
/ 17 августа 2011

Я работаю с MS-Access и JSP. Я хочу знать, как мы можем создать таблицу с полем автонумерации и с первичным ключом.

query = "Создать таблицу Registration_A (Reg_No PRIMARY KEY AUTOINCREMENT, FName varchar (2)) ";

Но это дает синтаксическую ошибку. Какой правильный синтаксис?

Ответы [ 7 ]

6 голосов
/ 17 августа 2011
CREATE TABLE Registration_A (
Reg_No AUTOINCREMENT, 
FName VARCHAR(2), 
CONSTRAINT RegA_PK PRIMARY KEY(Reg_No))
3 голосов
/ 11 июля 2014

Вы можете использовать ключевое слово COUNTER для создания поля AutoNumber с использованием DDL.Я только что проверил это в консольном приложении Java, и оно работало для меня как под мостом JDBC-ODBC, так и UCanAccess :

String query = 
        "CREATE TABLE Registration_A (" +
            "Reg_No COUNTER PRIMARY KEY, " +
            "FName VARCHAR(2))";
Statement stmt = con.createStatement();
stmt.executeUpdate(query);
1 голос
/ 16 декабря 2014

Сначала необходимо указать тип данных, а затем первичный ключ.

query="Create Table Registration_A (Reg_No AUTOINCREMENT PRIMARY KEY, FName varchar(2))";
1 голос
/ 06 февраля 2013

В этом примере ADOX используется для создания таблицы доступа с первичным ключом автономного номера

ADOX.Catalog cat = new ADOX.Catalog();
ADOX.Table table = new ADOX.Table();
ADOX.Key tableKey = new Key();
ADOX.Column col = new Column();
String connString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\test.accdb; Jet OLEDB:Database Password=";

 cat.Create(ConnString);

 // Define column with AutoIncrement features
 col.Name = "ID";
 col.Type = ADOX.DataTypeEnum.adInteger;
 col.ParentCatalog = cat;
 col.Properties["AutoIncrement"].Value = true;

 table.Name = "Security";
 table.Columns.Append(col);    // default data type is text[255]
 table.Columns.Append("Username", ADOX.DataTypeEnum.adVarWChar, 255);
 table.Columns.Append("Password", ADOX.DataTypeEnum.adVarWChar, 255);
 table.Columns.Append("Engineer", ADOX.DataTypeEnum.adBoolean);
 table.Columns.Append("Default", ADOX.DataTypeEnum.adBoolean);

 // Set ID as primary key
 tableKey.Name = "Primary Key";
 tableKey.Columns.Append("ID");
 tableKey.Type = KeyTypeEnum.adKeyPrimary;

 // Add table to database
 cat.Tables.Append(table);
0 голосов
/ 28 декабря 2018

Семь лет спустя я не вижу, как это сделать в DAO, ни в одном из приведенных выше ответов или где-либо еще на любом сайте Stack Exchange. Вот метод, который я разработал. Следующий код VBA создает таблицу с полем автонумерации в качестве первичного ключа, помещает в нее произвольные данные, а затем открывает таблицу для отображения результатов. Я успешно запустил этот код в Access 2007.

Sub Make_Table_With_Autonum_Using_DAO()

Dim oDB As DAO.Database: Set oDB = CurrentDb()
Dim oTable  As DAO.TableDef, sObjTable As String: sObjTable = "table_name"
Dim oField As DAO.Field, oIndex As DAO.Index
Dim oRS As DAO.Recordset

Set oTable = oDB.CreateTableDef(sObjTable)
With oTable
    Set oField = .CreateField("ID_Object", dbLong)      ' Create ID field.
        oField.Attributes = dbAutoIncrField                 ' Make it autoincrement.
        .Fields.Append oField                               ' Add to table's Fields collection.
        Set oIndex = .CreateIndex("Index_Object")           ' Create index.
        oIndex.Primary = True                               ' Make it a primary key.
        Set oField = oIndex.CreateField("ID_Object")        ' Make index field for ID field.
        oIndex.Fields.Append oField                         ' Add it to index's Fields coll'n.
        .Indexes.Append oIndex                              ' Add index to table's Indexes coll'n.
        Set oIndex = Nothing                                ' Remove index from memory.
        Set oField = Nothing                                ' Remove field from memory.
    .Fields.Append .CreateField("field2", dbText)         ' Create and add other fields to
    .Fields.Append .CreateField("field3", dbInteger)      '       table's Fields collection.
    ' etc.
  End With
oDB.TableDefs.Append oTable                       ' Add table to database's TableDefs collection.
Set oTable = Nothing

Set oRS = oDB.OpenRecordset(sObjTable)            ' Enter arbitrary data into table.
oRS.AddNew: oRS!Field2 = "text 1": oRS!field3 = 123: oRS.Update
oRS.AddNew: oRS!Field2 = "text 2": oRS!field3 = 456: oRS.Update
oRS.AddNew: oRS!Field2 = "text 3": oRS!field3 = 789: oRS.Update
oRS.Close

DoCmd.OpenTable (sObjTable)
oDB.Close
Set oRS = Nothing
Set oDB = Nothing

End Sub

Документация Microsoft для необходимых элементов VBA в порядке появления в коде:

Эта документация говорит обо всем, что нужно знать, но не сводит все вместе, чтобы объяснить, как сделать первичный ключ автонумерации. Следующая документация MS (больше не доступная непосредственно от MS) объясняет, как сделать поле autonumber, но не как сделать его первичным ключом.

В следующем посте на форуме сообщества Microsoft принятый ответ Андрея Артемьева объясняет все это.

Мой код выше по сути такой же, как и его в этом ответе, с дополнительным комментарием, объясняющим, что происходит.

0 голосов
/ 12 апреля 2018
CREATE TABLE `Tablename` (Field1 AUTOINCREMENT CONSTRAINT `Primarykey` PRIMARY
KEY, `Field2` DATETIME, `Field3` TEXT(25), `Field4` DOUBLE);
0 голосов
/ 01 октября 2012

Попробуйте это

 Create Table Registration_A 
       (
         Reg_No AUTOINCREMENT,
         FName varchar(2),
         PRIMARY KEY(Reg_No)
       );     
...