Текущий архив: 2004.05.30;
Скачать: CL | DM;
ВнизУдаление некоторых записей Найти похожие ветки
← →
Demoniak © (2004-05-05 11:20) [0]Надо удалить все записи содержащие подстроку "Bad" в таблице... Я делаю так, но удаляется только первая запись содержащая нужную подстроку...
dbf.DisableControls;
dbf.First;
try
while not dbf.Eof do begin
if (pos("Bad", dbf.FieldByName("socksstat").AsString ) <> 0) then begin
dbf.Delete;
end;
dbf.Next;
application.ProcessMessages;
end;
finally
dbf.EnableControls;
dbf.First;
end;
← →
Johnmen © (2004-05-05 11:31) [1]else dbf.Next;
Убрать application.ProcessMessages;
← →
Sergey13 © (2004-05-05 11:35) [2]Как вариант
delete from dbf_table
where socksstat like "%Bad%"
← →
Demoniak © (2004-05-05 11:47) [3]2 Johnmen © :
Вот так, тоже не работает:
dbf.DisableControls;
dbf.First;
try
while not dbf.Eof do begin
if (pos("Bad", dbf.FieldByName("socksstat").AsString ) <> 0) then begin
dbf.Delete;
end else dbf.Next;
// application.ProcessMessages;
end;
finally
dbf.EnableControls;
dbf.First;
end;
2 Sergey13 © :
Не могу так сделать, т.к. я не использую BDE и компонент Query соответственно тоже....
← →
Johnmen © (2004-05-05 11:53) [4]>Demoniak © (05.05.04 11:47) [3]
>Вот так, тоже не работает:
Значит только первая запись удовлетворяет условию...
← →
Demoniak © (2004-05-05 11:54) [5]2 Johnmen © :
Нет )) Там видно в ДБГриде, что еще штук 20 точно с таким условием...
← →
Sergey13 © (2004-05-05 11:55) [6]2Demoniak ©
Посмотри на регистр символов. Может тут что.
← →
Курдль © (2004-05-05 12:01) [7]Выбран методически неверный способ. Нельзя одновременно двигаться по набору данных и удалять его записи. Вам дали простой и изящный метод решения проблемы в [2] - ему и следуйте.
Если уж совсем невмоготу, как хочется попользоваться методом delete, то сначала отфильтруйте весь набор данных по Вашему условию, а потом уж пройдитесь по нему и удалите все, что видно.
← →
Demoniak © (2004-05-05 12:07) [8]2 Sergey13 ©
Регистр такой же...
2 Курдль ©
Я уже говорил, что НЕ могу использовать SQL запросы... А фильтровать БД - не подходит, надо чтоб ненужные записи были физически удалены...
← →
sniknik © (2004-05-05 12:12) [9]в dBase, FoxPro Delete не удаляет физически, и sqd не удаляет и твой метод тоже.
← →
Соловьев © (2004-05-05 12:28) [10]
> подстроку "Bad"
у меня было такое что оператор(руки бы поотрывал) писал вместо русских символов английские и наоборот, благо выглядят одинаково. В твое ситуации надо попробовать разные комбинации букв - русских В,а и английских - B,a
← →
Курдль © (2004-05-05 12:32) [11]
> Я уже говорил, что НЕ могу использовать SQL запросы... А
> фильтровать БД - не подходит, надо чтоб ненужные записи
> были физически удалены...
Я разве сказал "спрятать"? Я сказал: "отфильтровать и поудалять оставшиеся"!
← →
Demoniak © (2004-05-05 13:11) [12]Ясно) Я в общем делаю так:
dbf.DisableControls;
dbf.First;
try
while dbf.Locate("socksstat", "Bad", [loCaseInsensitive, loPartialKey]) do begin
dbf.Delete;
application.ProcessMessages;
end;
finally
dbf.EnableControls;
dbf.First;
end;
Все удаляется нормально, НО!! После удаления ненужных записей, DBGrid неправильно отображает данные. А именно: скроллбар как-бы быстрее прокручивается там, где были ненужные записи ). Сложно это объяснить однако, в общем скол глючит как-то странно...
← →
Demoniak © (2004-05-05 13:13) [13]Например, если удаляться первые 100 записей из скажем 1000, то ползунок скроллбара вообще будет не в начале скроллбара, даже при установки активной первую запись..
← →
Кщд (2004-05-05 13:27) [14]запакуем после удаления?
Delphi syntax
function DbiPackTable (hDb: hDBIDb; hCursor: hDBICur; pszTableName: PChar; pszDriverType: PChar; bRegenIdxs: Bool): DBIResult stdcall;
Description
DbiPackTable optimizes table space by rebuilding the table associated with hCursor and releasing any free space.
← →
Demoniak © (2004-05-05 13:40) [15]Все- сделал сенкс
Страницы: 1 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.035 c