Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как удалить все записи из таблицы [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]

Открыть ея эксклюзивно :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо