MS Access中的交叉相关级联下拉列表

时间:2016-03-23 16:55:12

标签: sql-server vba ms-access access-vba

我的概念是:有三列与明确的等级相关。我希望我们的用户能够以他们喜欢的顺序输入组合框,并将其他两个组合框中提取的信息反馈给它。

示例:跟踪器中的Country / State / (County/Region/District/City);带有源信息的sql引用表将是Country_Name, State_Name, County_Name

如果有人投入维也纳"进入郡,人们可以选择佐治亚州,密苏里州等州,美国和奥地利作为国家的选择(我不知道奥地利更大的省级结构将他们添加到州领域 - 这意味着一个类似的例子。)

如果要放入"弗吉尼亚"在州一,将美国作为国家的选择,各县作为县的选择。

输入国家/地区的层次结构相对正常,因为这是自然向下钻取。

我知道如何进行级联(单向)组合框。问题在于无法在控制源中使用嵌套的Iif,或者无法通过_AfterUpdate情况临时修改控制源 - 请原谅伪代码:

Private Sub State_AfterUpdate()
    If Country = "" And County = "" Then
        Me.Country.ControlSource = "SELECT Country_Name FROM Natl_Structure WHERE State_Name = " & Forms![Postal]![State]

        Me.County.ControlSource = "Select County_Name FROM Natl_Structure WHERE State_Name = " & Forms![Postal]![State] & ";"

    Elseif Country <> "" And County = "" Then
        Me.County ControlSource = "Select County_Name FROM Natl_Structure WHERE (State_Name = " & Forms![Postal]![State]) AND (Country_Name = " & Forms![Postal]![Country] & ";"

...并将其翻转为相反的情况。并设置与第一种情况相反的情况,如果两者都已设置(不是在那时需要,而只是考虑所有情况)。然后将相同类型的度量应用于其他两个组合框。

任何和所有帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您必须在控制源中使用IIF来检查其他组合框中是否已有值。

       LatLng locationLatLong = obtenirLeCentre(membres);
    String location = locationLatLong.latitude+","+locationLatLong.longitude;
    //radius_
    String radius = ""+radius_;
    //rankby_ is an attribute whose value is "distance"
    //type
    Set<String> uniqueElements = new HashSet<String>(listPreferences_); 
    listPreferences_.clear();
    listPreferences_.addAll(uniqueElements);
    String type = "";
    int taille = listPreferences_.size();
    for(int i = 0 ; i < taille; i++){
        if(i == taille - 1)
            type += Converter.converter_.nameToPlaceType(listPreferences_.get(i));
        else
            type += Converter.converter_.nameToPlaceType(listPreferences_.get(i))+"|";
    }
    setupClient();

    //2- get the answer from my http call
    String reponseHttp = Converter.converter_.fromResponseToString(get().getJson(location,radius,rankBy,type,googleKey));