![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема при удалении данных из таблицы [D7, dBase, FoxPro]
Jet © (2004-05-31 16:51:00)Есть код:
--
if (Form2.temp.RecordCount > 0 ) then
begin
Form2.temp.First;
for i := 1 to Form2.temp.RecordCount do
begin
Form2.temp.Delete;
Form2.temp.Next;
end;
end;
--
После выполнения пишет, что кол-во записей = 0, но в DB-viewere
показывает все записи, но только помеченные для удаления и физический размер файла прежний.
Как реально удалить записи из таблицы?
Jet (2004-05-31 22:27:00) [1]Всем спасибо, с утра попробую.
Anatoly Podgoretsky (2004-05-31 22:24:00) [2]Так и делают
Jet (2004-05-31 22:17:00) [3]Anatoly Podgoretsky ©
--
А можно перед очисткой включить эксклюзивный режим, очистить таблицу, а потом выключить его?
Anatoly Podgoretsky (2004-05-31 21:26:00) [4]YurikGL © (31.05.04 18:05) [15]
Не то
Jet © (31.05.04 18:13) [16]
Так для упаковки тоже нужен монопольный доступ, кроме того если ты хочишь очистить всю таблицу, то emptytable оптимальнее. Результат пустая таблица, почти мгновенно, по крайней мере глазами не заметишь.
Jet (2004-05-31 18:13:00) [5]BDE.
temp - таблица
--
emptytable - доступ не эксклюзивен, не поможет
Как я понял нужно сдлеать упаковку для удаления помеченных записей?
YurikGL (2004-05-31 18:05:00) [6]
> Как реально (физически) удалить записи из таблицы?
SQL - коммандой.
Anatoly Podgoretsky (2004-05-31 17:49:00) [7]Курдль © (31.05.04 17:42) [12]
Недостаточно информации, что бы это советовать, может стоять фильтр. Но если действительно надо очистить таблицу, то это лучший метод, конечно если сделать предположение, что это БДЕ, пока ни в одной его ветке нет информации о движке.
Vlad © (31.05.04 17:43) [13]
Не будут он же написал, что привел не тот код и мало еще чего он нам не сказал.
Vlad (2004-05-31 17:43:00) [8]
> YurikGL © (31.05.04 17:37) [10]
Если имеется ввиду это, то тут по-любому записи будут удаляться через одну. До тех пор пока не Eof, а далее в обратном порядке.
Курдль (2004-05-31 17:42:00) [9]А нехило бы объяснить, что такое Form2.temp!
И какая конечная цель?
Судя по декларации "dBase FoxPro" temp может быть TTable.
А судя по for i := 1 to Form2.temp.RecordCount doцель - очистка таблицы. Так может быть совершитьForm2.temp.EmptyTable?
Anatoly Podgoretsky (2004-05-31 17:40:00) [10]YurikGL © (31.05.04 17:37) [10]
EOF здесь не нужен, могут быть конечно другие непрятности при работе в сети.
YurikGL (2004-05-31 17:37:00) [11]
> > for i := 1 to Form2.temp.RecordCount do
> > begin
> > Form2.temp.Delete;
> > Form2.temp.Next;
> > end;
И где здесь EOF?
:)
Vlad (2004-05-31 17:35:00) [12]
> YurikGL © (31.05.04 17:31) [8]
Когда доходит до конца, свойство Eof принимает значение true и цикл прекращается
YurikGL (2004-05-31 17:31:00) [13]Vlad © (31.05.04 16:53) [2]
Через одну, он записи не удаляет, просто когда курсор доходит до конца, он удаляет каждый раз последнюю запись.
Vlad (2004-05-31 17:23:00) [14]
> Jet © (31.05.04 17:17) [5]
Delete срабатывает.
Если ты не знаком с работой DBF - так и скажи.
Записи не удаляются физически, они только помечаются к удалению.
Чтобы удалить их физически, нужно сделать упаковку таблицы.
Как ? Читай Vlad © (31.05.04 16:52) [1]
Anatoly Podgoretsky (2004-05-31 17:21:00) [15]А совет [1] не помог, а другого не будет, это единственный по укаковке, кроме персоздания таблиц с нуля.
Jet (2004-05-31 17:17:00) [16]Да delete не срабатывает, я ведь описал выше. А next забыл здесь стереть в проге без нее.
--
После выполнения пишет, что кол-во записей = 0, но в DB-viewere
показывает все записи, но только помеченные для удаления и физический размер файла прежний.
Как реально (физически) удалить записи из таблицы?
Sandman25 (2004-05-31 17:12:00) [17][3] YurikGL © (31.05.04 17:10)
Тогда уже либо
for I := 1 to RecordCount do
Delete;
либо
while not Eof do
Delete
YurikGL (2004-05-31 17:10:00) [18]if (Form2.temp.RecordCount > 0 ) then
repeat
Form2.temp.Delete;
until Form2.temp.eof
Vlad (2004-05-31 16:53:00) [19]
> for i := 1 to Form2.temp.RecordCount do
> begin
> Form2.temp.Delete;
> Form2.temp.Next;
> end;
Так ты через одну удаляешь
а вот так все:
while not Form2.temp.Eof do Form2.temp.Delete
Vlad (2004-05-31 16:52:00) [20]
> Jet © (31.05.04 16:51)
DbiPackTable