2012-04-06 84 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));