Форум: "Базы";
Текущий архив: 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)
Класс, работает просто обалденно !
Быстро, просто и правильно !
Ай да модератор, ай молодец :-) !
Отлично, рульный вариат !
Всем спасибо !
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c