Форум: "Базы";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
ВнизMDI и базы Найти похожие ветки
← →
Alek Aaz (2003-08-25 15:35) [0]Плиз, поскажите как лучше сделать?
Скажем есть таблица
Клиент
номер
физ/юр лицо
Юзер выбирает клиента, жмет ентер - открывается MDI форма с подробными данными по клиенту. Выбирает другого - новая форма.
Формы разные, для юр и физ лиц.
Как "правильно" плодить MDI формы?
Вопрос как передать данные в MDI форму? Как лучше это сделать?
← →
Hawk2 (2003-08-25 16:01) [1]А не запаришся ты бегать по этим формам?
Зделай проще, на форме два грида, в одном будет выводится таблица с клиентами, в другом - инфа по этому клиенту. В обеих таблицах должно быть уникальное поле для их связи меджу собой. Это подготовка.
Потом в первом Гриде открываешь таблицу с клиентами, в DataSource, ну который связан с этим НД по событию OnDataChange делаешь запрос ко второй таблице, где выбираешь запись соответствующую номеру клиента из первой, а данные выводишь во второй грид.
← →
MsGuns (2003-08-25 16:26) [2]А зачем 2 грида-то ? В первом правильно, список клиентов с коротким перечнем основных полей. Внизу (вверху, сбоку) панель с обычными или DB-Aware компонентами типа Edit/Memo и т.д., отображающими не уместившуюся в гриде подробную инфу о текщем (в гриде) клиенте. Эту панель можно отключать (для ускоренного листания или поиска в гриде) или включать (для редактирования, поиска по второстепенным филдам etc).
Если компоненты DB-Aware, то источник должен быть тот же самый, что и для НД в гриде. Если контролы панели - простые Edit, то заполнение их по событию AfterScroll НД из текущей записи этого НД.
← →
Hawk2 (2003-08-25 16:50) [3]Согласен, так будет даже красивее. Похоже автор и этого вопроса исчез. :-)
← →
TohaNik (2003-08-25 17:07) [4]ИМХО в этом случае удобно PageControl использовать.
← →
MsGuns (2003-08-25 17:16) [5]>TohaNik © (25.08.03 17:07) [4]
????
Обед:
- Первое на плите в кухне
- Второе - в кафе за углом
- Компот у тети в Ташкенте в погребе
;))
← →
Hawk2 (2003-08-25 17:27) [6]MsGuns © (25.08.03 17:16) [5]
Смеялся долго.
← →
TohaNik (2003-08-25 17:47) [7]MsGuns © (25.08.03 17:16) [5]
>TohaNik © (25.08.03 17:07) [4]
????
Обед:
- Первое на плите в кухне
- Второе - в кафе за углом
- Компот у тети в Ташкенте в погребе
;))
Это точно - вредно на работу из отпуска;) приходить:)
← →
Alek Aaz (2003-08-26 10:01) [8]2All
Да нет, не исчез, далеко от компа был.
>А не запаришся ты бегать по этим формам?
Нет не запарюсь.
Делал я и с боку и с табсшитами - не то. Проще конечно, но не лучше. С точки зрения юзера.
Приятно что Вам весело, но мне не очень.
← →
Sergey13 (2003-08-26 10:15) [9]2Alek Aaz © (26.08.03 10:01) [8]
> Проще конечно, но не лучше. С точки зрения юзера.
Странная точка зрения. А ты его спрашивал? Или это твоя точка зрения на его точку зрения? 8-)
Тут еще такой камушек подводный. Если все твои детские формы ссылаются на один датасет (как у тебя описано), то при переходе на другую запись данные на всех формах сменятся и будут одинаковыми (если используются DB-компоненты). Тут поможет только жесткая связка форма<->датасет на этой форме. А это уже неудобно. Там поредактировал - бросил пошел другую редактировать. Можно получить удивление. 8-)
← →
roottim (2003-08-26 10:36) [10]
> Плиз, поскажите как лучше сделать?
> Скажем есть таблица
> Клиент
> номер
> физ/юр лицо
> Юзер выбирает клиента, жмет ентер - открывается MDI форма
> с подробными данными по клиенту. Выбирает другого - новая
> форма.
> Формы разные, для юр и физ лиц.
> Как "правильно" плодить MDI формы?
>
> Вопрос как передать данные в MDI форму? Как лучше это сделать?
форму, по возможности, необходимо сделать автономной
данная форма зависит только от параметров передаваемых ей
для решения твоего вопроса, необходим "MDIQuery"(или сколько требутся) на форме с входными параметрами по ключу клиента
все контролы формы работают с этим "MDIQuery"... т.о. твоя форма независимо от позиционного НД "редактирует клиента"
вызов формы - стандартным образом с передачей соответствующих параметров
type
TMDIForm1 = class(TForm)
MDIQuery: TQuery;
***
procedure FormClose(Sender: TObject; var Action: TCloseAction);
public
property ClientID: Integer read GetClientID write SetClientID;
***
procedure ShowClient(AClientID: Integer);
***
end;
var
Form1: TMDIForm1;
implementation
{ TMDIForm1 }
function TMDIForm1.GetClientID: Integer;
begin
Result := MDIQuery.ParamByName("CLIENT_ID").AsInteger;
end;
procedure TMDIForm1.SetClientID(const Value: Integer);
begin
MDIQuery.ParamByName("CLIENT_ID").AsInteger := Value;
end;
procedure TMDIForm1.ShowClient(AClientID: Integer);
begin
ClientID := AClientID;
***
MDIQuery.Open;
end;
procedure TMDIForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
***
ACtion := caFree;
end;
--------------------------------------------------------
процедура вызова
var vForm: TMDIForm1;
begin
vForm := TMDIForm1.Create(Self);
vForm.ShowClient(q1.FieldByName("CLIENT_ID").AsInteger);
end;
--------------------------------------------------------
сроду столько не писал :)...
ну надеюсь идея понятна !
> Приятно что Вам весело, но мне не очень.
и может и тебе повеселеет :)
← →
Hawk2 (2003-08-26 10:40) [11]Sergey13 © (26.08.03 10:15) [9] > Можно получить удивление. 8-)
Ну вот захотелось человеку именно так сделать, потом переделает, зато опыт накапливается :-)
Alek Aaz © (26.08.03 10:01) [8]> Нет не запарюсь.
В данном случае работа с MDI-формой ничем не отличается от обычной. По ЕНТЕРу определяеш на какой записи ты находишся и присваиваешь значения полей текущей записи, тем компонентам в которых будет отображаться информация. Естественно в разделе uses нужно указать модуль з компонентами доступа к базе данных, ну там DataModule или главная форма, смотря как там у тебя.
← →
VAleksey (2003-08-26 10:58) [12]
> MsGuns © (25.08.03 17:16)
Ну вот :-((, а я всю жизнь использов закладки.
Не такая уж плохая вещь я скажу. Надо только правильно группировать информацию.
← →
asp (2003-08-26 11:03) [13]Так и делать.
MDI-форма со свойством IDClient. При выборе клиента сперва перебираешь MDI-формы с клиентами и ищешь нужный IDClient. Нашел - активизируй. Не нашел - делай новую и передавай ей IDClient.
← →
Alek Aaz (2003-08-26 11:25) [14]2Sergey13
>Странная точка зрения. А ты его спрашивал?
Угу. То-есть юЗверь то как раз и бунтует. Меня устраивает старый вариант :)
>форма<->датасет на этой форме.
К этому все и идет. :(
2roottim
>ну надеюсь идея понятна !
А.. э... пока не очень, но я разберусь. Спасибо!
2Hawk2 ©
>потом переделает, зато опыт накапливается :-)
Мне больше нравится девиз -"Опыт пропорционален стоимости испорченного оборудования" :)
>В данном случае работа с MDI-формой ничем не отличается от обычной.
Ну не совсем. Sergey13 про подводные камушки верно сказал.
2asp ©
>Так и делать.
Как? по закладкам?
Если я сделаю так:
Form3.DataSet1:=DataModule.Table1.DataSet;
Будет пахать?
Опять же ежели зверь обновил данные как послать их назад? Во попал... мля...
← →
Alek Aaz (2003-08-26 11:29) [15]2roottim
ВЕЩЬ!...
← →
asp (2003-08-26 12:09) [16]Alek Aaz © (26.08.03 11:25) [14] > Шарше ля форм.
MainForm.MDIChildren & MainForm.MDIChildCount
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.017 c