【问题标题】:How to create table with Autonumber field in MS - Access at run time?如何在 MS 中创建带有自动编号字段的表 - 运行时访问?
【发布时间】:2011-08-17 12:02:00
【问题描述】:

我正在使用 MS-Access 和 JSP。我想知道如何使用自动编号字段和主键创建表。

query="创建表Registration_A(Reg_No PRIMARY KEY AUTOINCREMENT, FName varchar(2))";

但是它给出了语法错误。正确的语法是什么?

【问题讨论】:

    标签: ms-access ddl


    【解决方案1】:
    CREATE TABLE Registration_A (
    Reg_No AUTOINCREMENT, 
    FName VARCHAR(2), 
    CONSTRAINT RegA_PK PRIMARY KEY(Reg_No))
    

    【讨论】:

    • stat=conn.createStatement(); stat.executeUpdate("CREATE TABLE Registration_A (Reg_No AUTOINCREMENT, FName VARCHAR(2),CONSTRAINT RegA_PK PRIMARY KEY(Reg_No))");我是这样用的,但还是一样的错误。
    • 直接在访问中为我工作。
    • stats2=conn.createStatement(); stats2.executeUpdate("CREATE TABLE Registration_A (Reg_No AUTOINCREMENT, FName VARCHAR(2),CONSTRAINT RegA_PK PRIMARY KEY(Reg_No))");我这样使用过,但仍然给出相同的语法错误。
    • 我正在使用 JSP,我想在运行时在 msaccess 数据库中创建表;在这张表中,我想要自动增量和主键。
    • stats2.executeUpdate("CREATE TABLE Registration_A(Reg_No Autoincrement, FName VARCHAR(2),Primary Key(Reg_No))");这使用 JSP 工作;非常感谢
    【解决方案2】:

    您可以使用 COUNTER 关键字通过 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);
    

    【讨论】:

      【解决方案3】:

      此示例使用 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);
      

      【讨论】:

        【解决方案4】:

        您需要先提及数据类型,然后是主键。

        query="Create Table Registration_A (Reg_No AUTOINCREMENT PRIMARY KEY, FName varchar(2))";
        

        【讨论】:

          【解决方案5】:

          七年后,我在上面的任何答案或任何 Stack Exchange 网站上的任何其他地方都看不到如何在 DAO 中执行此操作。所以这是我制定的方法。下面的 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
          

          必要的 VBA 元素的 Microsoft 文档,按照在代码中出现的顺序,是:

          该文档说明了需要了解的所有内容,但并未将所有内容放在一起来解释如何制作自动编号主键。以下 MS 文档(不再直接从 MS 获得)确实解释了如何制作自动编号字段,但没有说明如何使其成为主键。

          在 Microsoft 社区论坛上的以下帖子中,Andrey Artemyev 接受的回答解释了整个事情。

          我上面的代码与他在那个答案中的代码基本相同,还有一些额外的评论来解释发生了什么。

          【讨论】:

            【解决方案6】:

            试试这个

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

            【讨论】:

              【解决方案7】:
              CREATE TABLE `Tablename` (Field1 AUTOINCREMENT CONSTRAINT `Primarykey` PRIMARY
              KEY, `Field2` DATETIME, `Field3` TEXT(25), `Field4` DOUBLE);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-03-04
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-02-08
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多