访问使用未绑定的组合框查找和添加记录

时间:2017-11-08 20:58:58

标签: ms-access combobox

我有一个项目查找表单,显示单个记录的信息。记录上有一个未绑定的组合框,用户可以使用该组合框输入项目编号,并通过DoCmd.SearchForRecord直接转到该记录。那部分工作正常。

我还想做的是让unboundcombobox能够向表中添加新项目。我现在将NotInList设置为:

If MsgBox("Create new inventory item " & NewData & "?", _
    vbQuestion + vbYesNo) = vbNo Then
    Me.PartNumberList.Undo
    Response = acDataErrContinue
    Exit Sub
Else
    CurrentDb.Execute "INSERT INTO Inventory ( PartNumber ) VALUES ('" & NewData & "');"
    Response = acDataErrAdded
End If

该表接收新数据,但现在我需要在表单找到数据之前重新查询表单。如果我在该代码之后立即添加Me.Requery,表单认为我正在尝试将相同的项目输入到表单中,它仍然没有在表中找到它,并且它再次询问我是否要添加该项目。如果我首先尝试重新查询组合框,它会告诉我必须先保存数据。添加If Me.Dirty然后在Requery前面的Me.Dirty = False不能解决这个问题。

因此经过一些搜索后我发现在重新查询之前我应该​​尝试移动到组合框中的第一条记录。除非现在我收到通知“您输入的值对此字段无效”。我按OK,然后一切都被重新检验,我现在可以手动导航到我的新零件号。但我无法确切地知道是什么引起了这个通知。 On Error Resume Next不会绕过此通知。当我单步执行代码时,通知似乎发生在NotInList之后,然后它会跳过所有其他事件。我不会解雇我的BeforeUpdate或AfterUpdate。

也许我只是把我的项目查找错了。也许我应该让用户添加不同形式的项目。将它全部保存到一个单一的表单会很方便。哦,也许值得一提的是,这个表单在Add模式下作为Dialog打开。但即使我单独关闭数据输入打开表单,错误也保持不变。

1 个答案:

答案 0 :(得分:0)

在您成功将行添加到表格后,而不是重新查询表单,可能以编程方式设置表单'记录源而不是?因此,请确保表单在设计视图中没有记录源并保存表单。在需要的地方打开对话框,确保ComboBox有一个RecordSource。用户输入不在列表中的值,使用NotInList事件将其添加到DB,将用户输入的值存储到变量中,仅重新查询ComboBox,将组合框设置为变量以便选择新条目,然后你的代码将使用:

Me.RecordSource = "SELECT * FROM Inventory WHERE PartNumber= " & Me!YourComboboxValue

OR

Me.RecordSource = "SELECT * FROM Inventory WHERE PartNumber= '" & Me!YourComboboxValue & "'"

如果" PartNumber"它是一个字符串值。

这应该比DoCmd.SearchForRecord更快。当您打开表格时,您可以将行拉入到永远不需要的表格中。

重新查询组合框后,新值将出现在列表中但未选中。这可能适合你的情况。如果先将零件号存储在变量中,则可以执行以下操作:

Dim sPartNumber as String
sPartNumber = NewData
<ADD YOUR DATA TO THE TABLE>
Me!ComboBox.Requery
Me.RecordSource = "SELECT * FROM Inventory WHERE PartNumber = '" & sPartNumber & "'"
Me!Combobox = sPartNumber (Optional)

从内存中执行代码可能并不完美。 : - )

让我知道,祝你好运!