VBA空字符串,用于插入SQL Server

时间:2015-04-16 13:33:50

标签: sql-server vba ms-access

情况如下: 有一个带有Microsoft Access前端的SQL Server数据库。 SQL Server数据库中有一个表,其中一个名为PackID的列定义为VARCHAR(6)NOT NULL(它必须为NOT NULL,因为它是此表的复合主键的一部分)。空字符串在PackID列中是合法的。事实上,它们经常发生。当用户在此表的UI中输入数据,并通过PackID字段选项卡时,会显示一条错误消息:“无法将值NULL插入列'PackID';列不允许空值.INSERT失败。”

已经尝试过的不起作用的事情:

  1. 在SQL Server数据库中为此列添加一个默认约束,其值为'' - 显然只有在INSERT语句中省略该列时才使用默认约束
  2. 将Access中PackID字段的默认值设置为“” - 它的行为就好像“”是NULL
  3. 当用户离开UI(Lost Focus事件)中的行时调用以下VBA代码

    If IsNull(PackID.Value) Then
       PackID.Value = ""
    End If
    
  4. 是否有人知道如何在Access中强制使用空字符串,因此它被解释为SQL Server的空字符串而不是NULL?

2 个答案:

答案 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方面,这是为字段设置默认值的替代方法。