![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по сохранению значений [D7]
BAX © (2006-01-16 14:11:00)Здравствуйте!
Подскажите пожалуйста как решить следующую проблему:
на форме есть два компонента RxDBLoocupCombo. Один из них настроен на выборку предприятий, второй на выборку цехов. Подразделения и цеха находятся в одной таблице. Различие между предприятием и цехом организовано в поле PrId. У предприятия 2 символа, а у цеха 3 символа.
После ввода данных, в эти компоненты, пользователь нажимает кнопку "сохранить" и данные сохраняются в таблице Dis. Чтобы показать пользователю, что данные введенные им есть - переоткрываем дата сет настроеный на таблицу DIS и вместе с ним переоткрываются другие дата сеты.
Вопрос: После переокрытия введеные ранее данные остаются только в компоненте отвечающем за предприятие, а в компоненте Цех они исчезают. Дата сет цеха настроен на ДатаСет предприятия. Подскажите пожалуйста как можно сохранить данные после переоткрытия в поле ввода ЦЕХ???
procedure TForm3.cmPRFKeyPress(Sender: TObject; var Key: Char);
var
CehBookmark:TBookMark;
begin
IF KEY = #13 THEN
BEGIN
try
//создали закладку
CehBookmark:=dm.Pred.GetBookmark;
if cmCEH.KeyValue = null
then raise EGetWarning.Create('Выберите цех!');
if cmPRF.KeyValue = null
then raise EGetWarning.Create('Выберите профессию!');
try
if DispanNew then
begin
DM.EFFs.Active:=true;
DM.DISFIO.Active:=true;
DM.Dispan.Last;
Staj.SetFocus;
Dm.Pred.Open;
Dm.Ceh.Open;
end;
finally
if DM.Ceh.BookmarkValid(CehBookmark) then
Dm.Ceh.GotoBookmark(CehBookmark);
end;
except
on GW: EGetWarning do
MessageBox(0, PChar(GW.Message), 'Недостаточно информации', MB_OK + MB_ICONWARNING);
end;
Пробовал сделать через закладки. Закладка создается. Но вот данные в компоненте RxDBLookupCombo (cmCeh) не показываются, а закладка Dm.Ceh.GotoBookmark(CehBookmark) передается. Подскажите пожалуйста в чем может быть причина?
Sergey13 (2006-01-17 09:22:00) [1]2 [8] BAX (17.01.06 06:23)
Таблица (физическая) одна, а запросов (датасетов) по ней может быть сколько угодно.
ЮЮ (2006-01-17 08:48:00) [2]Позиционирование в RxDBLoocupCombo, не привязанному к DataSource, осуществляется установкой KeyValue. Поэтому надо запомнить текущие значения, а после переоткрытия ListSource их восстановить:
CEHKeyValue := cmCEH.KeyValue;
PRFKeyValue := cmPRF.KeyValue;
try
...
finally
cmPRF.KeyValue := CEHKeyValue;
cmPRF.KeyValue := PRFKeyValue;
end;
BAX (2006-01-17 06:23:00) [3]Дело в том что предприятие берется из той - же таблицы, что и цех. Для цеха в этой таблице есть поле PRID куда передается ID предприятия к которому он принадлежит. Как в этом случае можно спозиционироваться на Предприятие и на цех?
Sergey13 (2006-01-16 14:55:00) [4]2 [6] BAX (16.01.06 14:54)
Так же как и предприятия? В чем проблема то?
BAX (2006-01-16 14:54:00) [5]А потом как спозиционировать датасет цеха?
Sergey13 (2006-01-16 14:41:00) [6]2[4] BAX (16.01.06 14:39)
Чего как? Спозиционироваться? Locate например.
BAX (2006-01-16 14:39:00) [7]Подскажи пожалуйста как?
Sergey13 (2006-01-16 14:36:00) [8]2[2] BAX (16.01.06 14:24)
Ну дык при переоткрытии цехов наверное надо указать нужное ИД предприятия (или просто спозиционировать датасет предприятий на нужную запись).
BAX (2006-01-16 14:24:00) [9]В базе есть еще поле признак. В этом поле написано цех или предприятие. Да прав - Мастер-детайл. У цехов хранится ID предприятия к которому они принадлежат в поле PrId.
Sergey13 (2006-01-16 14:19:00) [10]2BAX (16.01.06 14:11)
>Различие между предприятием и цехом организовано в поле PrId. У предприятия 2 символа, а у цеха 3 символа.
ИМХО, это не есть хорощо.
Что-то непонятно, как цеха связаны в предприятием? Мастер-детайл или что?