You can use the StrComp()
function with vbBinaryCompare
to compare with case. Here is an example from the Immediate window to show how StrComp()
works. For more information, see Access Help.
? StrComp("a", "A", vbBinaryCompare) 1 ? StrComp("a", "A",vbTextCompare) 0
StrComp()
returns 0 if the first two arguments evaluate to equal, 1 or -1 if they are not equal, and Null if any argument is Null.
To use a function in a query, set the constant vbBinaryCompare
(0), not its name.
SELECT VCode FROM VirtualMaster WHERE StrComp(VirtualMonitorName, "Vm1", 0) = 0;
This approach is also available for queries from other applications if they use the new Access Database Engine ("ACE") drivers. For example, the following C # code
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())); } }
produces
vbBinaryCompare found 1 record(s) vbTextCompare found 2 record(s)