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 можно написать хранимую процедурку, которая бы осуществляла проверку подобного рода.
|
|