怎样用代码批量生成ACCESS数据库的创建表呢
  最好20个创建表。

解决方案 »

  1.   

    除非你导入导出生成表,Access没有代码直接生成表按现在的习惯,有20表可以考虑用sql server2000,容易,方便使用
      

  2.   


    Private Sub Form_Load()
        Dim daodb As DAO.Database
        Dim mdbname As String
        
        mdbname = "d:\test.mdb"
        
        On Error Resume Next
        Set daodb = DBEngine.Workspaces(0).OpenDatabase(mdbname, False, False, ";pwd=密碼")
        If Err.Number <> 0 Then '可以根據錯誤號判斷是沒有數據庫還是數據庫已損壞
             Err.Clear
             CreateRS mdbname
        End If
    End Sub
    Public Sub CreateRS(ByVal mdbname As String)
        Dim db As DAO.Database
        Dim tmp As String
        Dim Fld As New DAO.Field
        Dim rst As New DAO.TableDef
        Dim lstFld As Variant '字段名數組
        Dim lstFldType As Variant '字段數據類型數組
        Dim k As Integer, m As Integer
        
        Set db = DBEngine.Workspaces(0).CreateDatabase(mdbname, dbLangGeneral, dbEncrypt)
        db.NewPassword "", "最密碼"
        
        tmp = "create table tbl_1([Fld1] text(30),[Fld2] date,[Fld3] date,[Fld4] text(5),[Fld5] text(10),[Fld6] text(10),[Fld7] date,[Fld8] integer,[Fld9] memo)"
        db.Execute tmp
        tmp = "create table tbl_2([Fld1] text(30),[Fld2] date,[Fld3] date,[Fld4] text(5),[Fld5] text(10),[Fld6] text(10),[Fld7] date,[Fld8] integer,[Fld9] memo)"
        db.Execute tmp
        
        '如果tmp太長,可用以下方法增加新的字段
        lstFld = Array("Fld10", "Fld11", "Fld12", "Fld13", "Fld14", "Fld15", "Fld16", "Fld17", "Fld18", "Fld19", "Fld20", "Fld21", "Fld22", "Fld23", "Fld24", "Fld25", "Fld26", "Fld27", "Fld28", "Fld29", "Fld30", "Fld31", "Fld32", "Fld33", "Fld34")
        lstFldType = Array(dbDouble, dbText, dbDate, dbInteger, dbInteger, dbInteger, dbDouble, dbDouble, dbDouble, dbDouble, dbDouble, dbText, dbDate, dbInteger, dbDouble, dbText, dbDate, dbInteger, dbDouble, dbText, dbDate, dbInteger, dbInteger, dbMemo)
        
        For k = 3 To 4
            tmp = "create table tbl_" & k & "([dingdanhao] text(30))"
            db.Execute tmp
        
            db.TableDefs.Refresh
            Set rst = db.TableDefs("tbl_" & k)
            
            For m = 0 To 24
                Fld.Name = lstFld(m)
                Fld.Type = lstFldType(m)
                If lstFldType(m) = dbText Then Fld.Size = 50
                rst.Fields.Append Fld
                Set Fld = Nothing
            Next m
            Set rst = Nothing
        Next
        
        db.Close
        Set db = Nothing
    End Sub
      

  3.   

    4樓代碼中的 lstFldType 用下面這句,少寫了一個項lstFldType = Array(dbDouble, dbText, dbDate, dbInteger, dbInteger, dbInteger, dbDouble, dbDouble, dbDouble, dbDouble, dbDouble, dbText, dbDate, dbInteger, dbDouble, dbText, dbDate, dbInteger, dbDouble, dbText, dbDate, dbInteger, dbInteger, dbDate, dbMemo)