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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
1-48540
dez
2003-09-02 11:42
2003.09.15
Abstract Error


1-48573
denis_ka
2003-09-04 09:46
2003.09.15
Общая


4-48840
msa
2003-07-16 10:48
2003.09.15
Как найти по имени COM-объекта по к его dll?


14-48729
freeborn
2003-08-28 22:19
2003.09.15
Нужна помощь! плз


1-48546
tria
2003-09-04 14:28
2003.09.15
Как сделать чтобы в TEdit при Enabled=F не менялся цвет шрифта?