Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как можно очистить таблицу? 
:(
    Опции темы
Serebrus
Дата 3.9.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



Привет.
Помогите решить следующий вопрос:
После работы с таблицей данных ADOTable я удаляю все записи вот так: ADOTable.DeleteRecords(arAll)
но у меня ошибка: "Операция не допускается в данном котексте";
По этому я "смостерил" такой код:
Цитата

with ADOTable2 do
 begin
  First;
  for i:=1 to RecordCount do
   begin
    Delete;
    Next;
   end;
 end;

проблем почти нет (только немного тормозит), но при следующем добавлении записей
в эту таблицу ID начинается со следующей цыфры а не с единицы.
Как можно просто очистить таблицу простым путем? Надо чтобы после этого, при добавлении
новых записей ID начинался с 1.
Заране спосибо.

Это сообщение отредактировал(а) Serebrus - 3.9.2007, 17:02
PM MAIL   Вверх
ALeXandrK
Дата 3.9.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Цитата

Код

with ADOTable2 do
 begin
  First;
  for i:=1 to RecordCount do
   begin
    Delete;
    Next;
   end;
 end;



Это ужасный способ!

Лучше создай запрос вида:
Код

DELETE * FROM Название_Таблицы;


Для того, чтобы выполнить запрос, можно использовать компонент TADOCommand:
Код

Cmd := TADOCommand.Create(nil);
with Cmd do
begin
 Connection := ... коннектион с бозой / или можно прописать путь к базе в ConnectionString
 CommandType :=  cmdText;
 CommandText := 'DELETE * FROM Название_Таблицы;';
 Execute;
end;

FreeAndNil(Cmd);


А с id - это вопрос сложный, т.к. СУБД следит за тем, чтобы они были всегда уникальные, иначе ты удалил из одной таблицы
все данные с этими id, а в другой они остались, что может привести потом к тому, что ты будешь делать неверную выборку из базы.


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Anark1
Дата 3.9.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



ALeXandrK, 
в чем сложность с id ?
Код

ON DELETE CASCADE
ON UPDATE CASCADE


Добавлено через 8 минут и 23 секунды
И уникальность это несколько друге. Никакого отношения к удалению не имеет. Уникальность обеспечивает однозначную идентификацию записи по полю. Важно при вставке\редактировании.
При удалении надо думать об ссылочной целостности, иначе появятся "бесхозные" записи.  Что я и написал выше.
И последнее - не всегда поле id используется для связывания таблиц.


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
ALeXandrK
Дата 3.9.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Anark1: спасибо просветил smile 


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Anark1
Дата 3.9.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



Цитата(ALeXandrK @ 3.9.2007,  18:08)
Anark1: спасибо просветил smile

No problem  smile 


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Lunatikus
Дата 4.9.2007, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



а может речь идет об автоинкрементном поле ID?Тогда надо запросом его обнулять.Не вспомню сразу синтаксис-не пользовался давненько.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
pseud
Дата 4.9.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Lunatikus @  4.9.2007,  08:29 Найти цитируемый пост)
а может речь идет об автоинкрементном поле ID?Тогда надо запросом его обнулять.Не вспомню сразу синтаксис-не пользовался давненько.


думаю можно программно снять флаг автоинкрементности (или изменить тип на Integer) - зависит от БД
а потом так же программно вернуть автоинкремент


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
SergeBS
Дата 4.9.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Serebrus, 
Прочитай правила насчет того, что нужно указывать ОБЯЗАТЕЛЬНО.
PM MAIL   Вверх
Serebrus
Дата 5.9.2007, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



Anark1, подскажи пожалуйста, где это:
ON DELETE CASCADE
ON UPDATE CASCADE
пишется? (как употребляется?)
PM MAIL   Вверх
RinOSpro
Дата 5.9.2007, 10:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











with ADOTable2 do
 begin
  First;
  for i:=1 to RecordCount-1 do
   begin
    Delete;
   end;
 end;
 
и еще это может быть из за отсутствия ключевого поля

а nехт то зачем одного делета хватит

Добавлено через 1 минуту и 8 секунд
а лучше 
Код

      while not ADOTable2 .Eof do
        begin
          ADOTable2 .Delete;
        end;

  Вверх
Deniz
Дата 6.9.2007, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(RinOSpro @ 5.9.2007,  13:12)
with ADOTable2 do
 begin
  First;
  for i:=1 to RecordCount-1 do
   begin
    Delete;
   end;
 end;
 
и еще это может быть из за отсутствия ключевого поля

а nехт то зачем одного делета хватит

Добавлено @ 10:14
а лучше 
Код

      while not ADOTable2 .Eof do
        begin
          ADOTable2 .Delete;
        end;

RinOSpro, а самому попробовать этот код, он не совсем корректный, если указатель стоит не на первой записи.
Если не нравится совет ALeXandrK используй что-то типа
Код

  while not ADOTable1.IsEmpty do ADOTable1.Delete;
или
  while not (ADOTable1.Bof and ADOTable1.Eof) do ADOTable1.Delete;
или
  while ADOTable1.RecordCount > 0 do ADOTable1.Delete;

3 варианта на выбор.
Но лучше все же
Код

  delete from TableName
заметьте * после delete НЕ НУЖНО.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
ALeXandrK
Дата 6.9.2007, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Цитата(Deniz @ 6.9.2007,  07:33)
Код

  delete from TableName
заметьте * после delete НЕ НУЖНО.

А * в запросе что-то меняет или просто ты к тому, что с ней, что без нее - одно и тоже?


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Anark1
Дата 6.9.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



Цитата(Serebrus @ 5.9.2007,  10:06)
Anark1, подскажи пожалуйста, где это:
ON DELETE CASCADE
ON UPDATE CASCADE
пишется? (как употребляется?)

Это употребляется как необязательное условие при создании внешнего ключа.
Пример для InterBase SQL Server.

Код

ALTER TABLE MSSGS ADD CONSTRAINT
FK_СID
FOREIGN KEY (MSID) REFERENCES CARDS (ID) 
ON DELETE CASCADE 
ON UPDATE CASCADE;





--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Deniz
Дата 7.9.2007, 07:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



ALeXandrK, если писать delete со "*" то система должна ругаться. (SQL 92)


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
ALeXandrK
Дата 7.9.2007, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Deniz: Все время так писал и не разу ругани не слышал. Может уже новый стандарт написали smile 


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0611 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.