Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 11.07.2015, 18:06   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Удалить все записи из таблицы в реальной базе из программы? 99% база спроектирована не правильно. 1% на то, что что-то не доганяю
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 11.07.2015 в 18:09.
Аватар вне форума
Старый 11.07.2015, 18:11   #12
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
хранимы процедур типа такого
то есть, если база данных сосоит из сотни таблиц и пары сотен свзяей между ними, Вы будете писать все варианты хранимых процедур и прописывать все связи?
п.с. Очень продвинутый подход к решению проблемы =)


Цитата:
1) Для одного можно ! и будеть работать быстрее чем цикл " while "

while not IsEmpty do Delete; - говно от JUDAS
Создал БД с двух таблиц mater и detail на PostgresSQL. Залил 1000000 (миллион) записей
Создал примочку c TPSQLQuery наполненным SELECT * FROM detail WHERE masterid=1
В TDBGridEh - 200 000 записей , остальные с masterid равными 2 3 4 и 5

Удалил своим способом - 8 секунд
Удалил способом уважаемого собеседника с Кавказа - 0.6 секунд, в результате чего были удалены все записи с таблицы detail, включая те, которые имели masterid = 2 3 4 и 5
Вопрос - Вы обучаете коллег убивать информацию или удалять то, что нужно удалить?
--------------
Цитата:
Удалить все записи из таблицы в реальной базе из программы?
Аватар
Вернёмся к основному вопросу автора темы - "Как удалить все данные с TAdoQuery"
для информации
В отличии от TAdoTable в TAdoQuery может быть выборка из одной таблицы, а может быть выборка с нескольких таблиц.
Товарищ собеседник из кавказа, советует человеку валить все записи таблицы одной командой "DELETE FOM таблица" не задумываяс о том что
1) в скрипте TAdoQuery.SQL.Text может быть две или три таблицы
2) скрипт может содержать (и как правило содержит) фрагментированный набор данных из таблицы (SELECT * FROM города WHERE область=Калужская)
3) скрипт может содержать вообще не удаляемые данные - выборку с вьюшки (VIEW - представление)

Цитата:
99% база спроектирована не правильно
Аватар, как правило неправильно проектируют не базу данных, а запросы в тех самых TAdoQuery =)
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 11.07.2015 в 18:32.
JUDAS вне форума
Старый 11.07.2015, 18:49   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Стилет, речь идёт об этои
Ну так надо было так и написать, мол, лишние строки кода не комильфо, чтоб ф0щизды вроде меня затыкались на первой букве.
Сам же и баламутишь народ.
Цитата:
у нас на роботе, некоторые специалисты пишут вообще вот так
А тут что не так? Не все провы умеют выполнять многокомандный запрос. Я тоже так пишу множественные запросы, только использую цикл, и что теперь?
Цитата:
Для многотабличные данных! если это требуетсия на стороне программу который для операторов-users напишу хранимы процедур типа такого
Для начала при таких условия. нужно выяснить, поддерживается ли каскадная операция в СУБД. Если да, то ХП не требуется. Если нет, а бывает и такое, или код пишется с расчетом совместимости со старьем - да. ХП почти на каждый случай очистки. Но как правильно заметил Аватар - "четападазрительна". В БД очищать все целесообразно только для временных таблиц. Автору однозначно стоит прояснить ситуацию подробнее, если он хочет по настоящему качественных ответов.
I'm learning to live...
Stilet вне форума
Старый 11.07.2015, 19:04   #14
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я тоже так пишу множественные запросы, только использую цикл, и что теперь?
не поверю чтобы именно вот так

Код:
With ADOQuery1 do
begin
  Close;
  SQL.Clear;
  SQL.Lines.Add('DELETE FROM Имя_таблиц' ');
  Execute;

  SQL.Clear;
  SQL.Lines.Add('commit');
  Execute;

  SQL.Clear;
  Open;
end;
а не так
Код:
With ADOQuery1 do
begin
  Close;
  SQL.text :='DELETE FROM Имя_таблиц';
  Execute;
  Connection.CommitTrans;
  Open;
end;
Stilet. Разве Вы не заметили быдлокод (выделил красным)
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума
Старый 11.07.2015, 19:08   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У нас разные понятия быдлокода. И кстати: Connection.CommitTrans; использовать не рекомендуется. Я не буду обьяснять почему, об этом писано достаточно в книгах по работе с СУБД. Так что быдлокод я сейчас увидел у тебя.
I'm learning to live...
Stilet вне форума
Старый 11.07.2015, 19:19   #16
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
JUDAS то есть, если база данных сосоит из сотни таблиц и пары сотен свзяей между ними, Вы будете писать все варианты хранимых процедур и прописывать все связи?
Обязательно напишу так with ADOQuery1 do begin Open; DisableControls; while not IsEmpty do Delete;
Цитата:
+дополнил
и ещё, рекомендую перед началом удаления записей вызывать методы DisableControls; а после окончания EnableControls
Да , да понятно
xxbesoxx вне форума
Старый 11.07.2015, 19:22   #17
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Stilet, тогда поясни всем присуствующим зачем вообще придумали Connection.CommitTrans; раз все пишут правильно?
Судя по твоим словам - быдлокодеры все разработчики компонент и самого Делфи, а те, кто пишет как я показал выше - боги программирования?

xxbesoxx
Я тебе выше показал как работает твой код, почему не коммментируешь?
Удалило миллион записей вместо 200 000 .

если не заметил повторю
Цитата:
Создал БД с двух таблиц mater и detail на PostgresSQL. Залил 1000000 (миллион) записей
Создал примочку c TPSQLQuery наполненным SELECT * FROM detail WHERE masterid=1
В TDBGridEh - 200 000 записей , остальные с masterid равными 2 3 4 и 5

Удалил своим способом - 8 секунд
Удалил способом уважаемого собеседника с Кавказа - 0.6 секунд, в результате чего были удалены все записи с таблицы detail, включая те, которые имели masterid = 2 3 4 и 5
Вопрос - Вы обучаете коллег убивать информацию или удалять то, что нужно удалить?
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 11.07.2015 в 19:25.
JUDAS вне форума
Старый 11.07.2015, 19:30   #18
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
тогда поясни всем присуствующим зачем вообще придумали Connection.CommitTrans;
Древни подход как ваши
Код:
with ADOQuery1 do
begin
  Open;
  DisableControls; //++
  while not IsEmpty do
    Delete;
  EnableControls;//++
  Close;
end;
Не применям , такий код ....
Цитата:
xxbesoxx
Я тебе выше показал как работает твой код, почему не коммментируешь?
Удалило миллион записей вместо 200 000 .
Уже не читаю ваши пост . потому что все ваши совети будеть "Тормазить и Глучить" пожалуйста не отвлекайте .
Цитата:
не поверю чтобы именно вот так

Код:


With ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Lines.Add('DELETE FROM Имя_таблиц' ');
Execute;

SQL.Clear;
SQL.Lines.Add('commit');
Execute;

SQL.Clear;
Open;
end;

а не так
А что мешаеть писать так ?
Код:
With ADOQuery1 do
begin
  Close;
  SQL.Clear;
  SQL.Add('DELETE FROM Имя_таблиц commit);
  Execute;
  Open;
end;
Зачем SQL.Lines.Add А что SQL.Add - без Lines нельзя ? или вы Lines тоже рекомендуйте как EnableControls ?

Последний раз редактировалось xxbesoxx; 11.07.2015 в 19:39.
xxbesoxx вне форума
Старый 11.07.2015, 19:33   #19
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
Уже не читаю ваши пост . потому что все ваши совети будеть "Тормазить и Глучить" пожалуйста не отвлекайте .
Естественно что не читаешь. Понасоветовал человеку ахинеи и слился.
Одним словом, прежде чем советовать, проверяй результат
Удачи тебе

Цитата:
Зачем SQL.Lines.Add А что SQL.Add - без Lines нельзя ? или вы Lines тоже рекомендуйте как EnableControls ?


Рекомендую подучить матчасть и не писать на форуме ахинею.
Цитата:
SQL.Add('DELETE FROM Имя_таблиц commit);
Постарайся найти ошибку.
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 11.07.2015 в 19:45.
JUDAS вне форума
Старый 11.07.2015, 19:46   #20
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
прежде чем советовать, проверяй результат
О_оо обязательно проверю
1) while not IsEmpty do Delete;
2) SQL.Lines.Add
3) DisableControls; EnableControls
молодец JUDAS
xxbesoxx вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста очистить базу сообщений Odinsoon PHP 2 09.10.2014 21:47
AdoQuery и как очистить базу L3zh1Y Помощь студентам 0 16.05.2012 12:50
Как лучше организовать базу данных типо как в ICQ Руслантус БД в Delphi 3 09.08.2008 23:57
Как создать базу данных? LeonKing Помощь студентам 4 07.05.2008 14:11
Как создать базу данных knazty Помощь студентам 15 18.11.2007 19:49