Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-81000
stormick
2002-04-12 19:35
2002.04.25
Кнопка на рабочем столе....


1-80953
UnDISCOvery
2002-04-11 13:12
2002.04.25
Подскажите, что за ошибка ? Как лечить ?


1-80986
kimblch
2002-04-10 02:29
2002.04.25
Вопрос по OLE-Automation(ранние связывание)


14-81046
lipskiy
2002-03-19 21:45
2002.04.25
По поводу XP и убитого винта - шутка дубль два или что это?


3-80823
Alexandr_
2002-04-05 15:00
2002.04.25
ODAC. Проблема с чтением из BLOB





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский