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

Вниз

Как проверить колличество одинаковых записей в поле   Найти похожие ветки 

 
vodvorezlaya   (2006-09-21 13:01) [0]

Всем доброго времени суток.

Подскажите как проверить. После добавления записи в конец таблици (Append) существует там такая-же запись или нет?

Есть ли для этого специальный метод?

Спасибо.


 
Павел Калугин ©   (2006-09-21 13:05) [1]

А может логичнее проверять ДО добавления и не плодить дубликатов.


 
zdm ©   (2006-09-21 13:05) [2]

1. Уникальность полей.
2. Программно


 
Johnmen ©   (2006-09-21 13:05) [3]

Каков критерий "такая-же запись"?


 
Sergey13 ©   (2006-09-21 13:05) [4]

После добавления конечно же существует хотя бы одна. 8-)
Может тебе надо ДО проверять? Так это Locate или Select. Если ненужны дубликаты - уникальный индекс построй по полю.


 
zdm ©   (2006-09-21 13:08) [5]

джопустим добавляешь поле Name из компонента Edit
Select Name from Таблица  Where Name=QuotedStr(Edit1.text);
open;
if Fields[0].Asstring="" then такого значения нет, спокойно вноси данные else "данные уже существуют пошли в пень"


 
Desdechado ©   (2006-09-21 13:08) [6]

> колличество одинаковых записей в поле
?!!
в поле нет записей

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


 
zdm ©   (2006-09-21 13:10) [7]


> джопустим

:)


 
Johnmen ©   (2006-09-21 13:31) [8]


> zdm ©   (21.09.06 13:08) [5]
> джопустим добавляешь поле Name из компонента EditSelect
> Name from Таблица  Where Name=QuotedStr(Edit1.text);open;
> if Fields[0].Asstring="" then такого значения нет, спокойно
> вноси данные else "данные уже существуют пошли в пень"


А пока ты проверял, есть или нет, кто-то другой такую запись с таким значением поля добавил? Что делать? :)


 
zdm ©   (2006-09-21 13:33) [9]

а про транзакции ты слыхивал????


 
zdm ©   (2006-09-21 13:36) [10]

блин, я на другой волне PARADOX-же блин, ну ни как тогда!!!


 
zdm ©   (2006-09-21 13:37) [11]


> А пока ты проверял, есть или нет, кто-то другой такую запись
> с таким значением поля добавил? Что делать? :)

Хоть тайм-аут какой-нибудь придумывай, типа, опросил базу-данных нет, еще разок-нет,, ну вноси значения только быстро :)))))


 
zdm ©   (2006-09-21 13:42) [12]


> А пока ты проверял, есть или нет, кто-то другой такую запись
> с таким значением поля добавил? Что делать? :)


Хотя СТОП, если PARADOX, то как-бы это не сетевая БД и какие нахрен "другие вносят значения"?


 
Johnmen ©   (2006-09-21 13:50) [13]


> zdm ©   (21.09.06 13:33) [9]
> а про транзакции ты слыхивал????


Да, где-то что-то такое слышал, краем уха... :)
А что? Они как-то соотносятся с Парадоксом в целом и с [5] в частности?


 
Johnmen ©   (2006-09-21 13:53) [14]


> zdm ©   (21.09.06 13:42) [12]
> Хотя СТОП, если PARADOX, то как-бы это не сетевая БД и какие
> нахрен "другие вносят значения"?


Ну ты, наверное, знаешь, что Парадокс и в сети пользовать можно, не только монопольно...
Да чёрт с ним, с Парадоксом. Ты лучше про [5] и [8] растолкуй...:)


 
zdm ©   (2006-09-21 13:57) [15]


> Да чёрт с ним, с Парадоксом. Ты лучше про [5] и [8] растолкуй.
> ..:)

про [8]. Типа открываешь транзакцию, если конечно БД поддерживает, начинаешь выполнять какие-либо действия с данными базы, и пока не скажешь COMMIT-ни хрена не произойдет, а вот уже непосредственно перед COMMIT делаешь опрос на совпадение, иначе ROLLBACK


 
zdm ©   (2006-09-21 13:58) [16]

а про [5], ты что хотел узнать?


 
Johnmen ©   (2006-09-21 14:08) [17]


> zdm ©   (21.09.06 13:57) [15]
>  а вот уже непосредственно перед COMMIT делаешь опрос на
> совпадение,


Ну сделал ты запрос. Время 00:00:00:000
Получил результаты, проанализировал, принял решение. Время 00:00::00:007
А я в этом промежутке времени вставил и закоммитил запись с тем же значением поля, на которое ты проверял и не нашёл.
Что делать? :)


 
Sergey13 ©   (2006-09-21 14:12) [18]

> [17] Johnmen ©   (21.09.06 14:08)

Ну ты и шустрый. В 7 милисекунд все дело испортил. 8-)


 
zdm ©   (2006-09-21 14:14) [19]

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


 
Johnmen ©   (2006-09-21 14:29) [20]


> ты чего вообще хочешь опровергнуть всю теорию построения
> реляционных БД, что-ли?


Нет. С чего ты взял???
Я всего лишь хочу сказать, что [5] и [15] - вот так никто не делает. Ну из тех, кто знает вышеупомянутую теорию и про эти, как их, транзакции.

>Sergey13 ©   (21.09.06 14:12) [18]

Не, это не я, это сервер :) Я готовился в внесению записи долго, а в указанный промежуток только коммит скомандовал :)


 
zdm ©   (2006-09-21 14:31) [21]


> Johnmen

Не пудри мозги :)


 
vodvorezlaya   (2006-09-21 14:37) [22]


> джопустим добавляешь поле Name из компонента Edit
> Select Name from Таблица  Where Name=QuotedStr(Edit1.text);
>
> open;
> if Fields[0].Asstring="" then такого значения нет, спокойно
> вноси данные else "данные уже существуют пошли в пень"

Ну я понял вроде то, но что даст Name=QuotedStr(Edit1.text);?

А допустим что есть таблица в которой данные Fields[0] повторяются, только в ручную их переименовывать?
(Имею в виду сортировать и в цикле проверять соответствие)


 
zdm ©   (2006-09-21 14:38) [23]


> Я всего лишь хочу сказать, что [5] и [15] - вот так никто
> не делает. Ну из тех, кто знает вышеупомянутую теорию и
> про эти, как их, транзакции.


Хорош стебатся-то, я просто быстро предложил решение, не нравится не кушайте!


 
zdm ©   (2006-09-21 14:41) [24]

Name=QuotedStr(Edit1.text) даст допустим "Иванов Иван Иванович"
а Fields[0] это  для примера, ты говоришь повторяются, так что тебе надо-то чтобы не повоторялись, тогда удали повторяющиеся записи,,, а если нельзя, тогда в запросе говори "select distinct"


 
Johnmen ©   (2006-09-21 14:49) [25]


> Хорош стебатся-то, я просто быстро предложил решение, не
> нравится не кушайте!


Вот автор ветки и скушает. А потом придёт к тебе лицо бить за такие советы.
Спрашивается - тебе это надо?
:)


 
zdm ©   (2006-09-21 15:28) [26]

Блин, я хоть какое-то решение подсказал, а Вы вообще ни чего.
И что плохого в моем решении. Всегда можно опросить и на "чистое"  совпадение и на "похожесть", а уже дальше принимать решение , вносить данные или нет


 
Johnmen ©   (2006-09-21 15:43) [27]


> Блин, я хоть какое-то решение подсказал,


А что толку от кривого решения и кому оно надо?


> а Вы вообще ни чего.


Ну меряться пиписками я с Вами не буду. Видимо Вы сторонник персонажа из известного анекдота:
- У меня две новости, хорошая и плохая.
- Начни с плохой.
- В этом году неурожай, будем жрать г...о.
- А хорошая?
- Г...а много - всем хватит!


 
vodvorezlaya   (2006-09-21 16:00) [28]

А вообще есть в Delphi такой метод Lookup и locate.


 
Сергей М. ©   (2006-09-21 16:05) [29]


> vodvorezlaya   (21.09.06 16:00) [28]


В делфи мно-о-ого еще чего есть)

Ты в [6] вник ?


 
Mike Kouzmine ©   (2006-09-21 16:35) [30]

zdm ©   (21.09.06 15:28) [26]

Johnmen ©   (21.09.06 13:05) [3]
Каков критерий "такая-же запись"?


 
Anatoly Podgoretsky ©   (2006-09-21 21:31) [31]

Sergey13 ©   (21.09.06 14:12) [18]
Законы Мерфи непреодолимы.


 
Lex_! ©   (2006-09-22 06:05) [32]

А что нельзя разве сделать поле уникальным по определению?...
(индексация, без совпадений... )


 
vodvorezlaya   (2006-09-22 08:03) [33]


> Ты в [6] вник ?

Да, но это не первое ключевое поле.
Перед ним ещё два ключевых поля.А с этим третьим ключевым и при попытке дублирования записи не возникает Exception.


 
Сергей М. ©   (2006-09-22 08:34) [34]


> vodvorezlaya   (22.09.06 08:03) [33]


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


 
evvcom ©   (2006-09-22 09:12) [35]

> [24] zdm ©   (21.09.06 14:41)

А тебе нужен в твоем случае просто Иван Иваныч, или все же ты что-то про нормализацию слышал? ID этого Ивана Иваныча получать будешь? И что тогда тебе select distinct даст? Ась? :-)

> [22] vodvorezlaya   (21.09.06 14:37)
> Ну я понял вроде то, но что даст Name=QuotedStr(Edit1.text)

Понял и молодец! Только лучше так не делай. Используй параметры, учись сразу программировать "правильно"!


 
zdm ©   (2006-09-22 09:43) [36]

С уникальностью полей тоже засада бывает.
1. Иванов Иван и иванов иВаН это разные данные для БД.
2. Lexx, про уникальность сразу писали

> evvcom ©  

С параметрами, при запросах с большой вложенностью, бывает засада, хотя я конечно не спорю, что параметры юзать легче и проще.


 
Sergey13 ©   (2006-09-22 09:53) [37]

> [36] zdm ©   (22.09.06 09:43)
> С параметрами, при запросах с большой вложенностью, бывает засада
Какая? И насколько большой должна быть вложенность (вложенность чего, кстати), что бы на нее напороться?


 
Johnmen ©   (2006-09-22 10:09) [38]


> zdm ©   (22.09.06 09:43) [36]
> С уникальностью полей тоже засада бывает.1. Иванов Иван
> и иванов иВаН это разные данные для БД.


Засада бывает у тех, кто не побеспокоился. А кто выставил правильные настройки (напр.не различать регистра) или в структуре таблиц учёл или в клиентском приложении, у того всё комильфо...


 
zdm ©   (2006-09-22 10:51) [39]


> Johnmen ©  

как выставить, различение регистра? правда не нашел, заранее спасибо


 
Johnmen ©   (2006-09-22 10:59) [40]


> zdm ©   (22.09.06 10:51) [39]
> как выставить, различение регистра? правда
> не нашел, заранее спасибо


Для Парадокса никак.
Мы же говорим общё, о серверах БД. Для некоторых это возможно....


 
zdm ©   (2006-09-22 11:04) [41]

ну в FB, с помощью IBExpert как?


 
Johnmen ©   (2006-09-22 11:24) [42]

В IB/FB/YA регистр всегда различается, отключить нельзя. Хотя, м.б. в последней версии ФБ что-то есть на эту тему.
Если интересно, сходи на ibase.ru, там море инфы.


 
zdm ©   (2006-09-22 11:29) [43]


> Johnmen ©  

Спасибо, правда, но блин времени нет, хотя конечно ibase.ru форева.. простото если можно, заранее прошу прощения у автора, как создать, "чувствительность к регисьру"?


 
zdm ©   (2006-09-22 11:30) [44]


>
> Johnmen ©

Не отвичай все нашел, спасибо, извините за лень


 
Сергей М. ©   (2006-09-22 11:33) [45]


> zdm ©   (22.09.06 11:04) [41]
> ну в FB.. как?


Без специальных дополнительных "телодвижений" - никак.
Можно, к примеру, дополнить таблицу уникально индексированным полем хэш-кода для строкового поля, требующего регистронезависимую уникальность.
Пишется (или используется готовая) UDF, на вход которой подается строка, а на выходе которой формируется регистронезависимый 32-х или 64-хразрядный код для этой строки. Остается подключить эту UDF в триггерах на вставку/обновление.


 
vodvorezlaya   (2006-09-25 08:20) [46]

А на SQL как то можно?


 
Сергей М. ©   (2006-09-25 09:02) [47]


> vodvorezlaya   (25.09.06 08:20) [46]


Ты о чем ?


 
vodvorezlaya   (2006-09-25 09:08) [48]


> Сергей М. ©   (25.09.06 09:02) [47]

Ну например создать промежуточную таблицу, 1-й столбик это возможно повторяющееся значение, а второй столбик - сколько это значение раз повторилось.

P.S. Такое сделать можно, только с полями соответствия (при помощи SQL Builder"а я делал) Узнаешь сколько раз ссылается одно поле на другое.
Код могу привести.


 
Сергей М. ©   (2006-09-25 09:25) [49]


> vodvorezlaya   (25.09.06 09:08) [48]


Ну  и зачем это надо ?

См. [45] ...Но только в случае с Парадоксом вычислением хэша должна заниматься не серверная, а клиентская сторона.

var
 StrValue: String;
 HashCode: Integer;
..

 HashCode := GetHashCodeOfString(StrValue);
 SQLInsertStatement := "INSERT INTO MyTable(SomeStrField, HashCode) VALUES(" + QuotedStr(StrValue) + "," + IntToStr(HashCode) + " )"


 
vodvorezlaya   (2006-09-25 09:39) [50]


> Ну  и зачем это надо ?

Для подсчёта статистики.

[45] а без хешей никак?

Да там намного проще

там повторяющийся столбик типа SmallInt в котором всего то от 1 до 99 диапазон.

И нужно создать таблицу в Query чтоб отображала колличество записей под номером 1,2,3..99.

FieldByName("Nomer"); - unique;
FieldByName("Kolichestvo");


 
Sergey13 ©   (2006-09-25 09:46) [51]

> [50] vodvorezlaya   (25.09.06 09:39)
> И нужно создать таблицу в Query чтоб отображала колличество записей под номером 1,2,3..99.
Достаточно книжку почитать про SQL.


 
Сергей М. ©   (2006-09-25 09:47) [52]


> vodvorezlaya   (25.09.06 09:39) [50]



> FieldByName("Nomer"); - unique;


> колличество записей под номером 1,2,3..99


При наличии активного уник.индекса по полю "Nomer" кол-во записей под любым "номером" всегда будет не более одной.


 
vodvorezlaya   (2006-09-25 09:51) [53]


> При наличии активного уник.индекса по полю "Nomer" кол-во
> записей под любым "номером" всегда будет не более одной.
>

Номера не повторяются, а колличество записей могут совпадать.


> Достаточно книжку почитать про SQL.

Да знаю, это на будущее.


 
Sergey13 ©   (2006-09-25 09:53) [54]

> [53] vodvorezlaya   (25.09.06 09:51)
> Да знаю, это на будущее.
Обычно - сначала образование, потом применение этого образования. Если наоборот - это изврат.
ИМХО.


 
ЮЮ ©   (2006-09-25 09:55) [55]

SELECT Nomer,  COUNT(Nomer)  Kolichestvo From Table GROUP BY  Nomer

P/S/ Этот форум - не ликбез. Справку хотя бы почитай.


 
Сергей М. ©   (2006-09-25 09:58) [56]


> vodvorezlaya   (25.09.06 09:51) [53]


> колличество записей могут совпадать


С чем совпадать ?


 
vodvorezlaya   (2006-09-25 10:12) [57]

off top: Кто-то знает в нете где можно скачать книгу по SQL?


 
Sergey13 ©   (2006-09-25 10:13) [58]

> [57] vodvorezlaya   (25.09.06 10:12)

Все знают. А когда не знают - ищут поисковиками.



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

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

Наверх




Память: 0.6 MB
Время: 0.172 c
3-1158849383
evgenij_
2006-09-21 18:36
2006.11.26
Rave Report+Access


2-1162888716
V.I.P
2006-11-07 11:38
2006.11.26
выборка по дате


5-1144146527
Megabyte
2006-04-04 14:28
2006.11.26
Добавление нового события


15-1162569968
ArtemESC
2006-11-03 19:06
2006.11.26
Устанавливаю FreeBsd...


2-1162793491
daser
2006-11-06 09:11
2006.11.26
Как сделать, чтоб при нажатии на заголовок поля в DBGrid e или





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский