更改列的属性值

时间:2010-08-04 20:29:01

标签: vb6

如何在除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

1 个答案:

答案 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

这不再是问题。