我是一个数据库//访问菜鸟,所以请耐心等待。我有一个数据库,用于跟踪技术咨询公司的顾问及其供应商。一些顾问是他们自己的供应商,有些顾问有第三方供应商来处理他们的合同。如果顾问也是他们自己的供应商,则两者的联系信息都是相同的。联系人信息存储在一个单独的表中,主键为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中写这个来避免这个错误?
答案 0 :(得分:0)
首先尝试stupid = Me.SelectConsultantCombo.Column(0)
(您缺少Me.
部分)。
但你应该做的是确保组合框上的绑定列设置正确并只使用stupid = Me.SelectConsultantCombo
答案 1 :(得分:0)
我从组合的后续更新中取出了Me!SelectConsultantCombo = Null
,现在效果很好!当然,如果我在代码中的某处将组合集设置为null,那么它将在其他地方拉出null,对不起!