Tsql 在MS Access中编辑的SQL表-删除字段数据创建空值,需要空白

Tsql 在MS Access中编辑的SQL表-删除字段数据创建空值,需要空白,tsql,ms-access,Tsql,Ms Access,我们在SQL server中有一个表,我们的一个家伙通过MS Access中的ODBC链接到该表。他这样做是为了能够以SQL server中用户不友好的方式(修复一个字段中的拼写,向特定行添加注释等)全天更新表 我们不希望该表中有任何空值,我已经在这些字段上创建了约束,但是每当他删除特定字段中的信息时,它都会留下一个空白,即使该约束的默认值分别为N''或0(对于nvarchar或int字段) 我试着不允许空值和默认值约束,但是这样他就不能更新任何记录,在那里他从字段中删除了信息 最好的方法是什么

我们在SQL server中有一个表,我们的一个家伙通过MS Access中的ODBC链接到该表。他这样做是为了能够以SQL server中用户不友好的方式(修复一个字段中的拼写,向特定行添加注释等)全天更新表

我们不希望该表中有任何空值,我已经在这些字段上创建了约束,但是每当他删除特定字段中的信息时,它都会留下一个空白,即使该约束的默认值分别为N''或0(对于nvarchar或int字段)

我试着不允许空值和默认值约束,但是这样他就不能更新任何记录,在那里他从字段中删除了信息


最好的方法是什么(使用现有的工具)让我的同事从字段中删除信息,而不必添加空格使其不为NULL,而不必让SQL表将该字段读取为NULL?

如果您希望同事删除的数据另存为空格而不是NULL,考虑访问窗体清晰的内容,而不是删除内容。

具体而言,在记录源为SQL Server表的MS Access表单中,为同事在表单上的每个字段放置“清除内容”命令按钮或单击/双击事件。宏或VBA的触发事件后面有等于零长度字符串的字段:

Me.nameofcontrol=”“

但建议您的同事不要在键盘或功能区上按delete键或使用backspace键。这样做将使该值等于Null。为了保证遵守此规则,可以在控件的值设置为null时设置BeforeUpdate警告

If IsNull(Me.nameofcontrol) Then
    MsgBox "Field cannot have a null value. Please clear content if you want to delete.", vbInformation
    Cancel = True
    Me!nameofcontrol.Undo
End If

BeforeUpdate通常是表单字段验证的触发事件。它使用Cancel integer参数(True或-1;False或零)。“撤消”与在键盘上按ESC键相同,返回表单控件的旧值。

我想您可以在他完成编辑后运行一个过程,将空值替换为空值。我认为他的更新是自由形式的&不受形式控制,等等?如果他对数据的访问是由表单控制的,你可以把他更新的任何字段的过程放在那里——但如果他像我一样,那也没什么帮助。你用“SQL”指的是什么数据库?从你的关键词我看不出来。SQL Server?神谕MySQL?PostgreSQL?请注意,SQL是一种声明性的专用编程语言,不属于任何一家公司或软件。即使使用Jet/ACE引擎的MS Access也使用SQL。考虑编辑的澄清,特别是因为你讨论了RDMSs中不同的数据类型和规则。谢谢你,PaFaIT。我澄清了这个问题,因为它是一个SQL server表。那么@DonGeorge,你基本上是说没有好的方法来处理这个问题?我想我最好每天在将此SQL Server表导出到AS400表之前运行一个过程,将所有空值更新为空值。我每天晚上都会从该表更新该表。@rlphilli-不是说这是唯一的答案-只有一种方法。但是如果你的朋友可以不受限制地直接访问数据,我不知道你有多少控制权谢谢。这是有道理的。我真的没有考虑使用命令按钮,但这将很容易实现,因为实际上只有两个人更新这个表,建议他们如何使用它将很容易。我将在实现此功能后更新。