7

Вопрос по – Как написать регистрозависимый запрос для MS Access?

Я хочу знать запрос выбора для MS Access с учетом регистра. У меня есть два значения для VitualMonitorName, как показано ниже VCode VirtualMonitorName Row 1 (1, 'VM1'); Row 2 (2, 'Vm1');Здесь оба значения разные. Если я напишу "SELECT VCode ...

5 ответов

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")
11

Вы можете использоватьStrComp() функция сvbBinaryCompare для сравнения с учетом регистра. Вот пример из окна Immediate, чтобы показать, какStrComp() работает. См. Раздел справки Access для более подробной информации.

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

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

StrComp() возвращает 0, если первые два аргумента оцениваются как равные, 1 или -1, если они неравны, и ноль, если любой из аргументов равен нулю.

Чтобы использовать функцию в запросе, укажитеvbBinaryCompare значение константы (0), а не ее имя.

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

Этот подход также доступен для запросов из других приложений, если они используют более новые драйверы Access Database Engine (& quot; ACE & quot;). Например, следующий код 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)
0

Это только одна буква:

MS-ACCESS SQL:

SELECT Asc(Left([Title],1)) AS t FROM Master WHERE (((Asc(Left([Title],1)))=105));

Title это поле, которое вы хотите найти

Master Таблица гдеTitle поле находится

105 Ascii код для персонажа ..

В этом случае только заголовки, которые начинаются с I, а не I

Если вы хотите найти строчные буквы & quot; a & quot; вы бы изменили 105 на 97

2

Проверь это:

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

В этой статье описываются четыре метода достижения чувствительного к регистру JOIN с использованием ядра базы данных Microsoft Jet. Каждый из этих методов имеет свои преимущества и недостатки, которые следует взвесить перед выбором реализации. Методы:

  • StrComp
  • Case-Sensitive IISAM Driver
  • Hexadecimal Expansion
  • Binary Field
1

Используя только встроенные функции, добавьте дополнительный настраиваемый столбец в представлении конструктора запросов:

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

нулевой параметр запрашивает двоичное сравнение (чувствительно к регистру) при поиске местоположения «VM1»; в[VCode]

установить критерии в этом столбце>0 так что только записи с ненулевым положением в сопоставлении vcodeLike "*vm*" содержит точную строку VM1 -

WHERE пункт выглядит так:

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

Похожие вопросы