2012-04-06 25 views
6

Ich möchte die Select-Abfrage für MS Access mit Groß-und Kleinschreibung beachten.Wie schreibe ich Case-Sensitive Query für MS Access?

Ich habe zwei Werte für VitualMonitorName wie unten

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

hier beide Werte sind unterschiedlich.

Wenn ich

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

Es antwortet VCode = 1 Nur.

Antwort

9

Sie können die StrComp() Funktion mit vbBinaryCompare für einen Vergleich zwischen Groß- und Kleinschreibung verwenden. Hier ist ein Beispiel aus dem Direktfenster, um zu zeigen, wie StrComp() funktioniert. Weitere Informationen finden Sie im Hilfethema Zugriff.

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

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

StrComp() 0 zurück, wenn die ersten zwei Argumente zu bewerten als gleich 1 oder -1, wenn sie ungleich sind, und Null, wenn entweder Argument Null ist.

Um die Funktion in einer Abfrage zu verwenden, geben Sie den Wert vbBinaryCompare constant (0) anstelle des Namens an.

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

Dieser Ansatz ist auch auf Anfragen von anderen Anwendungen zur Verfügung, wenn sie den neueren Access-Datenbank-Engine („ACE“) Treiber verwenden. Zum Beispiel kann die folgende 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())); 
    } 
} 

produziert

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

Check this out:

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

Dieser Artikel beschreibt vier Methoden der Groß- und Kleinschreibung JOIN mit dem Microsoft zu erreichen Jet-Datenbankmodul. Jede dieser Methoden hat Vor- und Nachteile, die vor der Auswahl einer Implementierung abgewogen werden sollten. Die Methoden sind:

  • StrComp
  • Case-Sensitive IISAM Treiber
  • Hexadezimal Expansion
  • Binärfelds
0

auf einer einfacheren Ebene Mit der Codierung.

Als Bedingung in einer DCOUNT-Operation prüfen Sie ein Feld (Spalte), das den richtigen Case haben muss, und leere Zustände/Territorien ignorieren.

 ' 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

hallo es könnte helfen, wenn Ihr Code die Fragen Beispielcode verwendet. Es kann dem Fragesteller die Anwendung Ihrer Lösung erleichtern. –

1

nur integrierte Funktionen verwenden, eine zusätzliche benutzerdefinierte Spalte in der Ansicht Abfrage Entwurf hinzu:

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

die Null Parameter fordern Binärvergleich (Groß- und Kleinschreibung), wenn Standort von „VM1“ zu finden, innerhalb [VCode]

gesetzt, die Kriterien in dieser Spalte zu >0 so nur Datensätze mit nicht-Null-Position in der passenden VCode Like "*vm*" die genauen VM1 Zeichenfolge enthalten -

Die WHERE Klausel wie folgt aussieht:

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