2010-08-04 2 views
3

Как изменить все значения столбцов (Nullable = True и Allow Zero Length = True) в таблице, кроме столбца PersonalID? Когда сценарий выполняется, я получаю сообщение об ошибке «-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

Просто маленькая опечатка «With! PersonaltID» AutoNumber. ' должен быть «With! PersonalID» AutoNumber. ' – jakdep

ответ

2

Предполагаете, что для параметра Разрешить нулевую длину и Nullable должно быть установлено значение true. Похоже, что MS Access не позволяет вам установить свойство Nullable через ADOX, так как это невозможно, насколько я знаю, установить свойство Allow Zero Length с помощью команды ADO, поэтому вам нужно использовать как 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 

, что больше не является проблемой.

Смежные вопросы