Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Вниз

Обновление 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
2-1257871099
vtur
2009-11-10 19:38
2009.12.27
Создание приложений с использованием DLL


2-1257412567
kyn66
2009-11-05 12:16
2009.12.27
Сохранение параметров программы одним числом


2-1257580554
FIL-23
2009-11-07 10:55
2009.12.27
Трехмерное рисование графиков


1-1231522874
Psycho
2009-01-09 20:41
2009.12.27
Pointer на Unicode-строку


15-1256506209
Юрий
2009-10-26 00:30
2009.12.27
С днем рождения ! 26 октября 2009 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский