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

 
Повторяющиеся данные в таблице
VainahskiyPapa
  Отправлено: 29.08.2003, 08:30


Дежурный стрелочник

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



Проблема следующая: Беру какую-то запись из n полей и толкаю в базу потом беру повторно ее же и пихаю и т.к. у меня одно из полей установлено как индекс где повторения не допускаются то билдер говорит что ты пацан мне не пихай одинаковые строки — не пудри мозги и кончается на этом. Мне нужно следующее если встретиться поторяющееся запись в таблице такая же какую я пихаю или хотя бы одно поле совпадет то мне нужно это проверить и не записывать запись, чтобы не ошибки не выкинул и продолжал спокойно работать и все было оки доки. Помогите пожалуйста кто может.
Георгий
Отправлено: 30.08.2003, 10:23


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



а try...catch не подходит?
VainahskiyPapa
Отправлено: 02.09.2003, 09:55


Дежурный стрелочник

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



Нет не помогает. Пишу try{ Table1->Fields->Fields[2]->AsString="Hello";}catch(...) {ShowMessage("An Error has occured");}

Выдает что поля одинаковые из-за этого ничего не могу
qwer115
  Отправлено: 02.09.2003, 21:20


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

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



на эту проблему существует как минимум 2,5 решения:
1 вариант самый элементарный — индексируем все поля, во вторичный индекс и обьявлем его unique а потом просто отлавливаем и гасим exceptionы. этот вариант идеален, если поля входящие в уникальный индекс очень малого размера.
1,5 вариант — расширение 1 варианта для длинных строковых полей в уникальном индексе — просто выносим строковые поля в отдельную таблицу и связываем в эти тадлицы между собой, т.е. нормализуем.
2 вариант (это если первые варианты показались геморными) перед добавлением записи выполнять SQL запрос на выборку записей соответсвующих добовляемой записи, если таковых записей нет, то добовляем иначе — нет. В идеале, если используется Interbase можно написать хранимую процедурку, которая бы осуществляла проверку подобного рода.

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