2014-03-25 90 views
0

首先,让我通过说我几乎完全不了解Access,VBA或SQL知道序言。但是,当老板要求你做某件事时,你就这样做了。对于格式不佳,数据库管理不当,以及我普遍缺乏知识,我事先表示歉意。级联组合框

不管怎么说,我有一个查询,我需要使用组合框来组织一个大表。查询的名称是FinalTable,我希望组合框命名的字段是ID Maker.Billet Material,ID Maker.Billet Number,ID Maker.Test Type和ID Maker.Axis。一旦每个框被更新,我想显示该行的其余字段。

下面是我在窗体的代码为止。这是从我在Google上搜索时发现的教程中撕下来的,但我现在已经绝望地迷失和困惑,无法弄清下一步该怎么做。

Private Sub TestType_AfterUpdate() 
    On Error Resume Next 
    Dim query As String 
    Dim Fields(3) 
    Fields(0) = "[ID Maker.Billet Material]" 
    Fields(1) = "[ID Maker.Billet Number]" 
    Fields(2) = "[ID Maker.Test Type]" 
    Fields(3) = "[ID Maker.Axis]" 

    query = "Select DISTINCT {replace} " & _ 
      "FROM FinalTable " & _ 
      "WHERE [ID Maker.Test Type] = '" & TestType.Value & "' " & _ 
      "WHERE [ID Maker.Billet Number] = " & BilletNumber.Value & " " & _ 
      "WHERE [ID Maker.Billet Material] = '" & BilletMaterial.Value & "' " & _ 
      "ORDER BY {replace};" 

    'Assign Queries 
    '========================= 
    Me.BilletMaterial.RowSource = Replace(query, "{replace}", Fields(0)) 'Billet Material Query 
    Me.BilletNumber.RowSource = Replace(query, "{replace}", Fields(1)) 'Billet Number Query 
    Me.TestType.RowSource = Replace(query, "{replace}", Fields(2)) 'Test Type Query 
    Me.Axis.RowSource = Replace(query, "{replace}", Fields(3)) 'Axis Query 

    'requery combobox's 
    Me.BilletMaterial.Requery 
    Me.BilletNumber.Requery 
    Me.TestType.Requery 
    Me.Axis.Requery 
End Sub 


Private Sub Axis_AfterUpdate() 
On Error Resume Next 
    Dim query As String 
    Dim Fields(3) 
    Fields(0) = "[ID Maker.Billet Material]" 
    Fields(1) = "[ID Maker.Billet Number]" 
    Fields(2) = "[ID Maker.Test Type]" 
    Fields(3) = "[ID Maker.Axis]" 

    query = "Select DISTINCT {replace} " & _ 
      "FROM FinalTable " & _ 
      "WHERE [ID Maker.Axis] = '" & Axis.Value & "' " & _ 
      "WHERE [ID Maker.Test Type] = '" & TestType.Value & "' " & _ 
      "WHERE [ID Maker.Billet Number] = " & BilletNumber.Value & " " & _ 
      "WHERE [ID Maker.Billet Material] = '" & BilletMaterial.Value & "' " & _ 
      "ORDER BY {replace};" 

    'Assign Queries 
    '========================= 
    Me.BilletMaterial.RowSource = Replace(query, "{replace}", Fields(0)) 'Billet Material Query 
    Me.BilletNumber.RowSource = Replace(query, "{replace}", Fields(1)) 'Billet Number Query 
    Me.TestType.RowSource = Replace(query, "{replace}", Fields(2)) 'Test Type Query 
    Me.Axis.RowSource = Replace(query, "{replace}", Fields(3)) 'Axis Query 

    'requery combobox's 
    Me.BilletMaterial.Requery 
    Me.BilletNumber.Requery 
    Me.TestType.Requery 
    Me.Axis.Requery 

query = ...声明我现在在那里现在导致错误。在我尝试这之前,只有第一个WHERE语句。

回答

3

几件改变。

  1. 您不必在查询的每个元素中引用表格。 FinalTable只需包含在“发件人”声明之后。
  2. 支架所必需的那些在有名称空间的列名,这是编译器如何区分是什么,是不是一个查询命令。
  3. 您需要重新查询信息,以便它实际上可以填充到组合框中。

正如Query a table that has spaces in its name, MS Access C# VS2008

正确指出:“用方括号包围隔开项目:

[通用站】

然后就打谁设计的数据库的家伙。”

所以给这个一杆,让我知道如何去 - 注:不能测试它在我的系统上。

Private Sub Material_AfterUpdate() 
    On Error Resume Next 
    Me.BilletNumber.RowSource = "Select [ID Maker.Billet Number] " & _ 
     "FROM FinalTable " & _ 
     "WHERE [ID Maker.Billet Material] = '" & Material.Value & "' " & _ 
     "ORDER BY [ID Maker.Billet Number];" 
    Me.BilletNumber.Requery 
End Sub 

UPDATE

当然,你只有唯一的记录,你可以利用在访问DISTINCT命令。

其次,以用相同的信息组合框的另一个,你可以藏在一个字符串的查询和重新查询这两个框。

Private Sub Material_AfterUpdate() 
     On Error Resume Next 
     Dim basequery As String 
     Dim Fields(3) 
     Fields(0) = "[ID Maker.Billet Material]" 
     Fields(1) = "[ID Maker.Billet Number]" 
     Fields(2) = "[ID Maker.Test Type]" 
     Fields(3) = "[ID Maker.Axis]" 

     basequery = "Select DISTINCT {replace} " & _ 
      "FROM FinalTable " & _ 
      "WHERE [ID Maker.Billet Material] = '" & Material.Value & "' " & _ 
      "ORDER BY {replace};" 

     'Assign Queries 
     '========================= 
     'I do NOT know your combobox names. 
     'Me.COMBOBOXNAME.RowSource - Change COMBOBOXNAME. 
     Me.BilletMaterial.RowSource = Replace(query, "{replace}", Fields(0)) 'Billet Material Query 
     Me.BilletNumber.RowSource = Replace(query, "{replace}", Fields(1)) 'Billet Number Query 
     Me.TestType.RowSource = Replace(query, "{replace}", Fields(2)) 'Test Type Query 
     Me.Axis.RowSource = Replace(query, "{replace}", Fields(3)) 'Axis Query 

     'requery combobox's 
     Me.BilletMaterial.Requery 
     Me.BilletNumber.Requery 
     Me.TestType.Requery 
     Me.Axis.Requery 
    End Sub 
+0

那么没有错误出现,所以这是进步。但是,第二个组合框未被填充。此外,有没有办法删除组合框中的重复? – user3241316

+0

我喜欢这个问题/回答。我特别喜欢拍拍那些在名字中放置空格的人。 – Smandoli

+0

@ user3241316您可以使用'DISTINCT'命令修复重复问题。我不知道组合框的其他名称,但您只需创建一个新字符串,复制并粘贴查询,然后更改要返回的独特值,将其分配给组合框和查询,然后将其分配给您完成。请查看上面的代码更新。 – Rich