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




Вниз

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


IronHawk   (2002-04-02 11:34) [0]

НО: нельзя сортировать данные, нельзя сдвигать одинаковые строки перед удалением в конец базы, нельзы оставлять пустые строки после удаления!
Дано 2:
Есть база GUP.dbf (с 12 столбцами и от 1 до 80 строк)и файло с индексами idkey.ndx !
Это должно упростить задачу !

... заранее длагодарен !



sniknik   (2002-04-02 11:50) [1]

перебор табдици для каждой записи и сравнение на одинаковость. но Locate и др. используют индексы даже если ты этого не хочеш. смягчи требования иначе задача решения не имеет.



IronHawk   (2002-04-02 11:54) [2]


> sniknik © (02.04.02 11:50)

Немогу смягчать, то что идёт после "НО" и до "Дано 2" игнорить нельзя, иначе задача неимеет смысла !



sniknik   (2002-04-02 12:16) [3]

простой перебор
RecNo:= 1;
while not Table.eof do begin
... сохранить запись
Table.Next;
while not eof do begin
if (запись равна сохраненной) then Удалить;
Table.Next;
end
RecNo:= RecNo+1;
Table.Goto(RecNo);
Table.Next;
end
примерно так. совсем без индексов но заколебешся ждать при более менее большой таблице.



sniknik   (2002-04-02 12:24) [4]

Сорри за небольшие ошибки, смысл думаю ясен.



fnatali   (2002-04-02 12:28) [5]

В добавление к sniknik:
Можно сделать запрос select DISTINCT ....
и потом
query1.first;
while not query1.eof do begin
...
может, чуть быстрее будет.



IronHawk   (2002-04-02 12:36) [6]


> sniknik © (02.04.02 12:16)

Спасибо!

> sniknik © (02.04.02 12:24)
> Сорри за небольшие ошибки, смысл думаю ясен.

Я тож так думаю .... :-)

> fnatali © (02.04.02 12:28)

Немного быстрее, но скорость на такой базе - некритична.
Лучше больше дисковых операций, чем сьедание памяти !



IronHawk   (2002-04-02 13:18) [7]

Всем спасибо !
Трабл урегулирован, благодаря добрым людям!

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



panov   (2002-04-04 10:54) [8]

Вот пример для удаления одинаковых записей в таблице, состоящей только из текстовых полей без использования TQuery и индексов.

procedureTForm1.Button1Click(Sender: TObject);
var
index,i: Integer;
s: String;
tL1 : TStringList;
begin
tL1 := TStringList.Create;
try
Table1.First;
while not Table1.Eof do
begin
s := "";
for index := 0 to Table1.FieldCount-1 do
begin
s := s + Table1.Fields[index].AsString;
end;
tL1.Add(s);
Table1.Next;
end;

for index := 0 to tL1.Count-1 do
begin
if Integer(tL1.Objects[index]) <> 0 then Continue;
tL1.Objects[index] := Pointer(2);
for i := 0 to tL1.Count-1 do
begin
if ( (tL1[i] = tL1[index]) and (index<>i)) then tL1.Objects[i] := Pointer(1);
end;
end;

Table1.Last;
index := tL1.Count-1;
while not Table1.Bof do
begin
if Integer(tL1.Objects[index]) <> 1 then
begin
Table1.Prior;
end
else Table1.Delete;
Dec(Index);
end;
finally
tL1.Free;
end;
end;



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


> panov © (04.04.02 10:54)

Класс, работает просто обалденно !
Быстро, просто и правильно !
Ай да модератор, ай молодец :-) !

Отлично, рульный вариат !

Всем спасибо !




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




Наверх





Память: 0.73 MB
Время: 0.04 c
1-80996           Chistyakov            2002-04-12 18:28  2002.04.25  
RxTrayIcon


1-80894           f0rm                  2002-04-14 15:19  2002.04.25  
Нужна процедура загрузка и сохранения item ов в listview e


1-80966           UnDISCOvery           2002-04-10 16:42  2002.04.25  
А как нарисовать на форме


1-80948           panCRACKERov          2002-04-12 00:40  2002.04.25  
Как сделать ссылку на сайт в hlp файле?


14-81071          Алексей Петров        2002-03-18 16:54  2002.04.25  
Периодически пролетает