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




Вниз

Приветствую Мастеров ! Как удалять одинаковые строки в базе? 


IronHawk   (2002-03-29 15:48) [0]

Сабж !

А так подходит ? :


CurrRecNo:=1;
with TQuery.Create(nil) do
begin
DataBaseName:=Table2.DataBaseName;
SQL.Add("select distinct * from "{" SELECT ID FROM *"}+Table2.TableName);
Open;
while Locate("ID",CurrRecNo,[]) do inc(CurrRecNo);
Close;
Free;
end;



vopros   (2002-03-29 16:12) [1]

Удалено модератором



Anatoly Podgoretsky   (2002-03-29 16:28) [2]

distinct говорит от том, что в полученном наборе не будет одинаковых строк



vopros   (2002-03-29 16:29) [3]

Лучше их туда не давать вставлять.Самый эффективный метод.



IronHawk   (2002-03-29 17:05) [4]


> vopros © (29.03.02 16:29)
> Лучше их туда не давать вставлять.Самый эффективный метод.

А этот пример обрабатываеться после недатия вставляния !



Anatoly Podgoretsky   (2002-03-29 17:08) [5]

Тогда зачем его выполнять?



IronHawk   (2002-03-29 17:15) [6]


> Anatoly Podgoretsky © (29.03.02 17:08)
> Тогда зачем его выполнять?

Для проверки и устранения ошибок предыдущего !



to ALL
... у кого есть дельные предложения ?



IronHawk   (2002-04-01 10:42) [7]

И как при этом эти данные, не перебрасывать в соседнюю базу, а в этой ЖЕ ?



Johnmen   (2002-04-01 10:59) [8]

>IronHawk © : Ты воистину неординарный человек и общение с тобой и чтение твоих диалогов доставляет огромнейшую кучу радости !!!!!!!!!!!!!!!



IronHawk   (2002-04-01 12:12) [9]


> Johnmen ©

Создаём ветку в "Потрепаться" и туда вставляем свои комментарии,
а тут пожалуйста ПО ДЕЛУ !



Lusha   (2002-04-01 16:12) [10]

Для проверки можно использовать следующий запрос...

select id from table1
group by id
having count(id) > 1;



kan351   (2002-04-01 16:16) [11]

попробуй Batchmove(batdelete)



IronHawk   (2002-04-01 16:54) [12]


> Lusha ©

Спасибо, но неработает !


> kan351 ©

Спасибо, но аналогично > Lusha © (01.04.02 16:12)



Reindeer Moss Eater   (2002-04-01 17:38) [13]


var SourceQuery:TQuery;
DestTable:TTable;
begin
SourseQuery.SQL.Text:="Select Distinct(..... From OldTableName";
SourseQuery.Open;
DestTable.TableName:=NewTableName;
DestTable.BatchMove(SourceQuery,batCop);
SourceQuery.Close;
SourceQuery.Database.Execute("Drop table OldTableName");
end;



panov   (2002-04-01 18:05) [14]

>IronHawk © (29.03.02 15:48)
Ответь на вопрос:
А что ты понимаешь под одинаковыми строками?



IronHawk   (2002-04-01 18:15) [15]


> Reindeer Moss Eater (01.04.02 17:38)

Круто, сработало !
Но оно накойто, отсортировало мне, а этого низЯ !

> panov © (01.04.02 18:05)

Это когда в таблице из 11 столбцов и 50 строк
есть строки в которых все значениях во всех столбцах одинаковые !



Lusha   (2002-04-02 09:50) [16]

Ну, тогда попробуйте так...


var Query : TQuery;
begin
Query := TQuery.Create(Self);
Query.SQL.Text := "select field1, field2 ... from table group by field1, field2... having count(field1) > 1"; { вместо многоточия все поля. Да, и никаких запятых перед фразами having и group by, а то опять скажете, что запрос нерабочий}
Query.Open;
with Query do
begin
while not Eof do
begin
if Table.Locate("field1;field2;...", VarArrayOf(FieldByName("Field1").AsString...), []) then
begin
Table.Delete;
Table.Post;
end;
Next;
end;
end;
Query.Free;
end;

P.S. Гм-м. Кошмар. Хотя, какая задача, такое и решение...



IronHawk   (2002-04-02 10:35) [17]


> Lusha © (02.04.02 09:50)

Спасибо !

> if Table.Locate("field1;field2;...", VarArrayOf(FieldByName("Field1").AsString...),
> []) then

Компилятор это непропускает как масив, исправлю скажу как прошло !



IronHawk   (2002-04-02 10:51) [18]


> Lusha © (02.04.02 09:50)
> Ну, тогда попробуйте так...

Круто, всё заработало, но опять сортирует :-( !

У меня уже есть 4-типа реально работающего кода, и все сортируют!

А мне сортировки нельзя !!!



IronHawk   (2002-04-02 13:17) [19]

Всем спасибо !
Трабл урегулирован !

Если появяться глюки обязательно напишу :-))) !




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




Наверх





Память: 0.74 MB
Время: 0.024 c
6-69942           Davile                2002-02-07 15:56  2002.04.22  
TClientSocket


3-69657           Andr                  2002-04-03 10:11  2002.04.22  
пароль к БД на Парадоксе


3-69697           Den_ccc               2002-03-30 07:12  2002.04.22  
навигация по таблицам


7-70050           AntBofh               2002-01-23 22:09  2002.04.22  
COM порт ... и мой ... Модем


1-69870           Aleksandr             2002-04-08 16:53  2002.04.22  
Млин, это прикол MS ODBC или АДО-компоненты?