如何在除PersonalID列之外的表中更改所有列值(Nullable = True和Allow Zero Length = True)?执行脚本时,我收到错误 “-2147217887 - 多步OLE DB操作生成错误。检查每个OLE DB状态值(如果可用)。没有完成任何工作。” 这只是一个表的代码。我需要创建更多的表,因此设置每列的Nullable属性是不实际的。请帮助!
Public Sub DBcreation()
Dim tbl As New Table
Dim cat As New ADOX.Catalog
Dim col As ADOX.Column
Dim prp As ADOX.Property
Dim oCn As ADODB.Connection
Dim sConStr As String
'Set Connection string
sConStr = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\mydbase.mdb" & ";" & _
"Jet OLEDB:Engine Type=4;"
' 1) Create the DataBase
cat.Create sConStr
' 2) Create Table name "PDetails"
tbl.Name = "PDetails"
' 3) Add Fields
With tbl.Columns
.Append "PersonalID", adInteger 'Number
.Append "GHName", adVarWChar, 50 'Text
.Append "FirstName", adVarWChar, 50 'Text
.Append "FHName", adVarWChar, 50 'Text
.Append "Surname", adVarWChar, 50 'Text
.Append "BirthDate", adDate
.Append "Gender", adVarWChar, 10 'Text
.Append "Address", adLongVarWChar 'Memo
.Append "Pincode", adInteger 'Number
.Append "MobileNo", adInteger 'Number
.Append "HomeNo", adInteger 'Number
.Append "MaritalStatus", adVarWChar, 10 'Text
.Append "Profession", adVarWChar, 50 'Text
.Append "BloodGroup", adVarWChar, 10 'Text
.Append "Photo", adVarWChar, 50 'Text
' 4) 'Set the field properties.
With !PersonaltID 'AutoNumber.
.ParentCatalog = cat
.Properties("Autoincrement") = True
.Properties("Description") = "Automatically " & _
"generated unique identifier for this record."
End With
With !BirthDate
Set .ParentCatalog = cat
.Properties("Jet OLEDB:Column Validation Rule") = _
"Is Null Or <=Date()"
.Properties("Jet OLEDB:Column Validation Text") = _
"Birth date cannot be future."
End With
End With
' 5) Save the Table to the DataBase
cat.Tables.Append tbl
' 6) Set Column Properties
For Each col In tbl.Columns
For Each prp In col.Properties
If col.Name <> "PersonalID" Then
If prp.Name = "Nullable" Then
prp.Value = True 'error generated
'-2147217887 - Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.
End If
End If
Next
Next
'Clean up
Set tbl = Nothing
Set cat = Nothing
set prp = Nothing
End Sub
答案 0 :(得分:2)
我假设您希望将“允许零长度”和“可为空”属性都设置为true。看来MS Access不允许你通过ADOX设置Nullable属性,就我所知,使用ADO命令设置Allow Zero Length属性是不可能的,所以你需要使用ADOX和ADO命令。以下是我将如何做到这一点:
6) Set Column Properties
For Each col In tbl.Columns
For Each prp In col.Properties
If col.Name <> "PersonalID" Then
col.Properties("Jet OLEDB:Allow Zero Length").Value = True
End If
Next
Next
Set oCn = cat.ActiveConnection
SetColumnToNullable oCn, "PDetails", "GHName", "VARCHAR(50)"
oCn.Close
'''
End Sub
Private Sub SetColumnToNullable(ByRef poCn As ADODB.Connection, _
ByVal pstrTableName As String, _
ByVal pstrColumnName As String, _
ByVal pstrDataType As String)
poCn.Execute "ALTER TABLE " & pstrTableName & " ALTER COLUMN " & pstrColumnName & " " & pstrDataType & " NULL"
End Sub
此方法的另一个好处是,以前Catalog打开了与执行完成后保持打开的数据库的连接。
使用
oCn.Close
这不再是问题。