我们习惯上常用几个组合框构成联级筛选,联级筛选的基本原理就是用其他组合框的控件值,来改变需要筛选的组合框行来源的SQL语句。从这个原理出发,只要我们能获得本组合框输入的数据,那么就可以利用这些数据对组合框进行自筛选。
要达成这样一个自筛选的效果,需要用到的是组合框的【不在列表中】事件,在这个事件中有两个参数其一名曰NewData,其二名曰 Response 。其中NewData就是输入时不在列表中的那个值,我们便可以用这个值来构造Where子句。这样我们就可以不拖出去枪毙,就地正法即可了。
点击下载此附件
Private Sub Form_Load()
Dim ssql As String
ssql = "Select cpk.产品编号, '名称:' & [产品名称及规格] & ' 颜色:' & [颜色] & ' 单位:' & [单位] AS 品名 FROM cpk"
Me.产品编号.RowSource = ssql
End Sub
Private Sub 产品编号_AfterUpdate()
Dim ssql As String
ssql = "Select cpk.产品编号, '名称:' & [产品名称及规格] & ' 颜色:' & [颜色] & ' 单位:' & [单位] AS 品名 FROM cpk"
Me.产品编号.RowSource = ssql
Me.进货数量.SetFocus
End Sub
Private Sub 产品编号_NotInList(NewData As String, Response As Integer)
Dim ssql As String
Dim WH As String
Response = acDataErrContinue
ssql = "Select cpk.产品编号, '名称:' & [产品名称及规格] & ' 颜色:' & [颜色] & ' 单位:' & [单位] AS 品名 FROM cpk"
WH = " Where instr([产品名称及规格] & [颜色] & [单位],'" & NewData & "')>0"
Me.产品编号.RowSource = ssql & WH
If Me.产品编号.ListCount = 1 Then
Me.产品编号.Value = Me.产品编号.Column(0, 0)
ssql = "Select cpk.产品编号, '名称:' & [产品名称及规格] & ' 颜色:' & [颜色] & ' 单位:' & [单位] AS 品名 FROM cpk"
Me.产品编号.RowSource = ssql
Me.进货数量.SetFocus
Else
Me.产品编号.Dropdown
End If
End Sub