VBA查询基于多个"多个选择列表框"在未从多个选择框之一

时间:2016-07-30 01:11:57

标签: sql vba listbox access

我有以下vba在测试Access数据库中创建查询。我有两个多选列表框。问题是,我希望能够从" Me![State]"中选择多个项目。并且没有来自"我![动物]"并能够运行查询。但是,这是不可能的,因为查询语言未设置为处理该问题。它让我选择了一些来自"我![动物]"。

我如何修改下面的vba以允许我在多个选择列表框中查询,如果多个列表框中的一个没有选择任何内容或两者都有选择?

Private Sub Command6_Click()


  Dim Q As QueryDef, DB As Database
   Dim Criteria As String
   Dim ctl As Control
   Dim Itm As Variant
   Dim ctl2 As Control
   Dim ctl3 As Control
   ' Build a list of the selections.


   Set ctl = Me![Animal]
   For Each Itm In ctl.ItemsSelected
      If Len(Criteria) = 0 Then
         Criteria = Chr(34) & ctl.ItemData(Itm) & Chr(34)
      Else
         Criteria = Criteria & "," & Chr(34) & ctl.ItemData(Itm) _
          & Chr(34)
      End If
   Next Itm
   If Len(Criteria) = 0 Then
      Itm = MsgBox("You must select one or more items in the" & _
        " list box!", 0, "No Selection Made")
      Exit Sub
   End If



      Set ctl2 = Me![State]
   For Each Itm In ctl2.ItemsSelected
      If Len(Criteria2) = 0 Then
         Criteria2 = Chr(34) & ctl2.ItemData(Itm) & Chr(34)
      Else
         Criteria2 = Criteria2 & "," & Chr(34) & ctl2.ItemData(Itm) _
          & Chr(34)
      End If
   Next Itm
   If Len(Criteria2) = 0 Then
      Itm = MsgBox("You must select one or more items in the" & _
        " list box!", 0, "No Selection Made")
      Exit Sub
   End If




   ' Modify the Query.
   Set DB = CurrentDb()
   Set Q = DB.QueryDefs("animalquery")
   ' Modify the Query.
   Set DB = CurrentDb()
   Set Q = DB.QueryDefs("animalquery")
   Q.SQL = "Select * From [table1] Where [table1].[type] In (" & "'Animal'" & _
     ")" & " and [table1].[animal] in (" & Criteria & _
     ")" & " and [table1].[state] in (" & Criteria2 & _
     ")" & ";"
   Q.Close

   ' Run the query.
   DoCmd.OpenQuery "animalquery"
End Sub

1 个答案:

答案 0 :(得分:0)

  

编辑 - 根据评论修复比较

您可以通过简单检查您的Criteria vaiables来完成此操作。

您已经进行了长度检查 - 稍后在构建动态SQL时使用它。

我添加了一个strSQL变量,以便更容易地跟踪发生了什么。并调整错误消息以允许一个或其他标准为空

function wpt_theme_js() {

wp_enqueue_script( 'bigredpod-script', get_template_directory_uri() . '/js/main.js', array( 'jquery' ), '', true );
wp_localize_script( 'bigredpod-script', 'ajax_posts', array(
    'ajaxurl' => admin_url( 'admin-ajax.php' ),
    'noposts' => __('No older posts found', 'bigredpod'),
));

}

wp_localize_script( 'bigredpod-script', 'ajax_posts', array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'noposts' => __('No older posts found', 'bigredpod'),
));

function more_post_ajax(){

$ppp = (isset($_POST["ppp"])) ? $_POST["ppp"] : 1;
$page = (isset($_POST['pageNumber'])) ? $_POST['pageNumber'] : 0;

header("Content-Type: text/html");

$args = array(
    'suppress_filters' => true,
    'posts_per_page' => $ppp,
    'paged'    => $page,
);

$loop = new WP_Query($args);

$out = '';

if ($loop -> have_posts()) :  while ($loop -> have_posts()) : $loop -> the_post();
    $out .= 

        '<article id="post-'. get_the_ID().'" class="'. implode(' ', get_post_class()) .'">
            <a href="'.get_the_permalink().'">'.get_the_post_thumbnail().'</a>
            <div class="inner-text">
        <h4 class="post-title">'.get_the_title().'</h4>
        <h5><span class="icon-calendar"></span> '.get_the_date().'</h5>
        <p>'.get_the_excerpt().'</p>
        <a href="'.get_the_permalink().'" class="button">Read More<span class="icon-arrow-right2"></span></a>
          </div>
        </article>';

endwhile;
endif;
wp_reset_postdata();
die($out);
}

add_action('wp_ajax_nopriv_more_post_ajax', 'more_post_ajax');
add_action('wp_ajax_more_post_ajax', 'more_post_ajax'); ?>