2012-04-06 46 views
6

我想知道Select Access for MS Access区分大小写。如何为MS Access编写区分大小写的查询?

我有VitualMonitorName两个值如下

VCode VirtualMonitorName 
Row 1 (1, 'VM1'); 
Row 2 (2, 'Vm1'); 

这里既有值是不同的。

如果我写

"SELECT VCode FROM VirtualMaster WHERE VirtualMonitorName like '" + Vm1 + "'"; 

它回复VCODE = 1只。

回答

9

您可以使用StrComp()函数vbBinaryCompare的区分大小写的比较。以下是即时窗口中的一个示例,显示StrComp()的工作方式。有关更多详细信息,请参阅Access帮助主题。

? StrComp("a", "A", vbBinaryCompare) 
1 

? StrComp("a", "A",vbTextCompare) 
0 

StrComp()返回0,如果前两个参数评估为等于1或-1,如果它们不相等,和Null如果任一参数为Null。

要使用该功能在查询,提供vbBinaryCompare常量的值(0),而不是它的名称。

SELECT VCode 
FROM VirtualMaster 
WHERE StrComp(VirtualMonitorName, "Vm1", 0) = 0; 

如果其他应用程序使用较新的Access数据库引擎(“ACE”)驱动程序,则该方法也可用于查询。例如,下面的C#代码

string myConnectionString = 
     @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" + 
     @"Dbq=C:\Users\Public\Database1.accdb;"; 
using (OdbcConnection con = new OdbcConnection(myConnectionString)) 
{ 
    con.Open(); 
    using (var cmd = new OdbcCommand()) 
    { 
     cmd.Connection = con; 
     cmd.CommandText = 
       "SELECT COUNT(*) AS n FROM [VirtualMaster] " + 
       "WHERE StrComp([VirtualMonitorName],?,?) = 0"; 
     cmd.Parameters.AddWithValue("?", "Vm1"); 
     cmd.Parameters.Add("?", OdbcType.Int); 

     var vbCompareOptions = new Dictionary<string, int>() 
     { 
      {"vbBinaryCompare", 0}, 
      {"vbTextCompare", 1} 
     }; 
     string currentOption = ""; 

     currentOption = "vbBinaryCompare"; 
     cmd.Parameters[1].Value = vbCompareOptions[currentOption]; 
     Console.WriteLine(
       "{0} found {1} record(s)", 
       currentOption, 
       Convert.ToInt32(cmd.ExecuteScalar())); 

     currentOption = "vbTextCompare"; 
     cmd.Parameters[1].Value = vbCompareOptions[currentOption]; 
     Console.WriteLine(
       "{0} found {1} record(s)", 
       currentOption, 
       Convert.ToInt32(cmd.ExecuteScalar())); 
    } 
} 

产生

vbBinaryCompare found 1 record(s) 
vbTextCompare found 2 record(s) 
2

检查了这一点:

https://support.microsoft.com/kb/244693?wa=wsignin1.0

本文介绍了实现区分大小写的四种方法JOIN使用Microsoft Jet数据库引擎。所有这些方法都有一个值得选择实现之前进行权衡的优点和缺点。其方法为:

  • STRCOMP
  • 区分大小写IISAM驱动
  • 十六进制扩展
  • 二进制字段
0

使用在编码的简单水平。

如在DCOUNT操作的条件,检查在字段(列)有有正确的案例,而忽略了空白的国家/地区。

 ' lngcounter will count the all States 
     ' or Territories Field (Column) with this 
     ' exact case value of 'Ohio'. ([ID] is an Autonumber ID field) 

     lngCounter = DCount("[id]", Trim(Me!tboDwellingTablename), "[State/territory],'Ohio',0) = 0") 
+0

招呼它可能如果你的代码中使用的问题,示例代码帮助。这可能使提问者更容易应用您的解决方案。 – 2017-08-24 07:10:10

1

仅使用内置函数,查询设计视图中添加一个额外的自定义列:

location: InStr(1,[VCode],"VM1",0) 

零参数要求二进制比较发现“VM1”的位置时,中(区分大小写) [VCode]

设置在该列中的标准来>0具有非零位置匹配Like "*vm*"包含完全相同VM1字符串VCODE所以只记录 -

WHERE条款是这样的:

WHERE (((VirtualMaster.VCode) Like "\*vm*") AND ((InStr(1,[VCode],"VM1",0))>0));