Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2007, 17:37   #1
GamiyDO
 
Регистрация: 21.07.2007
Сообщений: 5
Вопрос Многооконный интерфейс и БД

Пытаюсь написать программу с многооконным интерфейсом, которая бы открывала окна с DBGrid и предоставляла пользователю вводить в таблицу данные. После вызова новой дочерней формы, во всех предыдущих дочерних формах данные в DBGrid становятся такими, как во вновь созданной.
Подскажите, пожалуйста, как сделать, чтобы в DBGrid разных дочерних форм были разные данные.

Вот процедура создания дочерней формы с DBGrid:
Код:
 
procedure TMainForm.CreateMDIChildTable(const Name: string);
var
  ChldTable: array of TCHILDTable;
  iMode: integer;
begin
  ChldTable:= TCHILDTable.Create(Application);
  ChldTable.Caption := 'Справочник - '+Name;
  iMode:=-1;
  if Name=scRegions then iMode:=0;
 
  if Name=scManagers then iMode:=4;
  if Name=scCustomers then iMode:=5;
  mdlData.dbMain.Open;
  Case iMode of
    0: // Открываем и загружаем в DBGrid таблицу "Regions"
      begin
        mdlData.tblRegions.Open;
        ChldTable.DBGrid.DataSource.DataSet:=mdlData.tblRegions;
      end;
    4: // Открываем и загружаем в DBGrid таблицу "Managers"
      begin
        mdlData.tblManagers.Open;
        ChldTable.DBGrid.DataSource.DataSet:=mdlData.tblManagers;
      end;
    5: // Открываем и загружаем в DBGrid таблицу "Customers"
      begin
        //mdlData.tblCustomers.Open;
        //ChldTable.DBGrid.DataSource.DataSet:=mdlData.tblCustomers;
      end;
   end;
  ChldTable.DBGrid.DataSource.DataSet.Refresh;  
end;
Машинная программа выполняет то, что вы ей приказали делать, а не то, что бы вы хотели, чтобы она делала
(Третий закон Грида// Законы Мэрфи)
GamiyDO вне форума Ответить с цитированием
Старый 23.07.2007, 01:26   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

ChdTable объявлен как массив, а данные присваиваются только самому первому элементу. И потом если уж делаешь так, то вынеси объявление массива за пределы процедуры. Ибо в таком виде его содержимое в общем случае мусор.
Баламут вне форума Ответить с цитированием
Старый 23.07.2007, 03:21   #3
GamiyDO
 
Регистрация: 21.07.2007
Сообщений: 5
По умолчанию

Извините, я допустил ошибку, когда помещал код на форум.
Вообще-то вначале у меня было так:
Код:
 
procedure TMainForm.CreateMDIChildTable(const Name: string);
var
  ChldTable: TCHILDTable;
  iMode: integer;
Это я потом экспериментировал и создавал массив из TCHILDTable, а в форум по ошибке поместил не до конца исправленый вариант первоначальной версии кода.

Мне кажется, проблема кроется где-то здесь:
Код:
      mdlData.tblRegions.Open;
      ChldTable.DBGrid.DataSource.DataSet:=mdlData.tblRegions;
когда я в родительской форме для DBGrid`а дочерней задаю DataSet. И получается, что у дочерних формы один DBGrid на всех. Вот как это обойти?
Машинная программа выполняет то, что вы ей приказали делать, а не то, что бы вы хотели, чтобы она делала
(Третий закон Грида// Законы Мэрфи)
GamiyDO вне форума Ответить с цитированием
Старый 24.07.2007, 01:37   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Меняй не Dataset, а DataSource. Ведь все таблицы в твоем случае работают с одним и тем же DataSource. И естественно, что при подмене у источника данных самой таблицы в БД это отражается во всех дочерних окнах. Т.е. буквально нужно написать так:

ChldTable.DBGrid.DataSource := mdlData.tblRegionsSource, где tblRegionsSource ссылается на tblRegions
Баламут вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GUI интерфейс ben95 Общие вопросы Delphi 5 01.01.2008 16:57
Интерфейс!!! Oleg Romanchuk Свободное общение 8 25.10.2007 18:13
Многооконный текстовый редактор(MDI) Tany Помощь студентам 1 03.08.2007 13:56
Многооконный текстовый редактор (MDI) Tany Помощь студентам 1 05.07.2007 19:17