情况如下: 有一个带有Microsoft Access前端的SQL Server数据库。 SQL Server数据库中有一个表,其中一个名为PackID的列定义为VARCHAR(6)NOT NULL(它必须为NOT NULL,因为它是此表的复合主键的一部分)。空字符串在PackID列中是合法的。事实上,它们经常发生。当用户在此表的UI中输入数据,并通过PackID字段选项卡时,会显示一条错误消息:“无法将值NULL插入列'PackID';列不允许空值.INSERT失败。”
已经尝试过的不起作用的事情:
当用户离开UI(Lost Focus事件)中的行时调用以下VBA代码
If IsNull(PackID.Value) Then
PackID.Value = ""
End If
是否有人知道如何在Access中强制使用空字符串,因此它被解释为SQL Server的空字符串而不是NULL?
答案 0 :(得分:1)
在文本框中设置默认值在访问此
中的PackID属性=" "
的工作。双引号之间的空间非常重要。将空间留出会导致插入失败。在SQL Server中,LEN(PackID)返回0.例如:
SELECT LEN(''), LEN(' ');
都返回0.看起来好像SQL Server将这两个都视为空字符串。
答案 1 :(得分:0)
此问题的替代解决方案(PackID的文本框属性中没有默认值)。
Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(PackID.Value) Or PackID.Value = "" Then
PackID.Value = " "
End If
End Sub
这仍然使用传递SQL Server"的概念。 " (读作引号空间引用)作为字段的值。在UI方面,这是为字段设置默认值的替代方法。