Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
8-48657
zolotov
2003-05-06 12:40
2003.09.15
Проигрывание звуков


3-48415
Алексей Петухов
2003-08-25 09:28
2003.09.15
Инсталяция BDE


1-48556
^^^Dragon^^^
2003-09-01 19:16
2003.09.15
Строки


9-48387
com2003
2003-03-15 02:13
2003.09.15
Вывод графики


3-48440
stud
2003-08-25 10:55
2003.09.15
sql запрос ...........





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский