access中插入时如何处理空字段
How to handle null field when inserting in access
我正在尝试将表单中的值插入到 Access 数据库中,但当字段值为 Null
时出现错误。即使我使用 = DBNull.Value
.
我仍然会收到错误
前 8 个值不能是 Null
,因为这些是必填字段,但如果字段为空,一旦到达成本,我就会收到此错误。
第 577 行是 da.Update(ds, "EquipList")
这是我的代码:
Try
Dim con As New OleDb.OleDbConnection
Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim sql As String
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\equip_full.mdb;Jet OLEDB:Database Password=matt"
con.Open()
sql = "SELECT * FROM EquipList"
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "EquipList")
Dim cb As New OleDb.OleDbCommandBuilder(da)
Dim dsNewRow As DataRow
dsNewRow = ds.Tables("EquipList").NewRow()
' Equipment Information fields
dsNewRow.Item(0) = UniqueID
dsNewRow.Item(1) = InvNumber
dsNewRow.Item(2) = Item
dsNewRow.Item(3) = Type
dsNewRow.Item(4) = Description
dsNewRow.Item(5) = Manufacturer
dsNewRow.Item(6) = Model_No
dsNewRow.Item(7) = Serial_No
If Cost = "" Then
dsNewRow.Item(8) = DBNull.Value
Else
dsNewRow.Item(8) = Cost
End If
If Cost_Centre = "" Then
dsNewRow.Item(9) = DBNull.Value
Else
dsNewRow.Item(9) = Cost_Centre
End If
'dsNewRow 10 to 39
ds.Tables("EquipList").Rows.Add(dsNewRow)
da.Update(ds, "EquipList")
con.Close()
MsgBox(Description & " has successfully been added to the system.")
Catch ex As Exception
MsgBox("Unable to connect to the database " & ex.ToString)
Exit Sub
End Try
更新:我的代码没问题,只是 MsgBox 有问题。 MsgBox 无法显示 Null
的值
删除 MsgBox 解决了这个问题。反正就是用来测试的。
如果您不将其设置为任何其他值,则应将其保留为空。
你试过了吗
If Cost > "" Then
dsNewRow.Item(8) = Cost
End If
?
字段是否可以为空?
如果它不能为空,您也可以尝试将其设置为零:
If Cost > "" Then
dsNewRow.Item(8) = Cost
Else
dsNewRow.Item(8) = 0
End If
您不需要将日期或字符串值显式设置为 null,如果它可以为 null,则不设置它应该默认为 null,而您的货币价值可能不是。
例如,您的其他值应适用于:
If Cost_Centre > "" Then
dsNewRow.Item(9) = Cost_Centre
End If
这都是假设您的值可以为空,或者它们将接受 null 作为有效值。您是否通过Access界面确认过?
如果字符串值不接受null,则默认为空字符串,与空文本框的值相同。那么,您应该能够无条件地存储值,就像您处理所需值一样:
If Cost > "" Then
dsNewRow.Item(8) = Cost
Else
dsNewRow.Item(8) = 0
End If
dsNewRow.Item(9) = Cost_Centre
稍微修改 Beth 的 post,以防字段中有 space 或其他内容。
If len(Cost) > 0 Then
dsNewRow.Item(8) = Cost
End If
我正在尝试将表单中的值插入到 Access 数据库中,但当字段值为 Null
时出现错误。即使我使用 = DBNull.Value
.
前 8 个值不能是 Null
,因为这些是必填字段,但如果字段为空,一旦到达成本,我就会收到此错误。
第 577 行是 da.Update(ds, "EquipList")
这是我的代码:
Try
Dim con As New OleDb.OleDbConnection
Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim sql As String
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\equip_full.mdb;Jet OLEDB:Database Password=matt"
con.Open()
sql = "SELECT * FROM EquipList"
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "EquipList")
Dim cb As New OleDb.OleDbCommandBuilder(da)
Dim dsNewRow As DataRow
dsNewRow = ds.Tables("EquipList").NewRow()
' Equipment Information fields
dsNewRow.Item(0) = UniqueID
dsNewRow.Item(1) = InvNumber
dsNewRow.Item(2) = Item
dsNewRow.Item(3) = Type
dsNewRow.Item(4) = Description
dsNewRow.Item(5) = Manufacturer
dsNewRow.Item(6) = Model_No
dsNewRow.Item(7) = Serial_No
If Cost = "" Then
dsNewRow.Item(8) = DBNull.Value
Else
dsNewRow.Item(8) = Cost
End If
If Cost_Centre = "" Then
dsNewRow.Item(9) = DBNull.Value
Else
dsNewRow.Item(9) = Cost_Centre
End If
'dsNewRow 10 to 39
ds.Tables("EquipList").Rows.Add(dsNewRow)
da.Update(ds, "EquipList")
con.Close()
MsgBox(Description & " has successfully been added to the system.")
Catch ex As Exception
MsgBox("Unable to connect to the database " & ex.ToString)
Exit Sub
End Try
更新:我的代码没问题,只是 MsgBox 有问题。 MsgBox 无法显示 Null
的值删除 MsgBox 解决了这个问题。反正就是用来测试的。
如果您不将其设置为任何其他值,则应将其保留为空。 你试过了吗
If Cost > "" Then
dsNewRow.Item(8) = Cost
End If
?
字段是否可以为空? 如果它不能为空,您也可以尝试将其设置为零:
If Cost > "" Then
dsNewRow.Item(8) = Cost
Else
dsNewRow.Item(8) = 0
End If
您不需要将日期或字符串值显式设置为 null,如果它可以为 null,则不设置它应该默认为 null,而您的货币价值可能不是。
例如,您的其他值应适用于:
If Cost_Centre > "" Then
dsNewRow.Item(9) = Cost_Centre
End If
这都是假设您的值可以为空,或者它们将接受 null 作为有效值。您是否通过Access界面确认过?
如果字符串值不接受null,则默认为空字符串,与空文本框的值相同。那么,您应该能够无条件地存储值,就像您处理所需值一样:
If Cost > "" Then
dsNewRow.Item(8) = Cost
Else
dsNewRow.Item(8) = 0
End If
dsNewRow.Item(9) = Cost_Centre
稍微修改 Beth 的 post,以防字段中有 space 或其他内容。
If len(Cost) > 0 Then
dsNewRow.Item(8) = Cost
End If