Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.023 c
7-1077712585
DuhcmanSoft
2004-02-25 15:36
2004.04.25
Как запустить прогу с возможностью работать в своём приложени?


8-1074793579
Aga
2004-01-22 20:46
2004.04.25
MIDI


1-1081439566
csr
2004-04-08 19:52
2004.04.25
Скрол в МЕМО


7-1077170724
mxsb
2004-02-19 09:05
2004.04.25
Как увидеть обмен другой проги с Com-порт ом


7-1077797937
Программер
2004-02-26 15:18
2004.04.25
Работа с USB