我正在基于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条件的多个列表框,所以我需要它是动态的和灵活的,以使某些列表框绑定的列为数字,而另一些为字符串的现实,所以我不能只是将其硬编码到循环中。
答案 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关于使用参数的观点仍然存在。我强烈推荐。