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

Вниз

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

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

Наверх




Память: 0.62 MB
Время: 0.031 c
4-1152858810
Mamed
2006-07-14 10:33
2006.11.26
rapi. delete file


3-1158748245
Alek_1
2006-09-20 14:30
2006.11.26
Вопрос по безопасности..


2-1163097167
kassel
2006-11-09 21:32
2006.11.26
ПЛИЗ HELP!!!


2-1162970915
malefik
2006-11-08 10:28
2006.11.26
Tthread и с чем его едят?


2-1163094373
yuraspb
2006-11-09 20:46
2006.11.26
У кого какие мысли?