![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как удалить все записи из таблицы [D6, Paradox]
maxim2 © (2002-06-11 11:01:00)Привет всем!
Пишу так Form1.table1.emptytable а он выдает ошибку типа
Table cannot be opened for exlusive use.
Что делать?
Johnmen (2002-06-13 13:38:00) [1]>Val © : Вот-вот !!! К тому же отягощенный нежеланием читать предыдущие посты....
Val (2002-06-13 13:35:00) [2]Пошел флейм :)
Гюли (2002-06-13 13:32:00) [3]>Если неохота использовать запросы, то
>While not Table1.Eof Do Table1.Delete;
to Vladislav
Дело в том, что этот способ удаляет записи из таблицы последовательно и время опустошения таблицы прямопропорционально количеству записей в таблице. Далее, размер таблицы не уменьшается, а остаётся тем же. Поэтому самый лучший способ, если нужно просто опустошить таблицу именно метод Empty класса TTable. После выполнения этого метода получается новенькая, абсолютно идентичная, пустая табличка. Единственное ограничение в этом методе - это необходимость эксклюзивного доступа к этой таблице.
Vladislav (2002-06-13 13:12:00) [4]Что тут мудрить.
Если неохота использовать запросы, то
While not Table1.Eof Do Table1.Delete;
Хотя, я бы использовал бы запрос.
Гюли (2002-06-13 13:09:00) [5]Насколько я знаю, метод Empty для TTable работает гораздо быстрее, чем запрос на удаление всех записей в таблице (я имею в виду таблицы парадокс в частности). Дело в том, что в этом случае происходит что-то вроде того, что удаляется данная таблица и создаётся новая такая же, но пустая, а как раз для этого и нужен монопольный доступ. Может быть и не удаляется таблица, а просто изменяется информация в заголовке о количестве записей в таблице и изменяется размер файла таблицы, ну и соответственно и с индексами происходят соответствующие преобразования. Для выполнения этого метода в BDE есть специальная функция.
Johnmen (2002-06-13 12:33:00) [6]>Sokol © (13.06.02 12:31)
>А еще лучше создать Stored Proc и вызвать ее через
>TStoredProc...;)
Ага, в Paradox"е :)))))))))
Sokol (2002-06-13 12:31:00) [7]А еще лучше создать Stored Proc и вызвать ее через TStoredProc...;)
Жадность программиста - Select * from *
Расточительность программиста - Delete from *
Johnmen (2002-06-13 10:40:00) [8]Да и зачем вообще все это понаписано, если автору надо реально удалять все записи, а не просто помечать их как удаленные...
Val (2002-06-13 10:36:00) [9]>Илья Б. (12.06.02 19:04)
правда долго...
Потому что отсутствует понимание происходящего. Зачем, например, выполнять Table1.Edit; и Table1.Post; ???
Voland_s (2002-06-12 19:48:00) [10]Delete from Table1
и все будет работать точно
только придется создать Query и вызвать метод query.ExecSql;
потому что если удалять построчно 100000 записей можно оч. долго ждать
Илья Б. (2002-06-12 19:04:00) [11]Работает точно:
While not Table1.Eof Do
Begin
Table1.Edit;
Table1.Delete;
Table1.Post;
Table1.Next;
End;
правда долго...
sizmrebi (2002-06-12 08:26:00) [12]prosto pokazal eshio odin put ochistki table,kotorii rabotaet chisto
Val (2002-06-11 17:36:00) [13]>sizmrebi © (11.06.02 17:25)
зачем создавать для этого еще и квери, если метода TTable, который, судя по вопросу, использует автор, вполне достаточно?
sizmrebi (2002-06-11 17:25:00) [14]mojno i s pomoshiu query:
Delete from <imia tablici>
Kurmanbek (2002-06-11 15:19:00) [15]Этот метод неприменим для открытого набора данных.
Закрой таблицу перед вызовом метода
для твоего примера:
Form1.Table1.Close;
Form1.Table1.Exclusive:=true;
Form1.Table1.EmtyTable;
Form1.Table1.Exclusive:=false;
Johnmen (2002-06-11 11:51:00) [16]Ну да...НД д.б.закрыт :))))
А ты глянь примерчик то в хелпе, если не влом....
maxim2 (2002-06-11 11:46:00) [17]А теперь пишет
Cannot perform this operation on an open dataset
Johnmen (2002-06-11 11:18:00) [18]...
Table1.Exclusive:=True;
Table1.Open;
Table1.EmptyTable;
...
maxim2 (2002-06-11 11:08:00) [19]А как ?
Johnmen (2002-06-11 11:04:00) [20]Открыть ея эксклюзивно :)