【问题标题】:Can't insert null value into a foreign key field in MS Access无法在 MS Access 的外键字段中插入空值
【发布时间】:2019-12-04 20:13:29
【问题描述】:

我正在使用 VB.NET 将记录插入到 MS Access 表中。我遇到了一个问题,我要插入一条记录,其中一个值为空白。 VB.NET 抛出一个错误,因为它说我要插入的字段需要一个值。

Sense_LanguageSource 表有六个字段,包括 ID 字段:

  • LanguageSourceID(自动编号)
  • SenseFK(编号)
  • 语言代码(数字)
  • SourceWord(短文本)
  • LanguageSourceType(短文本)
  • IsWaseieigo(是/否)

LanguageCode 字段也是一个外键,它链接到 LanguageCodeValue 表,其中包含 LanguageCode 的列表。

这是我正在运行以在 VB.NET 中执行插入的代码:

'Finds the ID of the LanguageCode
sql = "SELECT [LanguageCodeID] FROM [LanguageCodeValue] WHERE [LanguageCode] = """ & ls.LanguageCode & """"
cmd = New OleDbCommand(sql, myConnection)
lcodeID = CInt(cmd.ExecuteScalar)

'Inserts the LanguageSource element
sql = "INSERT INTO [Sense_LanguageSource] ([SenseFK], [LanguageCode], [SourceWord], [LanguageSourceType], [IsWaseieigo]) VALUES (?, ?, ?, ?, ?)"

cmd = New OleDbCommand(sql, myConnection)
cmd.Parameters.Add(New OleDbParameter("[SenseFK]", senseID))
cmd.Parameters.Add(New OleDbParameter("[LanguageCode]", lcodeID))
cmd.Parameters.Add(New OleDbParameter("[SourceWord]", ls.SourceWord))
cmd.Parameters.Add(New OleDbParameter("[LanguageSourceType]", ls.LanguageSourceType))
cmd.Parameters.Add(New OleDbParameter("[IsWaseieigo]", ls.IsWaseieigo))

Try
    cmd.ExecuteNonQuery()
    cmd.Dispose()
Catch ex As Exception
    MsgBox(ex.Message)
End Try

问题是我传递给 LanguageCode 的值是 0。我的代码正在获取一个可能包含或不包含 LanguageCode 值的对象,并运行 Select 查询以在 LanguageCodeValue 表中查找其 ID。因为我正在评估的特定对象没有 LanguageCode,所以第一个选择查询返回 0。当我尝试将 0 传递给插入命令时,我收到错误:

"You cannot add or change a record because a related record is required in table 'LanguageCodeValue'."

我不确定如何解决这个问题。我希望在Sense_LanguageSource 表和LanguageCodeValue 表之间有一个链接,但我不希望它需要为LanguageCode 插入一个值。是否可以在外键字段中插入空值?或者有没有办法让它不需要在这个字段中插入一个值?

【问题讨论】:

    标签: sql vb.net ms-access-2016


    【解决方案1】:

    好的,我已经想出了如何解决这个问题 - 禁用 LanguageCodeValueSense_LanguageSource 之间关系的参照完整性。可能不是最好的解决方案,但它确实允许我在外键字段中输入 0。

    编辑:我找到了更好的方法。在LanguageCodeValue 表上创建一个“空”记录,其中包含空白字段,并在我想指出Sense_LanguageSource 表没有附加LanguageCode 时参考该记录。

    【讨论】:

      猜你喜欢
      • 2014-03-26
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      相关资源
      最近更新 更多