Всегда ли уникальные индексы в текстовых полях Access не чувствительны к регистру? - PullRequest
4 голосов
/ 29 ноября 2010

Я создал таблицу MS Access, используя следующий код:

  tbl := Database.CreateTableDef('English', 0, '', '');
  try
    fld := tbl.CreateField('ID', dbLong, 0);
    fld.Attributes := dbAutoIncrField + dbFixedField;
    tbl.Fields.Append(fld);

    fld := tbl.CreateField('Content', dbText, 255);
    fld.Required := true;
    fld.AllowZeroLength := false;
    tbl.Fields.Append(fld);

    Database.TableDefs.Append(tbl);

    idx := tbl.CreateIndex('PrimaryKey');
    idx.Fields.Append(idx.CreateField('ID', EmptyParam, EmptyParam));
    idx.Primary := True;
    idx.Unique := true;
    tbl.Indexes.Append(idx);

    idx := tbl.CreateIndex('IX_Content');
    idx.Fields.Append(idx.CreateField('Content', EmptyParam, EmptyParam));
    idx.Primary := false;
    idx.Unique := true;
    tbl.Indexes.Append(idx);
  finally
    tbl := nil;
  end;

Это работает нормально, пока я не попытаюсь вставить две строки «Тип поля» и «Тип поля» в эту таблицу. Я получаю сообщение о том, что уникальный индекс ограничивает меня в этом. Как видите, они отличаются только в случае второго слова. Поскольку я явно не делал регистр нечувствительным (я бы даже не знал, как это сделать), я не совсем понимаю, почему это происходит. Всегда ли индексы в текстовых полях нечувствительны к регистру в MS Access? Если нет, что я делаю не так?

Ответы [ 2 ]

5 голосов
/ 29 ноября 2010

Базы данных Access Jet в основном не чувствительны к регистру. Это твоя проблема. Насколько я знаю, нет способа сделать индекс доступа чувствительным к регистру.

0 голосов
/ 30 июня 2019

Использовать двоичное поле

Проблема нечувствительности к регистру в Microsoft Access уже давно решена в статье KB244693 , опубликованной Microsoft, и все еще можно найти в веб-архиве .

По сути, решение состоит в том, чтобы добавить двоичное поле в таблицу MS Access, которое, наконец, учитывает регистр (использует Unicode для хранения двоичного содержимого) и все еще может использоваться как текстовое поле с операторами =, LIKE и т. д.

Поле типа Binary не может быть добавлено через пользовательский интерфейс, но вы добавляете его в существующую таблицу с помощью оператора SQL, например:

ALTER TABLE Table1
  ADD COLUMN BinaryField1 BINARY(50)

Тогда вы можете нормально управлять им через интерфейс доступа.

...