Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.27;
Скачать: CL | DM;

Вниз

Обновление Master-Detail таблицы (Firebird)   Найти похожие ветки 

 
d@nger   (2009-11-05 09:30) [0]

Имеется Master-Detail таблицы, которые отображаются в DBGrid-ах на одной форме. При перемещении по главной таблице в детальной отображаются соответствующие записи по определенному полю. Если в детальной таблице изменить программно значение связывающего поля, то эта строка не исчезает сразу, а приходится перевыбирать запись в главной таблице, только после этого в детальной таблице запись исчезает. Не могу сделать чтобы изменения отображались сразу.
Использую FIBdataset, AutoCommit=True, CashedUpdates=True.
Пробовал и ВИПкшв обновлять и датасет... ничего не выходит....


 
d@nger   (2009-11-05 09:32) [1]


> Пробовал и ВИПкшв обновлять и датасет... ничего не выходит.
> ...

читать так: Пробовал и DBGrid обновлять и датасет... ничего не выходит.


 
Sergey13 ©   (2009-11-05 09:36) [2]

> [1] d@nger   (05.11.09 09:32)
> Пробовал и DBGrid обновлять и датасет... ничего не выходит.

Может не так пробовал?


 
d@nger   (2009-11-05 11:11) [3]


> Может не так пробовал?

вот так пробовал:
DBGrid1.Refresh;
FibDataset1.Refresh;


 
Sergey13 ©   (2009-11-05 11:13) [4]

> [3] d@nger   (05.11.09 11:11)

А так если?

FibDataset1.Close;
FibDataset1.Open;


 
Сергей М. ©   (2009-11-05 12:15) [5]


> CashedUpdates=True


А ApplyUpdates вызываешь после внесения изменений ?


 
d@nger   (2009-11-05 13:27) [6]


> А ApplyUpdates вызываешь после внесения изменений ?

Да


 
Сергей М. ©   (2009-11-05 13:32) [7]

Тогда попробуй вызвать DetailDataSet.Refresh


 
d@nger   (2009-11-09 14:49) [8]

Я отказался от DBGrid. Для отображения детальной таблицы стал использовать dxDBTreeView (DevExpress). В нем при добавлении строки в таблицу , после post и applyupdates, добаленная строка сразу не отображается, а если в главной таблице переместиться на соседнюю запись и обратно, то добавленная строка начинает отображаться. Я пробовал следующие варианты обновления:

master_dataset.refresh;
detail_dataset.Refresh;
DBTreeView1.RefreshItems;
DBTreeView1.DataSource.dataset.Refresh;

ничего из этого не помогло... помогло лишь переоткрытие датасета:
detail_dataset.CloseOpen(false);

причем, при удалении строки изменения отображаются моментально, даже без использования
master_dataset.refresh;
detail_dataset.Refresh;


Переоткрытие датасета при каждом добавлении записи не самое лучшее решение, с точки зрения оптимизации кода.
Не ужели нет другого решения кроме переоткрытия датасета? Может быть это глюк dxDBTreeView?


 
Sergey13 ©   (2009-11-09 14:54) [9]

> [8] d@nger   (09.11.09 14:49)
> В нем при добавлении строки в таблицу

Прямо в dxDBTreeView? Наверное все таки в датасете, на который он смотрит? Или вообще отдельным запросом? Конкретно.


 
d@nger   (2009-11-09 14:59) [10]


> Конкретно.

Я добавляю запись в таблицу... а ВИЕкууМшуц использую лишь для отображения записей в древовидной структуре, вот процедура добавления записи:

procedure TFspiski.new_konvert_mnClick(Sender: TObject);
var konv_num:string;num:Integer;
begin
  konv_num:=fmain.getMax("Documents","konvert_num");
  if InputQuery("Создание конверта","Введите номер",konv_num) then
    try
      num:=strtoint(konv_num);
    except
       messageDlg("Номер должен содержать только цифровое значение!",mtError,[mbOk], 0);
       abort;
    end;

  with fmain.spiski2_dset do
  try
     insert;
     fieldbyname("konvert_parent").AsInteger:=-1;
     fieldbyname("name_id").AsString:="Конверт № "+konv_num;
     fieldbyname("konvert_num").AsInteger:=num;
     FieldByName("spisok_id").AsInteger:=fmain.spiski_dset.FieldValues["num"];
     Fieldbyname("pk").AsString:=fmain.getMin("documents","pk");
     Fieldbyname("org_id").AsString:=fmain.getMin("documents","org_id");
     Fieldbyname("reg_num").Asstring:=fmain.getMin("documents","reg_num");
     Fieldbyname("image_index").AsInteger:=1;
     fieldbyname("konvert").AsInteger:=1;
     post;
     applyupdates;
//      fmain.spiski2_dset.CloseOpen(false);
   except
     cancelupdates;
     messageDlg("Ошибка при создании конверта!",mtError,[mbOk], 0);
   end;
end;


 
d@nger   (2009-11-09 15:03) [11]


> ВИЕкууМшуц
сорри ... DBTreeView


 
Sergey13 ©   (2009-11-09 15:08) [12]

> [10] d@nger   (09.11.09 14:59)

И при этом твой ВИЕкууМшуц смотрит на fmain.spiski2_dset? Или на другой датасет?


 
d@nger   (2009-11-09 17:19) [13]

t
> И при этом твой ВИЕкууМшуц смотрит на fmain.spiski2_dset?
>  Или на другой датасет?

да конечно...


 
Sergey13 ©   (2009-11-10 09:22) [14]

> [13] d@nger   (09.11.09 17:19)

Что "да конечно"? В вопросе два взаимоисключающих варианта.

Я с dx-компонентами мало работал и давно, но помнится там как-то все сложно понаворочено. Наверное надо обновлять именно его, потому что датасет уже содержит данные.
А при вставке заполняешь все поля? Ничего ключевого на сервере не подставляется?


 
d@nger   (2009-11-10 10:28) [15]


> Что "да конечно"?

я имел ввиду, что да, dxDBTreeView смотрит на spiski2_dset


> А при вставке заполняешь все поля?

нет не все...

> Ничего ключевого на сервере не подставляется?

подставляется... primary_key генерируется генератором


 
Sergey13 ©   (2009-11-10 10:37) [16]

> [15] d@nger   (10.11.09 10:28)
> подставляется... primary_key генерируется генератором

Можно попробовать подсунуть готовое значение.


 
d@nger   (2009-11-10 10:55) [17]


> Можно попробовать подсунуть готовое значение.

Да... это сработало!!!!! новая строка стала появляться сразу в dxDBTreeView

но что мне делать? я не могу оставить такое решение в конечной программе, раз есть генератор...


 
d@nger   (2009-11-10 10:59) [18]

все... проблема решена.... я просто не прописал генератор в самом датасете, в свойстве AutoUpdateOptions ... теперь все ок... Sergey13 большое тебе спасибо...



Страницы: 1 вся ветка

Текущий архив: 2009.12.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
15-1256560905
Knight
2009-10-26 15:41
2009.12.27
Вопрос на засыпку по TSocketServer+браузер


15-1256703324
Омлет
2009-10-28 07:15
2009.12.27
Занимательное программирование :)


2-1257871099
vtur
2009-11-10 19:38
2009.12.27
Создание приложений с использованием DLL


2-1257847652
Alex_C
2009-11-10 13:07
2009.12.27
По Handle окна найти окно


15-1250874659
Yegorchic
2009-08-21 21:10
2009.12.27
Сломался RAID-массив