DAO 类中有专门创建Access数据库的函数。你可以引用DAO类。
解决方案 »
- VB中使用COM的棘手问题,请高手指教
- 用datalist控件实现同时显示数据库三个字段
- 关于VB和VB.net的问题!
- 在线等!VB操作查询数据库(同一表中最后两条记录相减的select语句怎么写?)
- VB报错 编译错误:加载DLL错误
- 简单问题,字符串
- EXCEL可以绑定DATA控件吗?
- 关于Excel 操作 打开WorkSheet 关闭的问题
- 我们准备去长沙参加NIIT培训,又想继续留在深圳工作,一时拿不定主意…………
- 在VB中怎么样模拟键盘输入呢?谢谢.急!!!
- 求助!!!!!!!!!!
- 急!!关于Ulead MediaStudio Pro 6.0的问题!!我知道这个贴子放在这里有点不对,可软件使用里面没人会呀!相信编程高手对此问题不在话下!多谢,多谢!!
我认为应该用DAO的CreateDatabase。
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
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'一个小例子,应该很容易
如: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的
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
在程序员大本营-微软版中“vb\source\database\dbcoder.zip”,注意,生成的代码要略作修改。再在程序中引用这个类(moudle)