Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Долго выполняется Post 
:(
    Опции темы
Akella
  Дата 16.5.2006, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



FB 2.0+FibPlus641+DevExpress, BDS2006.
Долго (5-10 сек) выполняется DataBase.Post. В чём может быть проблема? Какими путями её возможно решить.
Master-Detail, выполняю Post в мастер-таблицу, детальную даже не трогаю.
В мастер-таблице 5000 записей. В детальной 4000.


Код вроде самый обычный

Код

  fmNewArrival := TfmNewArrival.Create(self);

  fmNewArrival.dblSuppliers.Properties.ListSource.DataSet.Open;
  fmNewArrival.dblSuppliers.Properties.ListSource.DataSet.Locate('ID',dbgArrivalDBTableView1.DataController.DataSet.FieldByName('supplier_id').AsInteger,[]);
  fmNewArrival.cxDateEdit1.Date   := dbgArrivalDBTableView1.DataController.DataSource.DataSet.FieldByName('Date_Input').AsDateTime;
  fmNewArrival.edInvoice_num.Text := dbgArrivalDBTableView1.DataController.DataSource.DataSet.FieldByName('invoice_num').AsString;
  fmNewArrival.ceCoeff.Value      := dbgArrivalDBTableView1.DataController.DataSource.DataSet.FieldByName('coeff').AsFloat;

  if fmNewArrival.ShowModal = mrOk then
      begin
        dbgArrivalDBTableView1.DataController.DataSource.DataSet.Edit;

        dbgArrivalDBTableView1.DataController.DataSource.DataSet.FieldByName('invoice_num').AsVariant :=
          fmNewArrival.edInvoice_num.Text;

        dbgArrivalDBTableView1.DataController.DataSource.DataSet.FieldByName('date_input').AsVariant :=
          fmNewArrival.cxDateEdit1.Date;

        dbgArrivalDBTableView1.DataController.DataSource.DataSet.FieldByName('coeff').AsVariant :=
          fmNewArrival.ceCoeff.Value;

        dbgArrivalDBTableView1.DataController.DataSource.DataSet.post;

        if (fmNewArrival.dbgArrivalDetDBTableView1.DataController.DataSource.DataSet.State = dsEdit) OR
           (fmNewArrival.dbgArrivalDetDBTableView1.DataController.DataSource.DataSet.State = dsInsert)
        then
          fmNewArrival.dbgArrivalDetDBTableView1.DataController.DataSource.DataSet.post;

        (fmNewArrival.dbgArrivalDetDBTableView1.DataController.DataSource.DataSet as TpFIBDataSet).UpdateTransaction.Commit;
//        (dbgArrivalDBTableView1.DataController.DataSource.DataSet as TpFIBDataSet).Refresh;

      end
  else
      begin
        if (dbgArrivalDBTableView1.DataController.DataSource.DataSet.State = dsEdit) OR
           (dbgArrivalDBTableView1.DataController.DataSource.DataSet.State = dsInsert)
        then
          dbgArrivalDBTableView1.DataController.DataSource.DataSet.Cancel;

        if (fmNewArrival.dbgArrivalDetDBTableView1.DataController.DataSource.DataSet as TpFIBDataSet).UpdateTransaction.InTransaction then
          (fmNewArrival.dbgArrivalDetDBTableView1.DataController.DataSource.DataSet as TpFIBDataSet).UpdateTransaction.Rollback;

      end;

   freeAndNil(fmNewArrival);



SQL-запрос мастер таблицы
Код

выборка
SELECT
    ID,
    SUPPLIER_ID,
    INVOICE_NUM,
    DATE_INPUT,
    COEFF,
    SUMM_WO_NDS,
    SUMM_RETAIL
FROM
    ARRIVAL 

-----------------------
обновление
UPDATE ARRIVAL
SET 
    SUPPLIER_ID = :SUPPLIER_ID,
    INVOICE_NUM = :INVOICE_NUM,
    DATE_INPUT = :DATE_INPUT,
    COEFF = :COEFF
WHERE
    ID = :OLD_ID
  

Это сообщение отредактировал(а) Akella - 16.5.2006, 08:09
PM MAIL   Вверх
Akella
Дата 16.5.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



индекс только один, по ключевому полю 
PM MAIL   Вверх
SergeBS
Дата 17.5.2006, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Akella
Ну куча вопросов у меня:
Сервер - какая ОС? И диск какой - IDE<>SCSI? Свободное место на диске?
БД - не *.gdb случайно? 
Антивирус стоит?
Эта проблема резко появилась?(в смысле до того было нормально и вдруг БАХ - только на этом месте)
 
PM MAIL   Вверх
Akella
Дата 17.5.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



WinXP sp2
SATAII
Свободного места хватает
БД - fdb
Нод32
Почему-то IBExpert нормально, достаточно быстро сохраняет/добавляет запись. 
PM MAIL   Вверх
Мишка
Дата 17.5.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Серега, глянь, а в 28 строку не заходит случайно? 
PM MAIL   Вверх
Akella
Дата 17.5.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



нет, не заходит, если ты имеешь ввиду это:
Код

if (fmNewArrival.dbgArrivalDetDBTableView1.DataController.DataSource.DataSet.State = dsEdit) OR
           (fmNewArrival.dbgArrivalDetDBTableView1.DataController.DataSource.DataSet.State = dsInsert)
        then
28->       fmNewArrival.dbgArrivalDetDBTableView1.DataController.DataSource.DataSet.post;

fmNewArrival.dbgArrivalDetDBTableView1 - это детальная таблица, я её не редактирую, но по задумке она редактироваться тоже должна. 
PM MAIL   Вверх
Akella
Дата 17.5.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



странно

TpFIBDataSet за менил на TpFIBDataSet, с темиже свойсвами, нормально стало работать 
PM MAIL   Вверх
SergeBS
Дата 18.5.2006, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Akella
Цитата

TpFIBDataSet за менил на TpFIBDataSet, с темиже свойсвами, нормально стало работать  

Т.е. просто удалил, а затем по новой создал и заработало? Чудно. 
Хотя у меня был аналогичный фокус: играя настройками TADODataSet я менял время выполнения от 0.5 сек. до >10 сек. Причем откат обратно в 0.5 был нудным делом - когда много чего накрутишь, потом трудно вспомнить, где что было изначально.  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


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

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

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


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

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


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

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


 




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


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

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