Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.25;
Скачать: CL | DM;

Вниз

Приветствую Мастеров ! Как удалять одинаковые строки в базе 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
3-80738
Olex
2002-04-05 21:36
2002.04.25
Как убрать запрос логина и пароля при обращении к БД Аксес...


14-81047
undersun
2002-03-13 17:21
2002.04.25
Как выбрать устройство через которое надо соед. по TCP/IP


1-80842
Schummi
2002-03-30 08:12
2002.04.25
В чем error?


3-80744
Lego
2002-04-02 02:35
2002.04.25
Наверное глупый вопрос... но все-же... какие файлы нужны клиенту?


6-81014
bg8
2002-02-13 18:13
2002.04.25
Нужен WEB Сервер для WindowsME