2013-03-20 62 views
1

我的表单中有一个组合框,其中有一个表格填充列表作为行源。当用户输入字段时,更改某些内容并将其删除,以便组合框为空我收到错误“您尝试将空值分配给非变量数据类型的变量”。ComboBox空/空抛出错误。如何“重置”字段?

问题是,我的组合框不允许空字符串,但我也无法找到错误之前触发组合框中的事件。所以我不能使用Len或IsNull来捕捉错误。目前我使用这个“变通”,但它是非特异性的,因为它使用的表格,组合框的错误事件:

Private Sub Form_Error(DataErr As Integer, Response As Integer) 
    Me.myField.Undo 
    Response = acDataErrContinue 
End Sub 

有没有更好的方式来处理这个问题?

我找到了this。但是这并没有解决问题。

+1

哪条确切的线会引发该错误,因为它不是与控件或表相关的错误,而是与代码有关。您可能最好更改代码部分的变量类型。 – Fionnuala 2013-03-20 18:07:41

+0

没有变量,但两个表之间有链接来更新文本字段。 – 2013-03-20 18:45:06

+0

链接是什么样的?它如何更新该领域? – Fionnuala 2013-03-20 19:46:02

回答

3

正如Remou在评论中指出的那样,错误是针对您在将新值输入组合框后所做的回应。检查组合框事件。如果您不介意类型并希望使用空值,则可以将变量更改为Variant类型。如果您使用的是实际的数据类型,如字符串或整数,则使用NZ()函数筛选出空值。

例如,如果你想要一个空字符串赋值给一个字符串变量,如果组合框为空,那么你可以这样做:

dim s as string 
s = nz(me.combobox,"") 

至于错误之前烧制 - 地方在你的代码已经有导致错误的有问题的代码。你需要找到它。为了提供更详细和具体的答案,将需要更多信息。

+0

这当然是一个更完整的答案:) – Fionnuala 2013-03-20 18:24:36

+0

它是最初的链接。我指的是一个带有空值的整数(id)。 – 2013-03-20 18:46:41

+0

请原谅我,如果你已经意识到这一点 - 只是认为我会涵盖的基本知识: 你可以尝试改变表关系(链接)为1:1(表之间没有箭头)。这意味着如果Table1的键是“55”而Table2不包含55 - 那么表1中的记录将不会显示。如果您执行一对多关系(仅限第二个表上的箭头),那么如果Table2中没有“55”,则会看到table1的内容,但是table2中的每个记录都会看到一个空值。 – 2013-03-21 19:00:13

1

这是一个无证的微软“功能”,旨在让你疯狂。那些告诉你“查看你的代码”,“你的代码中某处”的人不知道他们在说什么。

两种解决方法。更改表中的基础字段以允许空值,或者,我认为这是最好的方法,将您的组合改为未绑定的控件并在AfterUpdate事件中设置基础字段。

+0

不幸的是,这是正确的答案。错误消息使得它看起来像一个代码问题,但事实并非如此。这只是开发人员必须决定是否值得为用户提供更好体验的许多情况之一,其代价是必须对Access的预期行为进行编码。 – MarredCheese 2018-02-21 22:30:48