![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Огромное мерси, сейчас попробую что нить сотворить с этим
|
|
#4
|
|||
|
|||
|
блин, не получается....
Как написать нужно? ADOTable1.SQL := select Link from rss group by link having Count(Link)>1 или как? |
|
#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; |
|
#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 уникальное, то в базу не будут добавляться те-же ссылки. так? если так, то как сделать поле линк уникальным? я в свойствах не наше такого параметра (( |
|
#9
|
||||
|
||||
|
Вы работаете с Акцесовской базой. Запустите Акцесс, откройте вашу БД, выберите конструктор для таблицы rss, выберите комманду Индексы. Создайте новый индекс для поля Link и задайте ему свойство Уникальный.
Теперь сам Акцесс будет следить за тем, что-бы в поле Link непопадали повторяющиеся значения, и при попытке внести такое значение он будет генерить ошибку. Сохраните структуру таблицы. |
|
#10
|
|||
|
|||
|
я понимаю, что это акцессовская база... но сам акцесс за ней следить не будет потому что у меня вообще офиса нет никакого, а БД создана средствами дельфи...
Хотя идею понял, сейчас офис установлю, может что получится... |
|
#11
|
||||
|
||||
|
Следить будет Jet через который вы к БД обращаетесь, Акцесс делает так-же.
|
|
#12
|
||||
|
||||
|
Цитата:
Код:
delete from rss where id in (select Max(id) from rss group by Link having Count(Link)>1) |
|
#13
|
|||
|
|||
|
спасибо, попробую
|