Форум: "Начинающим";
Текущий архив: 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