Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

Отловить одинаковые данные в БД   Найти похожие ветки 

 
nik7777   (2004-03-26 06:39) [0]

Приветствую всех Мастеров!!!
Help me!!!
Может я последний ламер или просто голову заклинило, в общем суть вопроса в следующем:
Есть Interbase(FireBird 1.0) и клиент для работы с ним написанный а Delphi. В дельфевой проге работа идет по транзакциям, каждый пользователь работает отдельно.
Например, таблица клиентов, куда вводятся фио, адрес и еще несколько реквизитов.
По идее до завершения транзакции я не увижу данных введенных соседом, а потому не смогу проверить, что такие данные в базе уже есть.
Подскажите механизм отлавливания одинаковых данных для таблиц, буду очень благодарен.
Если что дайте ссылку.


 
ЮЮ ©   (2004-03-26 06:42) [1]

Неужели один и тот же клиент может оказаться около двух компьютеров одновременно? :-)


 
Deniz ©   (2004-03-26 06:49) [2]

Уникальный индекс + отлов Exception


 
Fay ©   (2004-03-26 06:50) [3]

И по какомим же полям индекс Вы предлагаете создать?


 
Fay ©   (2004-03-26 06:51) [4]

Имелось ввиду "по каким" 8)


 
Deniz ©   (2004-03-26 07:11) [5]

Так и вопрос точно не указывает по каким критериям определяется, что "такие данные в базе уже есть". Вот если бы автор указал критерий(например таб.№ или №страхового полиса или еще что) тогда можно было бы конкретнее ответить, а так однофамильцев по ФИО тоже может быть в теории.


 
Anatoly Podgoretsky ©   (2004-03-26 09:06) [6]

А по вопросу только по всем, иначе это разные записию


 
Alex_Bredin ©   (2004-03-26 09:11) [7]


> nik7777   (26.03.04 06:39)  

возьмите за правило заводить в каждой таблице поле ID


 
Sergey13 ©   (2004-03-26 09:39) [8]

ИМХО, вопрос был несколько про иное (автор исчез и подтвердить/опровегнуть некому 8-). Это проблема смысловых записей-двойников. Типа "Фирма Рога и копыта" и "ООО Рога и копыта". Програмно она не решается, или вернее решается не до конца и не окончательно. При этом сама работа очень сложная и ресурсоемкая.
Самое правильное - обязать кого либо из персонала следить за этим и предоставить ему инструментарий для исправления возникших коллизий. При этом можно попробовать примитивно искать "похожие" записи при вставке и выдавать предупреждения оператору. Ну и конечно постараться выделить реквизиты, на которые можно однозначно навесить уникальность, типа ИНН.


 
nik7777   (2004-03-26 11:56) [9]

Даже если будут уникальные индексы, как мне определить при незавершенной транзакции что запись уже существует...
например есть индекс по номеру паспорта, дате рождения и вводятся одновременно одинаковые данные, как быть в таком случае???


 
nik7777   (2004-03-26 11:59) [10]

TO Alex_Bredin:
Что ты этим хотел сказать,ID поля есть в каждой таблице (каждая запись с уникальным номером)...


 
Соловьев ©   (2004-03-26 12:06) [11]

2 nik7777   (26.03.04 11:56)
никак пока не зокомитишь :)
или перед сохранением делай запрос к БД и исчи двойника... Правда нет гарантии, что пока ты сделаешь этот запрос кто-то не закомитит такую же запись.. Один выход - лови при комите ексепшн и все. Давай инфу пользователю - пусть он решает что делать.


 
Sergey13 ©   (2004-03-26 12:55) [12]

2nik7777   (26.03.04 11:56) [9]
Да все просто. Если уникальный индекс есть, фиг ты закомитишь чего несоответствующего. Реакция программы на "фиг" зависит от тебя. 8-)


 
nik7777   (2004-03-27 05:51) [13]

TO Sergey13:
Попробовал создать уникальные индексы - работает.
Спасибо!

Так же благодарю всех Мастеров, которые чем-то помогли мне.


 
Desdechado ©   (2004-03-27 15:12) [14]

а мне вообще непонятно, как могут с 2 компов одну информацию вводить ...
Если это заказ, или поставка со склада, или чел на прием к врачу пришел - он же ОДИН раз регистрируется. Как несколько копий получается бумажных?!


 
Andery   (2004-03-29 08:46) [15]

Возможно прийдется писать триггер на вставку и проверять уникальность строк с созданием исключительной ситуации с объяснением причины.


 
Sergey13 ©   (2004-03-29 08:49) [16]

2Andery   (29.03.04 08:46) [15]
А зачем такие сложности, если исключение и так сгенерится при нарушении уникальности?


 
stud ©   (2004-03-29 09:31) [17]


> Desdechado ©   (27.03.04 15:12) [14]

ее даже с одного могут занести. и уникальные индексы оказываются  бессильны)))


 
Anatoly Podgoretsky ©   (2004-03-29 09:39) [18]

Это как? Ты что то не то говоришь, как это бессильны, может вам стоит программиста пригласить?


 
stud ©   (2004-03-29 09:50) [19]


> Anatoly Podgoretsky ©   (29.03.04 09:39) [18]

пример такой: в медицине идентификация пациента происходит по четырем полям - ф.и.о.дата рождения. достаточно для одного и того же пациента дату рождения ставить с потолка - и это уже другой человек плюс ошибки в фио при вводе)))


 
Anatoly Podgoretsky ©   (2004-03-29 09:52) [20]

Точно программист нужен.


 
Sergey13 ©   (2004-03-29 09:58) [21]

2stud ©   (29.03.04 09:50) [19]
Тут точно индексы бессильны, но подобные случаи в медицине описаны... 8-)


 
stud ©   (2004-03-29 10:02) [22]


> Anatoly Podgoretsky ©   (29.03.04 09:52) [20]

вы так думаете?))
если проблема научить этих пользователей отличать запятую от точки.... не говоря о том, чтобы просто найти нужного человека в базе


 
Sergey13 ©   (2004-03-29 10:15) [23]

stud ©   (29.03.04 09:50) [19]
>в медицине идентификация пациента происходит по четырем полям - ф.и.о.дата рождения.
А в БД идентификация происходит по уникальному идентификатору, в качестве которого могут выступать как сурогатные данные (автоинкремент в разных исполнениях) так  и естественные (например номер паспорта). Для реализации такого механизма и нужны программисты. 8-)


 
stud ©   (2004-03-29 10:27) [24]


> А в БД идентификация происходит по уникальному идентификатору,
> в качестве которого могут выступать как сурогатные данные
> (автоинкремент в разных исполнениях) так  и естественные
> (например номер паспорта). Для реализации такого механизма
> и нужны программисты. 8-)

согласен. осталось только заставить людей вводить такие данные как паспортные или хотя-бы что-то еще кроме фио. а то ведь когда сделал ввод этих данных обязательным - визгу было!!!! нам некогда, мы не хотим, это не важно.)))) интересно как прогарммировать такие заявки? суть простая, программа должна работать не с теми данными которые нужны для нормального функционирования, а с теми которые нам не лень вводить. доказывать что-либо бесполезно))


 
Sergey13 ©   (2004-03-29 10:35) [25]

2stud ©   (29.03.04 10:27) [24]
А код генерить на каждого вводимого нельзя что ли? А когда у них появится несколько Ивановых Иванов Ивановичей с д/р 01.01.01 сказать - а не пошли бы вы подальше и предъявить им человека который вводил таких в справочник (это элементарно организовать даже незаметно для юзера). После этого сорвать денюжку за исправление ситуации. 8-)


 
stud ©   (2004-03-29 10:41) [26]

так говорил и показывал кто виновник торжества.
а вы не сталкивались с ситуацией, когда приходит большое начальство и спрашивает: почему программа не работает?
ты ему: да вот данные не вводят необходимые!!!
оно: я не спрашиваю кто что вводит, я спрашиваю почему программа не работает.
а ради интереса подсчитал двойников и даже тройников.
автоматизация деятельности - это комплекс административно-технических мероприятий. если административная часть пущена на самотек, то реализовать техничекую часть весьма сложно. иногда даже невозможно....
а вы ключи, ключи))))


 
Sergey13 ©   (2004-03-29 10:53) [27]

2stud ©   (29.03.04 10:41) [26]
С такими начальниками надо бороться их же оружием.
1. Сделать примерно так как я написал в [25]
2. Написать служебную записку с понятным и доходчивым обоснованием того, что неправильный ввод влечет за собой неправильный вывод.

Все. При возникновении коллизий тыкать всех в копию служебной. Если не поможет - искать другую работу.


 
stud ©   (2004-03-29 10:57) [28]

тут самый действенный вариант - 3)))
чем и занимаюсь


 
Жук ©   (2004-03-29 11:31) [29]

Когда автоматизируются доселе не затронутые области, разработчику, естественно, нужен какой-то административный ресурс. По себе знаю, что отношение к тебе потенциальных юзверей становится более пиетическим, когда представляешься не "программист отдела АСУ", а "Руководитель рабочей группы по автоматизации учёта" :-)


 
Sergey13 ©   (2004-03-29 11:53) [30]

2Жук ©   (29.03.04 11:31) [29]
А еще хорошо красные корочки показать и так вкрадчиво спросить: "А какие у вас, собственно, возражения по внесению информации? И как ваша фамилия?"


 
Deniz ©   (2004-03-29 12:37) [31]

> stud ©   (29.03.04 10:41) [26]
Дожились, начальство Вас наказывает, а Вы стараетесь пользователям угодить. Значит надо наказывать пользователя(ведь это они жалуются). Например, заставить вводить ВСЕ необходимые данные + служебка и в итоге перевести все разборки по функцианалу на служебные записки.


 
stud ©   (2004-03-29 12:47) [32]

в теории все замечательно выглядит............))))
но в жизни все относительно однако))


 
Sergey13 ©   (2004-03-29 12:52) [33]

2stud ©   (29.03.04 12:47) [32]
Так возят на том, кто везет, как правило, и не взбрыкивает. Их же потом делают стрелочниками, иногда.
ЗЫ:
Все больше подходит для переноса в треп.


 
stud ©   (2004-03-29 12:53) [34]

пора заканчивать )) а то скоро слезы пойдут))))


 
Fay ©   (2004-03-29 14:40) [35]

Служебки - реальное решение. Проверено!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.045 c
3-1080465015
Крутыш
2004-03-28 13:10
2004.04.25
как опеределить какой столбец в фокусе в данный момент


3-1080633337
Innokenty
2004-03-30 11:55
2004.04.25
Умножение или деление. Что быстрее.


3-1080299889
JohnS
2004-03-26 14:18
2004.04.25
MS SQL 2000 + AdoCommand + Проблема


3-1080637658
alex123
2004-03-30 13:07
2004.04.25
DBGridEH.SumList.VirtualRecords


6-1077725023
Pat
2004-02-25 19:03
2004.04.25
WWW-авторизация





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский