Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация SQL запроса 
:(
    Опции темы
Isaev
Дата 13.6.2012, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



При закрытии модальной формы настройки сохраняются в таблицу SQLite BD следующим образом:
Код

Procedure TOptForm.sButton1Click(Sender:TObject);
Var
  I:Integer;
Begin
  For I:=0 To sCheckLB1.Items.Count-1 Do
    Begin
      MainForm.ZQuery1.Close;
      MainForm.ZQuery1.SQL.Clear;
      MainForm.ZQuery1.SQL.Append('UPDATE BonusQuelle SET BQStat='+BoolToStr(sCheckLB1.Checked[I])+' WHERE BQNum='+IntToStr(I+1));
      MainForm.ZQuery1.ExecSQL;
    End;
  ModalResult:=mrOk;
  CloseModal;
End;

Уже при 10 записях визуально видно что скорость оставляет желать лучшего... Как это можно оптимизировать?
Возможно получить таблицу полностью...изменить, а потом одним запросом обновить?

Это сообщение отредактировал(а) Isaev - 13.6.2012, 12:32
PM MAIL ICQ   Вверх
Данкинг
Дата 13.6.2012, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



А эту SQLite можно открыть просто как датасет и менять через .Edit ... .Post? Если да, то логичней проходить в цикле по датасету и сверять значения поля с этими sCheckLB1 (не знаю, что это такое), в свою очередь тоже проходя по ним циклом. Должно работать быстрее.

Это сообщение отредактировал(а) Данкинг - 13.6.2012, 01:03


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Isaev
Дата 13.6.2012, 04:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Данкинг @  13.6.2012,  01:03 Найти цитируемый пост)
А эту SQLite можно открыть просто как датасет и менять через .Edit ... .Post?

Хотелось бы...
Датасет можно связать с Query но он же отзеркалит только ответ запроса и через него не изменить данные в базе, а напрямую или нельзя или я пока не знаю как.
Цитата(Данкинг @  13.6.2012,  01:03 Найти цитируемый пост)
sCheckLB1 (не знаю, что это такое)

Это CheckListBox, но это не столь важно

Это сообщение отредактировал(а) Isaev - 13.6.2012, 04:37
PM MAIL ICQ   Вверх
superVad
Дата 13.6.2012, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Isaev, может можно эти запросы сначала добавить все в MainForm.ZQuery1.SQL через точку с запятой, а потор за раз пакетом выполнить?
PM MAIL   Вверх
Isaev
Дата 13.6.2012, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



superVad, можно, работает... но по времени вроде так же. Надо потестить на больших объёмах будет.

Забыл кстати упомянуть, может важно: DelphiXE, ZeosLib последняя используются
PM MAIL ICQ   Вверх
pseud
Дата 2.7.2012, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата

if sCheckLB1.Items.Count > 0 then
begin
  with MainForm.ZQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE BonusQuelle t SET t.BQStat = case');
    sWhere := 'WHERE t.BQNum in (';
    for i := 0 to sCheckLB1.Items.Count - 1 do
    begin
      SQL.Add('  when t.BQNum = ' + IntToStr(i + 1) + ' then ' + BoolToStr(sCheckLB1.Checked[i]));
      if i > 0 then
        sWhere := sWhere + ', ';
      sWhere := sWhere + IntToStr(i + 1);
    end;
    SQL.Add('end');
    sWhere := sWhere + ')';
    SQL.Add(sWhere);
    ExecSQL;
  end;
end;  


Это сообщение отредактировал(а) pseud - 2.7.2012, 17:05


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1042 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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