Физическое удаление записей в таблице?
Такой трабл:
я ставлю фильтр на таблицу, в результате выводятся необходимые мне строки, дальше эти строки необходимо удалить, циклом бежать по всем строкам нет смысла, так как на удаление 85 000 строк надо где то 84 часа ))))
подскажите как удалить очень много строк, которые отфильтрованы ?
Засунуть фильтр в SQL запрос и удалить.
Цитата: IL84
Засунуть фильтр в SQL запрос и удалить.
а что если делать через запрос то строки физически будут удалены???
потомучто если делать стандартно допустим так : Table1->EmptyTable();
то реально записи не удаляются, а только помечаются как удаленные((((((
Код:
DELETE FROM table WHERE ....
удалит записи какие надо. Про физическое удаление ничего сказать не могу, т.к. все БД работают по разному: кото-то помечает как удаленные, кто-то удаляет запись, но выделенное под нее место оставляет и т.д.
Цитата: IL84
Во-первых, что за БД? Во-вторых запрос вида
удалит записи какие надо. Про физическое удаление ничего сказать не могу, т.к. все БД работают по разному: кото-то помечает как удаленные, кто-то удаляет запись, но выделенное под нее место оставляет и т.д.
Код:
DELETE FROM table WHERE ....
удалит записи какие надо. Про физическое удаление ничего сказать не могу, т.к. все БД работают по разному: кото-то помечает как удаленные, кто-то удаляет запись, но выделенное под нее место оставляет и т.д.
я работаю в
FoxPro
через
BDE
странно написал запрос:
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("DELETE FROM PROV.DBF");
Query1->SQL->Add("WHERE odat='27.04.2007'");
Query1->Open();
Query1->Close();
он правильный, но выбивает при выполнении ошибку operator/operand type mismatch .'.
что за бок непонятно ((((((
Возможно что-то с датой. В Oracle например строка '27.04.2007' не канает, надо приводить к дате через TO_DATE().
Универсальный, ИМХО, способ - использование параметров.
А, вообще, я бы написал так:
Код:
DELETE FROM PROV.DBF WHERE odat = #27/04/2007#
И еще, Open годится тоько для запросов, возвращающих строки, а для остальных - ExecSQL
void __fastcall TForm1::Button7Click(TObject *Sender)
{
while (!Table1->Eof)
{
Table1->Edit();
Table1->Delete();
Table1->Edit();
Table1->Post();
if (Table1->Eof){break;}
}
}
работает медленно ((( (у меня база 29 метров), но зато работает, программно паковать таблицу не получилось, поэтому открываю таблицу в Database Desktop нажимаю паковать и сохранить!
темма закрыта!!!