C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
провека уникальности записи
Alex
Отправлено: 16.06.2003, 09:17


Ученик-кочегар

Группа: Участник
Сообщений: 5



Как проверить уникальность записи, при работе с таблицей dBase ?
Admin
Отправлено: 16.06.2003, 17:13


Владимир

Группа: Администратор
Сообщений: 1190



А по каким критериям запись должна быть уникальной ???
(или считается уникальной — ведь запись состоит из n полей)

Если нужна уникальность по каким либо полям,
так и создайте уникальный индекс по этим полям.

Table1->AddIndex("NumberName", "CustNo;CustName", TIndexOptions() << ixUnique);

Только с учетом:

dBASE tables only support primary indexes and true unique indexes when
the table level is 7 or higher (concurrent with Visual dBASE 7). dBASE
tables do not support case-insensitive indexes at all. You must use the
ixExpression constant when the index is based on multiple fields or uses
dBASE Data Manipulation Language (DML) functions (that is, for expression
indexes). Multi-field dBASE indexes cannot be created simply with a list of
field names (separated by semicolons) in the Fields parameter of
AddIndex. The ixExpression constant is only applicable to dBASE tables.

Тогда, при добавлении записи в таблицу, если запись по
этим полям будет неуникальной, добавления в таблицу
не произойдет и будет сгенерировано соответствующее
исключение, которое можно перехватить и обработать
по try {...} catch(...){...}

Если у вас в таблице допускаются неуникальные записи
(то есть неуникальные значения совокупности некоторый полей),
то по всей видимости, найти повторяющиеся записи можно
только полным перебором и сравнением всех записей таблицы
(особенно если запись должна быть уникальна по
всем полям таблицы, или по большему их числу)

Если же запись может быть неуникальной, и всего
по некоторым полям таблицы, для ускорения такой работы
удобней создать индекс по этим полям.

Gadzila
Отправлено: 09.07.2003, 14:29


Ученик-кочегар

Группа: Участник
Сообщений: 21



Насчет индексов все абсолютно верно!

Но если уж совсем невмоготу переделывать,
почему-б не попробовать select count(*)......

Вернуться в Работа с базами данных в C++Builder