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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2012, 14:19   #11
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Stilet
Цитата:
А может сама БД настроена на медленную вставку?
Индексов и триггеров нет. У меня можно сказать БД голая, создал ее, добавил табличку для теста и все
Цитата:
Ты вставку делал в рамках одной транзакции, или на каждый инсерт свой commit?
Второй вариант, мой код считай тот что и товарищ _SERGEYX_ привел.

_SERGEYX_
Цитата:
Что-то мне подсказывает, что у ТС во время цикла подключены визуальные компоненты, например, DBGrid.
Специально создал пустой проект для этого случая. Сторонних компонентов которые могли бы замедлять процесс нет

Чтож такое тогда может быть
Базиля вне форума Ответить с цитированием
Старый 26.07.2012, 14:29   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Там в компонентах по идее должен быть явный вызов транзакции
Перед циклом BEGIN TRAN
Цикл в Try
По Except - ROLLBACK, если все Ok - COMMIT

Еще вариант - аналог ADOQuery - загнать туда кучу INSERT-ов и выполнить в рамках одной транзакции
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

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

Цитата:
Еще вариант - аналог ADOQuery - загнать туда кучу INSERT-ов и выполнить в рамках одной транзакции
Это самый лучший вариант.
Цитата:
мой код считай тот что и товарищ _SERGEYX_ привел.
Ну стало быть проблема в том что после каждой вставки ты БД сбрасываешь на хард
А если бы в транзакцию обернул, СУБД бы кэш в памяти подергала, а после подтверждения одним скопом на хард слила.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2012, 14:12   #14
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Аватар
Stilet
Спасибо!
Если не затруднит, пожалуйста, можно пример ? А то не могу что-то разобраться я
Базиля вне форума Ответить с цитированием
Старый 27.07.2012, 14:59   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пример? Можно:
Код:
  
with MyQuery1 do
  begin   
    DisableControls;
    for i := 0 to 50000 do
    begin
      Sql.Text:='insert бла-бла...';
      Exec;
    end;
    Transaction.Commit;
    EnableControls;
  end;
end;
Где Transaction - это отдельный компонент для транзакции
Или вместо него
Код:
      Sql.Text:='Commit Work';
      Exec;
Это я так с файербердом работаю. Нужно только учесть что для MyQuery1 отключить автокоммит (если это возможно)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2012, 15:29   #16
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Stilet
Благодарю Виталий.
Цитата:
Нужно только учесть что для MyQuery1 отключить автокоммит (если это возможно)
Как я понял, это невозможно
Насколько я понимаю все идет крахом

Код:
with MyQuery1 do
   begin
    DisableControls;
    for i := 0 to 50000 do
    begin
      sql.clear;
      Sql.add('insert into test (number) values (1)');
      Execute;
    end;
    Sql.add('Commit Work');
    Execute;
    EnableControls;
  end;
Скорость не изменилась.
Базиля вне форума Ответить с цитированием
Старый 27.07.2012, 15:35   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Насколько я понимаю все идет крахом
Код:
MyConnection.StartTransaction;
..здесь делаем
MyConnection.Commit или
MyConnection.Rollback;
Можно много Insert-ов (по крайней мере попробовать) засунуть в MyQuery и выполнить одним Execute
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 27.07.2012 в 15:39.
Аватар вне форума Ответить с цитированием
Старый 27.07.2012, 15:51   #18
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
Хорошо

Аватар
Спасибо огромное!

Код:
MyConnection1.StartTransaction;
with MyQuery1 do
   begin
    DisableControls;
    for i := 0 to 50000 do
    begin
      sql.clear;
      Sql.add('insert into test (number) values (1)');
      Execute;
    end;
    EnableControls;
    MyConnection1.Commit;
  end;
Результат: 10 секунд

Цитата:
Можно много Insert-ов (по крайней мере попробовать) засунуть в MyQuery и выполнить одним Execute
Такой вариант опробывал уже, компилятор жаловался

Т.е. если я правильно все понял, у меня стояла автоматическая транзакция, и выходило так что 1 добавление - 1 транзакция? Поправьте пожалуйста, если не прав
Базиля вне форума Ответить с цитированием
Старый 27.07.2012, 15:59   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
и выходило так что 1 добавление - 1 транзакция
В яблочко
Цитата:
Такой вариант опробывал уже, компилятор жаловался
Компилятор или ошибка SQL при выполнении?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.07.2012, 16:04   #20
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Цитата:
Компилятор или ошибка SQL при выполнении?
Ой, бред несу
Конечно же при выполнении

Аватар
Stilet
_SERGEYX_


Спасибо большое за участие и помощь!
Базиля вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление записей в БД Access DjoNik135 Помощь студентам 0 18.04.2012 15:09
Добавление Записей в таблицу DJ DIMON PHP 10 31.10.2011 20:12
Добавление записей IvaNNN БД в Delphi 6 11.12.2009 15:02
Добавление записей Liones БД в Delphi 3 25.12.2008 10:08
добавление записей в таблицу strannik БД в Delphi 5 10.05.2007 08:12