![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Всем доброго времени суток.
Вот какая проблема: Работаю в delphi 7 данные хранятся в файле .mdb, через ADOgrid, ADOTable и остальные компоненты ADO. в таблице rss есть поле link мне нужно чтобы по этому полю искались дубликаты, проще говоря чтобы в этой таблице не было повторяющихся записей, а проверять это получится только по полю link, потому что ссылка уникальна, а остальные поля, такие как Тема - не уникальны Не могу понять как это сделать помогите... толи свойство для таблицы задать нужно, толи запрос какой написать... не понимаю я... в программе просто этот кусок кода не мой, я ни с Адо, ни с запросами не знаком... |
#2
|
||||
|
||||
![]() Отобрать все дубликаты в таблице rss можно так:
Код:
select Link from rss group by link having Count(Link)>1 Код:
delete Link where id in (select Max(id) from rss group by Link having Count(Link)>1) Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Огромное мерси, сейчас попробую что нить сотворить с этим
www.forumforall.net - Мы создаем общение! |
#4
|
|||
|
|||
![]() блин, не получается....
Как написать нужно? ADOTable1.SQL := select Link from rss group by link having Count(Link)>1 или как? www.forumforall.net - Мы создаем общение! |
#5
|
||||
|
||||
![]() Ну вы хоть с синтаксисом немножко ознакомьтесь.
Код:
ADOTable1.SQL.text := 'select Link from rss group by link having Count(Link)>1'; ADOTable1.Open; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
![]() неа, в обоих примерах выдает ошибку
[Error] Unit1.pas(362): Incompatible types: 'TStrings' and 'String' Пишу так: Код:
ADOQuery1.SQL := 'delete Link where id in (select Max(id) from rss group by Link having Count(Link)>1)'; ADOTable1.Open; www.forumforall.net - Мы создаем общение! |
#7
|
||||
|
||||
![]() Цитата:
Код:
ADOQuery.SQL.Text := 'select Link from rss group by link having Count(Link)>1'; ADOQuery.Open; Что-бы удалить уже имеющиеся дубликаты я вам дал второй код: Код:
ADOQuery.SQL.Text := 'delete Link where id in (select Max(id) from rss group by Link having Count(Link)>1)'; ADOQuery.ExecSQL; Теперь вы уже хотите проверять данные перед вставкой на дубликаты, а это уже третий запрос. Третьего запроса можно избежать, если вы на таблицу rss построите уникальный индекс по полю Link, но создать уникальный индекс на данные содержащие повторяющиеся значения невозможно, поэтому прежде чем его создать пропустите свои данные через запрос на удаление, о котором я писал чуть выше. Об этом я писал вам в теме из раздела БД. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 05.04.2009 в 12:42. |
#8
|
|||
|
|||
![]() Ну не знаю я как это делается...
как вот: допустим что база пустая. если поле link уникальное, то в базу не будут добавляться те-же ссылки. так? если так, то как сделать поле линк уникальным? я в свойствах не наше такого параметра (( www.forumforall.net - Мы создаем общение! |
#9
|
||||
|
||||
![]() Вы работаете с Акцесовской базой. Запустите Акцесс, откройте вашу БД, выберите конструктор для таблицы rss, выберите комманду Индексы. Создайте новый индекс для поля Link и задайте ему свойство Уникальный.
Теперь сам Акцесс будет следить за тем, что-бы в поле Link непопадали повторяющиеся значения, и при попытке внести такое значение он будет генерить ошибку. Сохраните структуру таблицы. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#10
|
|||
|
|||
![]() я понимаю, что это акцессовская база... но сам акцесс за ней следить не будет потому что у меня вообще офиса нет никакого, а БД создана средствами дельфи...
Хотя идею понял, сейчас офис установлю, может что получится... www.forumforall.net - Мы создаем общение! |
#11
|
||||
|
||||
![]() Следить будет Jet через который вы к БД обращаетесь, Акцесс делает так-же.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#12
|
||||
|
||||
![]() Цитата:
Код:
delete from rss where id in (select Max(id) from rss group by Link having Count(Link)>1) Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#13
|
|||
|
|||
![]() спасибо, попробую
www.forumforall.net - Мы создаем общение! |