![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отловить одинаковые данные в БД [D6, FireBird 1.0]
nik7777 © (2004-03-26 06:39:00)Приветствую всех Мастеров!!!
Help me!!!
Может я последний ламер или просто голову заклинило, в общем суть вопроса в следующем:
Есть Interbase(FireBird 1.0) и клиент для работы с ним написанный а Delphi. В дельфевой проге работа идет по транзакциям, каждый пользователь работает отдельно.
Например, таблица клиентов, куда вводятся фио, адрес и еще несколько реквизитов.
По идее до завершения транзакции я не увижу данных введенных соседом, а потому не смогу проверить, что такие данные в базе уже есть.
Подскажите механизм отлавливания одинаковых данных для таблиц, буду очень благодарен.
Если что дайте ссылку.
Andery (2004-03-29 08:46:00) [21]Возможно прийдется писать триггер на вставку и проверять уникальность строк с созданием исключительной ситуации с объяснением причины.
Desdechado (2004-03-27 15:12:00) [22]а мне вообще непонятно, как могут с 2 компов одну информацию вводить ...
Если это заказ, или поставка со склада, или чел на прием к врачу пришел - он же ОДИН раз регистрируется. Как несколько копий получается бумажных?!
nik7777 (2004-03-27 05:51:00) [23]TO Sergey13:
Попробовал создать уникальные индексы - работает.
Спасибо!
Так же благодарю всех Мастеров, которые чем-то помогли мне.
Sergey13 (2004-03-26 12:55:00) [24]2nik7777 (26.03.04 11:56) [9]
Да все просто. Если уникальный индекс есть, фиг ты закомитишь чего несоответствующего. Реакция программы на "фиг" зависит от тебя. 8-)
Соловьев (2004-03-26 12:06:00) [25]2 nik7777 (26.03.04 11:56)
никак пока не зокомитишь :)
или перед сохранением делай запрос к БД и исчи двойника... Правда нет гарантии, что пока ты сделаешь этот запрос кто-то не закомитит такую же запись.. Один выход - лови при комите ексепшн и все. Давай инфу пользователю - пусть он решает что делать.
nik7777 (2004-03-26 11:59:00) [26]TO Alex_Bredin:
Что ты этим хотел сказать,ID поля есть в каждой таблице (каждая запись с уникальным номером)...
nik7777 (2004-03-26 11:56:00) [27]Даже если будут уникальные индексы, как мне определить при незавершенной транзакции что запись уже существует...
например есть индекс по номеру паспорта, дате рождения и вводятся одновременно одинаковые данные, как быть в таком случае???
Sergey13 (2004-03-26 09:39:00) [28]ИМХО, вопрос был несколько про иное (автор исчез и подтвердить/опровегнуть некому 8-). Это проблема смысловых записей-двойников. Типа "Фирма Рога и копыта" и "ООО Рога и копыта". Програмно она не решается, или вернее решается не до конца и не окончательно. При этом сама работа очень сложная и ресурсоемкая.
Самое правильное - обязать кого либо из персонала следить за этим и предоставить ему инструментарий для исправления возникших коллизий. При этом можно попробовать примитивно искать "похожие" записи при вставке и выдавать предупреждения оператору. Ну и конечно постараться выделить реквизиты, на которые можно однозначно навесить уникальность, типа ИНН.
Alex_Bredin (2004-03-26 09:11:00) [29]
> nik7777 (26.03.04 06:39)
возьмите за правило заводить в каждой таблице поле ID
Anatoly Podgoretsky (2004-03-26 09:06:00) [30]А по вопросу только по всем, иначе это разные записию
Deniz (2004-03-26 07:11:00) [31]Так и вопрос точно не указывает по каким критериям определяется, что "такие данные в базе уже есть". Вот если бы автор указал критерий(например таб.№ или №страхового полиса или еще что) тогда можно было бы конкретнее ответить, а так однофамильцев по ФИО тоже может быть в теории.
Fay (2004-03-26 06:51:00) [32]Имелось ввиду "по каким" 8)
Fay (2004-03-26 06:50:00) [33]И по какомим же полям индекс Вы предлагаете создать?
Deniz (2004-03-26 06:49:00) [34]Уникальный индекс + отлов Exception
ЮЮ (2004-03-26 06:42:00) [35]Неужели один и тот же клиент может оказаться около двух компьютеров одновременно? :-)