DAO 类中有专门创建Access数据库的函数。你可以引用DAO类。

解决方案 »

  1.   

    SQL不能建Access数据库的吧 ?
    我认为应该用DAO的CreateDatabase。
      

  2.   

    '引用Microsoft DAO 3.51 对象库Private Sub CreateDB(strDBName As String)
    Dim db As Database
    Set db = DBEngine(0).CreateDatabase(strDBName, dbLangGeneral)End Sub
    Private Sub Command1_Click()
    On Error GoTo ProcError
        Screen.MousePointer = vbHourglass
        Dim strDBName As String
        
        strDBName = GetDBName()
        
        If Len(strDBName) > 0 Then
            CreateDB strDBName
        End If
        
    procExit:
        Screen.MousePointer = vbDefault
        Exit Sub
            
    ProcError:
        MsgBox Err.Description
        Resume procExit
            
    End Sub
    Private Function GetDBName() As StringOn Error GoTo ProcError
        Dim strFileName As String
        dlgCreatDB.DefaultExt = "mdb"
        dlgCreatDB.DialogTitle = "创建Access数据库"
        dlgCreatDB.Filter = "VB Databases (*.mdb)|*.mdb"
        dlgCreatDB.FilterIndex = 1
        
        
        dlgCreatDB.CancelError = True
        
        dlgCreatDB.ShowSave
        
        strFileName = dlgCreatDB.FileName
        On Error Resume Next
        Kill strFileName
        
    procExit:
        GetDBName = strFileName
        Exit Function
        
    ProcError:
        strFileName = ""
        Resume procExit
    End Function
      

  3.   

    '窗体
    Option Explicit
     
    Private Sub Command1_Click()
    If finddb("c:\vb\Biblio.mdb") Then Exit Sub
    Call MakeBiblio
    End Sub
    '模块1
    Option Explicit
    Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
    Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
    Public Const MAX_PATH = 260
    Public Type WIN32_FIND_DATA
            dwFileAttributes As Long
            ftCreationTime As FILETIME
            ftLastAccessTime As FILETIME
            ftLastWriteTime As FILETIME
            nFileSizeHigh As Long
            nFileSizeLow As Long
            dwReserved0 As Long
            dwReserved1 As Long
            cFileName As String * MAX_PATH
            cAlternate As String * 14
    End Type
    Public Const INVALID_HANDLE_VALUE = -1
    '模块2Option Explicit
    Sub MakeBiblio()
    Dim MyDB As Database, MyWs As Workspace, lxFlds(2) As Field
    Dim i As Integer
    Dim AuTd As TableDef, TitTd As TableDef, PubTd As TableDef
    Dim AuFlds(2) As Field, TitFlds(5) As Field, PubFlds(10) As Field
    Dim AuIdx As Index, TitIdx(3) As Index, PubIdx As IndexSet MyWs = DBEngine.Workspaces(0)
    Set MyDB = MyWs.CreateDatabase("C:\VB\Biblio.mdb", dbLangGeneral, dbEncrypt)
    '为 Authors 表创建 TableDef。
    Set AuTd = MyDB.CreateTableDef("Authors")
    '给 MyTableDef 添加字段。
    Set AuFlds(0) = AuTd.CreateField("Au_ID", dbLong)
    '使它成为计数字段。
    AuFlds(0).Attributes = dbAutoIncrField
    Set AuFlds(1) = AuTd.CreateField("Author", dbText)
    AuFlds(1).Size = 50
    AuTd.Fields.Append AuFlds(0)
    AuTd.Fields.Append AuFlds(1)
    '添加一个索引。
    Set AuIdx = AuTd.CreateIndex("Au_ID")
    AuIdx.Primary = True
    AuIdx.Unique = True
    Set AuFlds(0) = AuIdx.CreateField("Au_ID")
    '在 Index 对象的 Fields 集合中追加字段。
    AuIdx.Fields.Append AuFlds(0)
    '在 Indexs 集合中追加索引。
    AuTd.Indexes.Append AuIdx
    '在 TableDefs 集合中追加 TableDef。
    MyDB.TableDefs.Append AuTd'为 Titles 表创建新的 TableDef。
    Set TitTd = MyDB.CreateTableDef("Titles")
    '为 Titles 表创建字段。
    Set TitFlds(0) = TitTd.CreateField("Title", dbText)
    TitFlds(0).Size = 100
    Set TitFlds(1) = TitTd.CreateField("Year Published", dbInteger)
    Set TitFlds(2) = TitTd.CreateField("ISBN", dbText)
    TitFlds(2).Size = 20
    Set TitFlds(3) = TitTd.CreateField("Au_ID", dbLong)
    Set TitFlds(4) = TitTd.CreateField("PubID", dbLong)
    '在 Titles TableDef 中追加字段。
    For i = 0 To 4
        TitTd.Fields.Append TitFlds(i)
    Next i
    '添加索引。
    For i = 0 To 2
        Set TitIdx(i) = TitTd.CreateIndex()
    Next i
    TitIdx(0).Name = "ISBN"
    TitIdx(0).Primary = True
    TitIdx(0).Unique = True
    Set lxFlds(0) = TitIdx(0).CreateField("ISBN")
    TitIdx(1).Name = "Au_ID"
    TitIdx(1).Primary = False
    TitIdx(1).Unique = False
    Set lxFlds(1) = TitIdx(1).CreateField("Au_ID")
    TitIdx(2).Name = "PubID"
    TitIdx(2).Primary = False
    TitIdx(2).Unique = False
    Set lxFlds(2) = TitIdx(2).CreateField("PubID")
    '在 Titles Table 的 Index 对象中追加字段。
    For i = 0 To 2
        TitIdx(i).Fields.Append lxFlds(i)
    Next i
    '在 Titles TableDef 中追加索引。
    For i = 0 To 2
        TitTd.Indexes.Append TitIdx(i)
    Next i
    '把 TableDef 追加到 TableDefs 集合中,用这种方法保存 TableDef 的定义。
    MyDB.TableDefs.Append TitTd
    '为 Publishers 表创建新的 TableDef。
    Set PubTd = MyDB.CreateTableDef("Publishers")
    '把字段添加到 PubTd 中。
    Set PubFlds(0) = PubTd.CreateField("PubID", dbLong)
    '使它成为计数字段。
    PubFlds(0).Attributes = dbAutoIncrField
    Set PubFlds(1) = PubTd.CreateField("Name", dbText)
    PubFlds(1).Size = 50
    Set PubFlds(2) = PubTd.CreateField("Company Name", _
    dbText)
    PubFlds(2).Size = 255
    Set PubFlds(3) = AuTd.CreateField("Address", dbText)
    PubFlds(3).Size = 50
    Set PubFlds(4) = PubTd.CreateField("City", dbText)
    PubFlds(4).Size = 20
    Set PubFlds(5) = AuTd.CreateField("State", dbText)
    PubFlds(5).Size = 10
    Set PubFlds(6) = PubTd.CreateField("Zip", dbText)
    PubFlds(6).Size = 15
    Set PubFlds(7) = PubTd.CreateField("Telephone", dbText)
    PubFlds(7).Size = 15
    Set PubFlds(8) = PubTd.CreateField("Fax", dbText)
    PubFlds(8).Size = 15
    Set PubFlds(9) = AuTd.CreateField("Comments", dbText)
    PubFlds(9).Size = 50
    '把 Field 对象追加到 Fields 集合中,用这种方法保存 Field 对象。
    For i = 0 To 9
        PubTd.Fields.Append PubFlds(i)
    Next i
    '添加一个索引。
    Set PubIdx = PubTd.CreateIndex("PubID")
    PubIdx.Primary = True
    PubIdx.Unique = True
    Set AuFlds(0) = PubIdx.CreateField("PubID")
    PubIdx.Fields.Append AuFlds(0)
    PubTd.Indexes.Append PubIdx
    '把 TableDef 对象追加到 TableDefs 集合中,用这种方法保存 TableDef 对象。
    MyDB.TableDefs.Append PubTd
    MsgBox ("Database Created")
    MyDB.Close
    End Sub
    Function finddb(filename As String) As Boolean
    Dim hff As Long
    Dim x As WIN32_FIND_DATA
    hff = FindFirstFile(filename, x)
    If hff = INVALID_HANDLE_VALUE Then
        finddb = False
    Else
        finddb = True
    End If
    hff = FindClose(hff)
    End Function'一个小例子,应该很容易
      

  4.   

    不用吧,ADO也是可以创建数据库的,可以先创建一个对ADO引用的对象,然后使用ADO的EXECUTE方法对创建数据库的SQL语句进行解析就可以了
      如:Public Sub EstCliData(UserName As String, UserPassword As String)
    Public OServer As New SQLDMO.SQLServer    OServer.Connect SQL_SRV, SQL_SA, SQL_IVECOM
        
                  
           TranSQL = "USE master" & _
                  " CREATE DATABASE " & UserName
                  
        OServer.ExecuteImmediate TranSQL, SQLDMOExec_Default
        
     '===================<Create User>=====================
        TranSQL = "use " & UserName & " EXEC sp_addlogin '" & UserName & "','" & UserPassword & "'"
        OServer.ExecuteImmediate TranSQL, SQLDMOExec_Default
        
     '===================<Add User to Database>===========
     
        TranSQL = "use " & UserName & " EXEC sp_adduser '" & UserName & "'"
        OServer.ExecuteImmediate TranSQL, SQLDMOExec_Default
        
     '=============<Define Current Database as User Default Database>=====
        
        TranSQL = "use " & UserName & " EXEC sp_defaultdb " & UserName & "," & UserName
        OServer.ExecuteImmediate TranSQL, SQLDMOExec_Default
            
        TranSQL = "use " & UserName & _
        " create table  dkhdxxfsb " & _
        " (Car_Unit_ID      varchar(20)   PRIMARY KEY  NOT NULL         , " & _
        "Send_Time          datetime       NOT NULL DEFAULT(getdate())  , " & _
        "Info_Type          varchar(1)                                  , " & _
        "Content            varchar(100)                                , " & _
        "Re             varchar(50)                                ) "
        
        OServer.ExecuteImmediate TranSQL, SQLDMOExec_Default
        
        TranSQL = "use " & UserName & " GRANT  SELECT , INSERT , DELETE , UPDATE  ON  dkhdxxfsb  TO " & UserName
        OServer.ExecuteImmediate TranSQL, SQLDMOExec_Default
        
     
        
        TranSQL = "use " & UserName & _
        " create table  cjdwxxb " & _
        " (Car_Unit_ID      varchar(20)   PRIMARY KEY  NOT NULL         , " & _
        "Car_Unit_Tel       varchar(25)    NOT NULL                     , " & _
        "Send_Time          datetime                                    , " & _
        "Rec_Time           datetime       NOT NULL DEFAULT(getdate())  , " & _
        "Old_Info           varchar(50)    NOT NULL                     , " & _
        "Info_Type          varchar(1)     NOT NULL                     , " & _
        "CS_Info            varchar(150)   NOT NULL                     ) "
        
        OServer.ExecuteImmediate TranSQL, SQLDMOExec_Default
        
        TranSQL = "use " & UserName & " GRANT  SELECT , INSERT , DELETE , UPDATE  ON  cjdwxxb  TO " & UserName
        OServer.ExecuteImmediate TranSQL, SQLDMOExec_Default
        OServer.Close
        Set OServer = NothingEnd Sub 这是用SQL SEEVER的
      

  5.   

    先建立一个空access数据库,然后拷贝到需要的地方。再在里面建表。
      

  6.   

    引用Microsoft ADO Ext. for DDL and Security.(Msadox.dll)
    Sub CreateDatabase()   Dim cat As New ADOX.Catalog
       cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\new.mdb"End SubSub CreateTable()   Dim tbl As New Table
       Dim cat As New ADOX.Catalog
       ' 打开目录。
       cat.ActiveConnection = _ 
          "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=c:\new.mdb;"   tbl.Name = "MyTable"
       tbl.Columns.Append "Column1", adInteger
       tbl.Columns.Append "Column2", adInteger
       tbl.Columns.Append "Column3", adVarWChar, 50
       cat.Tables.Append tblEnd Sub
      

  7.   

    向你推荐一个根据现有数据库结构生成以上所述的DAO代码的软件:dbcoder
    在程序员大本营-微软版中“vb\source\database\dbcoder.zip”,注意,生成的代码要略作修改。再在程序中引用这个类(moudle)