确定列表框绑定列VBA的类型

时间:2018-11-30 20:48:49

标签: vba access-vba ms-access-2016

我正在基于multiselect列表框中的选择构建一个SQL字符串,为了实现这一点,我试图确定列表框的绑定列的类型是否为字符串。 我写了以下代码:

 SELECT … FROM … WHERE … IN (x,y,z) 

在debug.print VarType语句上,即使列表框的绑定列是一个自动编号字段,也始终导致字符串类型。我想知道类型是否为数字而不是字符串,以便稍后在我的SQL语句中

public class Password
{
   private String pw;

   public Password()
   {
      pw = "";
   }

   public Password( String pw )
   {
      this.pw = pw;
   }

   public boolean getPassword( String pw )
   {
      boolean l = false, u = false, lo = false, d = false, r = true;

      if( pw.length() >= 6 )
        { l = true; }      

      for( int i = 0; i < pw.length(); i++ )
      {
         if( Character.isUpperCase( pw.charAt(i) ) )
           { u = true; }

         if( Character.isLowerCase( pw.charAt(i) ) )
           { lo = true; }

         if( Character.isDigit( pw.charAt(i) ) )
           { d = true; }
      }

      if( l == false || u == false || lo == false || d == false )
        { r = false; }

      return r;
   }

我可以编写正确的WHERE…IN条件,以后再不会导致类型不匹配。有没有一种方法可以准确地确定列表框绑定列的变量类型?也许我应该通过查看列表框的行源的类型来采用另一种方法。因为我正在使用此函数来遍历构建where条件的多个列表框,所以我需要它是动态的和灵活的,以使某些列表框绑定的列为数字,而另一些为字符串的现实,所以我不能只是将其硬编码到循环中。

1 个答案:

答案 0 :(得分:2)

对于绑定列表框,您可以使用基础记录集获取绑定列的类型。

请参见以下代码:

Dim rs As Object 'most likely DAO.Recordset but could be ADODB.Recordset
With lstBox
    Set rs = .Recordset
    Debug.Print rs.Fields(.BoundColumn - 1).Type
End With

如果使用的是DAO记录集,则打印DAO.DataTypeEnum;如果使用的是ADODB,则显示ADODB.DataTypeEnum。这些很容易转换为VBA数据类型。

尽管如此,Mathieu Guindon关于使用参数的观点仍然存在。我强烈推荐。

相关问题