用ADOX创建数据库的时候,创建的字段如何设定其为非空?
如题! 问题点数:20、回复次数:3Top
1 楼MSTOP(陈建华)回复于 2004-04-03 23:11:14 得分 20
不能给更多的建议.参考一下,不过,我还是建议你用SQL语句建库.
'*************************
1.SQL建库
Create Table [LX](
[自动编号] AutoIncrement Not null,
[长整型] LONG null,
[超级连接] Binary null,
[单精度型] Single null,
[货币] Currency null,
[双精度型] Double null,
[同步复制] GUID null,
[小数] Numeric null,
[字节] Bit null,
[OLE对象] Image null)
'************************************
2.代码建库
Option Explicit
Private CAT As ADOX.Catalog
Public Sub CreateMDB(ByVal Path As String)
On Error GoTo ErrTrap
Set CAT = New ADOX.Catalog
If Right$(Path, 1) = "\" Then Path = Left$(Path, Len(Path) - 1)
' ===[Create Database]===
CAT.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Path & "\db3.mdb;" & _
"Jet OLEDB:Database Password=;" & _
"Jet OLEDB:Engine Type=5;"
CreateTables
CreateIndexes
CreateKeys
Set CAT = Nothing
Exit Sub
ErrTrap:
MsgBox Err.Number & " / " & Err.Description
Exit Sub
Resume
End Sub
Private Sub CreateTables()
On Error GoTo ErrTrap
Dim TBL As ADOX.Table
Set TBL = New ADOX.Table
' ===[Create Table 'TABLENAME']===
Set TBL = New ADOX.Table
TBL.Name = "TABLENAME"
TBL.Columns.Append "OLE对象", adLongVarBinary, 0
TBL.Columns.Append "备注", adLongVarWChar, 0
TBL.Columns.Append "长整型", adInteger, 0
TBL.Columns.Append "超级连接", adLongVarWChar, 0
TBL.Columns.Append "单精度型", adSingle, 0
TBL.Columns.Append "货币", adCurrency, 0
TBL.Columns.Append "日期时间", adDate, 0
TBL.Columns.Append "是否", adBoolean, 2
TBL.Columns.Append "双精度型", adDouble, 0
TBL.Columns.Append "同步复制ID", adGUID, 0
TBL.Columns.Append "小数", adNumeric, 0
TBL.Columns.Append "字节", adUnsignedTinyInt, 0
TBL.Columns.Append "自动编号", adInteger, 0
TBL.Columns("自动编号").Properties("AutoIncrement") = True
CAT.Tables.Append TBL
Set TBL = Nothing
Exit Sub
ErrTrap:
MsgBox Err.Number & " / " & Err.Description, , "Error In CreateTables"
Exit Sub
Resume
End Sub
Private Sub CreateIndexes()
On Error GoTo ErrTrap
Dim IDX As ADOX.Index
Set IDX = New ADOX.Index
' ===[Create Index 'PrimaryKey']===
Set IDX = New ADOX.Index
IDX.Name = "PrimaryKey"
IDX.Columns.Append "自动编号"
IDX.PrimaryKey = True
IDX.Unique = True
IDX.Clustered = False
IDX.IndexNulls = adIndexNullsDisallow
CAT.Tables("TABLENAME").Indexes.Append IDX
' ===[Create Index '同步复制ID']===
Set IDX = New ADOX.Index
IDX.Name = "同步复制ID"
IDX.Columns.Append "同步复制ID"
IDX.PrimaryKey = False
IDX.Unique = False
IDX.Clustered = False
IDX.IndexNulls = adIndexNullsAllow
CAT.Tables("TABLENAME").Indexes.Append IDX
Set IDX = Nothing
Exit Sub
ErrTrap:
MsgBox Err.Number & " / " & Err.Description, , "Error In CreateIndexes"
Exit Sub
Resume
End Sub
Private Sub CreateKeys()
On Error GoTo ErrTrap
Dim KEY As ADOX.KEY
Dim TBL As ADOX.Table
Set KEY = New ADOX.KEY
Set TBL = New ADOX.Table
Set KEY = Nothing
Set TBL = Nothing
Exit Sub
ErrTrap:
Select Case Err.Number
Case -2147467259 ' Index already exists - Remove it...
CAT.Tables(TBL.Name).Indexes.Delete KEY.Name
Resume
Case Else
MsgBox Err.Number & " / " & Err.Description, , "Error In CreateKeys"
Exit Sub
Resume
End Select
End SubTop
2 楼roger_xiong(卖女孩的小火柴~)回复于 2004-04-04 08:03:31 得分 0
非常谢谢,感谢你的建议,我想我会接受的。:)Top
3 楼roger_xiong(卖女孩的小火柴~)回复于 2004-04-04 08:18:55 得分 0
不过你的代码好像不太正确:
在 Set TBL = New ADOX.Table
TBL.Name = "TABLENAME"
之后应该加上:
TBL.ParentCatalog = CAT
否则会错误。
而且,代码建库里的精度不对啊,不过还是谢谢你给了那么完整的代码。很值得参考。
Top




