combobox.column属性在vba

时间:2016-06-01 19:05:29

标签: sql vba ms-access combobox null

我是一个数据库//访问菜鸟,所以请耐心等待。我有一个数据库,用于跟踪技术咨询公司的顾问及其供应商。一些顾问是他们自己的供应商,有些顾问有第三方供应商来处理他们的合同。如果顾问也是他们自己的供应商,则两者的联系信息都是相同的。联系人信息存储在一个单独的表中,主键为ContactID和ConsultantID的外键字段(ConsultantT中的主键)和VendorID(VendorT中的主键)。

如果已经在其中一个表单上输入了相关的联系信息,我希望能够选择已存在的联系信息记录并告诉数据库将其他外键ID字段添加到现有记录中基于主表单上的记录。因此,例如,如果我已经通过顾问表单输入了顾问A的联系信息,当我打开供应商表单添加顾问A的供应商时,我希望选择"顾问A"从组合框中获取信息并填充VendorsF的联系信息表单,同时将VendorID添加到顾问A的现有联系信息记录中。

我想我几乎已经解决了这个问题,但最后还是坚持了下来。现在我有一个弹出窗体(ChooseConsultantInfoF)来选择现有的ContactInfo记录。在那个表单上,我有一个搜索组合框(SelectConsultantCombo)来选择现有记录,还有一个命令按钮(SaveConsultantbtn),我试图编码以更新ContactInfoT并将VendorsF上的当前记录中的VendorID添加到ContactInfoT中的现有记录。以下是弹出窗体的所有代码:

Option Compare Database
Option Explicit

Private Sub SaveConsultantbtn_Click()
Dim stupid As Long
stupid = SelectConsultantCombo.Column(0)
DoCmd.RunSQL "UPDATE ContactInfoT SET VendorID = (Forms!VendorsF!VendorID) Where ContactInfoID = " & stupid & ";"
End Sub

Private Sub SelectConsultantCombo_AfterUpdate()
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
rst.FindFirst "ContactInfoID = " & Me!SelectConsultantCombo
Me.Bookmark = rst.Bookmark
leave:
Me!SelectConsultantCombo = Null
If Not rst Is Nothing Then Set rst = Nothing
Exit Sub

End Sub

当我尝试将其付诸行动时,我得到错误94:无效使用Null并且它拉起来

stupid = SelectConsultantCombo.Column(0)

我知道代码块与此不同 - 我使用数值而不是变量尝试了一次Click事件:

 Private Sub SaveConsultantbtn_Click()
    DoCmd.RunSQL "UPDATE ContactInfoT SET VendorID = (Forms!VendorsF!VendorID) Where ContactInfoID = 1 ;"
    End Sub

没有任何问题,因此问题必须是调用组合框的列。

我也尝试用Nz定义变量以允许Null:

stupid = Nz(Me.SelectConsultantCombo.Column(0), 0)

这也使代码工作,但仍然没有将我的VendorID保存到ContactInfoT中的记录。组合框中的所有列都不包含Null值(无论如何我都找不到)。 Dunno如果有用,但组合框的行源是:

SELECT ContactInfoT.ContactInfoID, ConsultantT.ConsultantID, ConsultantT.FirstName, ConsultantT.LastName FROM ConsultantT INNER JOIN ContactInfoT ON ConsultantT.ConsultantID = ContactInfoT.ConsultantID ORDER BY ConsultantT.[LastName], ConsultantT.[FirstName];

有谁知道为什么Access不能识别我的combobox.column属性?或者是否有另一种方法在VBA中写这个来避免这个错误?

2 个答案:

答案 0 :(得分:0)

首先尝试stupid = Me.SelectConsultantCombo.Column(0)(您缺少Me.部分)。

但你应该做的是确保组合框上的绑定列设置正确并只使用stupid = Me.SelectConsultantCombo

答案 1 :(得分:0)

我从组合的后续更新中取出了Me!SelectConsultantCombo = Null,现在效果很好!当然,如果我在代码中的某处将组合集设置为null,那么它将在其他地方拉出null,对不起!