【发布时间】:2015-06-22 22:58:15
【问题描述】:
情况如下: 有一个带有 Microsoft Access 前端的 SQL Server 数据库。 SQL Server 数据库中有一个表,其中有一个名为 PackID 的列,该列定义为 VARCHAR(6) NOT NULL(它必须为 NOT NULL,因为它是该表的复合主键的一部分)。 PackID 列中的空字符串是合法的。事实上,它们经常发生。当用户在 UI 中为此表输入数据并通过 PackID 字段进行选项卡时,会出现一条错误消息:“无法将值 NULL 插入列 'PackID';列不允许空值。插入失败。”
尝试过但不起作用的方法:
- 在 SQL Server 数据库中的该列上添加一个默认约束,其值为 '' - 显然,只有在 INSERT 语句中省略该列时才使用默认值
- 将 Access 中 PackID 字段的默认值设置为“” - 它的行为就像“”为 NULL 一样
-
当用户在 UI 中移出行时调用以下 VBA 代码(丢失焦点事件)
If IsNull(PackID.Value) Then PackID.Value = "" End If
有谁知道如何在 Access 中强制使用空字符串,以便将其解释为 SQL Server 的空字符串而不是 NULL?
【问题讨论】:
-
IsNull(ComponentPackID.Value)行是否返回 True? -
这可能是 Access 中的一件事,让您的生活“更容易”为空字符串发送 NULL,因为在糟糕的旧 VBA 时代,没有处理 NULL 值的好方法。这很 hacky,但是一个空格怎么样,然后在进入的过程中修剪所有内容?
-
您对 SQL 服务器有任何控制权吗?是否可以在其中放置触发器,以便在插入之前将 NULL 转换为空字符串? (注意:我没有测试过这个,但如果它不是一个选项,那么看看它是否有效是没有意义的。)
-
如果您更新链接 SQL 表的方式(假设不是 adp 项目),也许会很有用 - SQL Server Native Client ODBC 驱动程序?
-
检查这个,但没有帮助:bytes.com/topic/access/answers/…
标签: sql-server vba ms-access