Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MainMenu и AdoTable, динамическое добавление 
V
    Опции темы
neweraser
Дата 13.1.2010, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 17.2.2008

Репутация: нет
Всего: 6



Всем привет! Я сделал добавление строк поля ObjName таблицы ObjTable в меню программы
Код

procedure TMainForm.Button1Click(Sender: TObject);
var
  NewItem: TMenuItem;
begin
  DataModule1.ObjTable.First;
  While not DataModule1.ObjTable.eof do
  begin
    // тут потом нужно освобождать память или это не критично? 
    NewItem:= TMenuItem.Create(MainMenu1);
    NewItem.Caption:= DataModule1.ObjTable.FieldByName('ObjName').AsString;
    NObj.Add(NewItem); // добавляем запись в меню "объект"
    DataModule1.ObjTable.Next;
  end;
end;


а вот как потом связать это меню с таблицей не знаю, например добавилась строка "объект 2", как при нажатии на нее в меню показать соответствующее поле таблицы (хотя бы в showmessage)
Например таблица

ObjName           ObjAddr         ObjPhone
----------------------------------------------------
объект 1          адрес 1          телефон 1
объект 2          адрес 2          телефон 2
объект 3          адрес 3          телефон 3
объект 4          адрес 4          телефон 4
объект 5          адрес 5          телефон 5
----------------------------------------------------
нажимаем на объект 2 - выскакивает сообщение, содержащее "адрес 2"

Надеюсь вы меня поняли smile


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 14.1.2010, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Как-нибудь через .Tag, думаю. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neweraser
Дата 14.1.2010, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 17.2.2008

Репутация: нет
Всего: 6



Цитата(Данкинг @  14.1.2010,  00:17 Найти цитируемый пост)
.Tag

а что это?  smile 
может наведешь на мысль, что почитать, где посмотреть?  smile 


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 14.1.2010, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(neweraser @  14.1.2010,  00:22 Найти цитируемый пост)
а что это?

Ну, свойство .Tag у элементов меню должно быть, как и у всех компонентов. smile Вот и назначай ему значение.

Цитата(neweraser @  14.1.2010,  00:22 Найти цитируемый пост)
может наведешь на мысль, что почитать, где посмотреть?

Я пока сам плохо представляю, просто первое, что в голову пришло. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
artsb
Дата 14.1.2010, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



neweraser, в том же цикле, где создаёте новые пункты меню, назначайте каждому обработчик onclick, а в tag записывайте номер ассоциируемой записи. В Onclick приводите sender к нужному типу и выдираете значемие свойства tag. Теперь не составит труда получить данные из БД. ;)


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
neweraser
Дата 14.1.2010, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 17.2.2008

Репутация: нет
Всего: 6



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

Добавлено через 3 минуты и 49 секунд
artsb, можно на простом примере? 


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
artsb
Дата 14.1.2010, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Код

procedure TMainForm.Button1Click(Sender: TObject);
var
  NewItem: TMenuItem;
begin
  DataModule1.ObjTable.First;
  While not DataModule1.ObjTable.eof do
  begin
    NewItem:= TMenuItem.Create(MainMenu1);
    NewItem.Caption:= DataModule1.ObjTable.FieldByName('ObjName').AsString;
    NewItem.OnClick := MenuItemClick;
    NObj.Add(NewItem); // добавляем запись в меню "объект"
    DataModule1.ObjTable.Next;
  end;
end;

procedure TForm1.MenuItemClick(Sender: TObject);
var
  index: integer;
  tbl:  TADOTable;
begin
  index := TMenuItem(Sender).Tag;
  // зная индекс, делаем запрос в БД. Типа:
  tbl := TADOTable.Create(Form1);
  tbl.Clone(DataModule1);
  tbl.Filtered := false;
  tbl.Filter := 'id = ' + IntToStr(index);
  tbl.Filtered := true;
  // обрабатываем данные
  tbl.Free();
end;


И не забудьте в классе описать процедуру: "procedure MenuItemClick(Sender: TObject);".

ЗЫ в Делфи не силён, так что извиняйте если что-то криво  smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
neweraser
Дата 14.1.2010, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 17.2.2008

Репутация: нет
Всего: 6



Цитата(artsb @  14.1.2010,  10:15 Найти цитируемый пост)
tbl := TADOTable.Create(Form1);  
tbl.Clone(DataModule1);

не совсем понятно, зачем создавать таблицу если она уже есть и что значит clone? smile


--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
artsb
Дата 14.1.2010, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Мы не создаём новую таблицу, а создаем объект типа TADOTable и клонируем в него DataModule1. Благодаря этому, нам не нужно делать "лишних движений" и при добавлении фильтра пользователь ничего не заметит (особенное если используется DBGrid и т.п.). Т.е. мы работает с теми же данными. Но указатель у них свой. Благодаря этому, не видно перемещений по данным в основной таблице. После этого, добавляем фильтр и получаем нужную нам запись. А дальше делаем что хотим smile

Добавлено через 2 минуты и 8 секунд
Просто если добавить фильтр к основной таблице, то это отразится во всех компонентах, связанных с таблицей. Создавая клона, мы избегаем этого. Хотя в вашей ситуации может и без клона можно обойтись. Я же не знаю  smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
neweraser
Дата 14.1.2010, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 17.2.2008

Репутация: нет
Всего: 6



Цитата(artsb @  14.1.2010,  22:25 Найти цитируемый пост)
Хотя в вашей ситуации может и без клона можно обойтись

 smile 
мне как раз и нужно чтобы в таблице выделялось поле путем выбора соответствующего названия в меню
с этим я разобрался, а что с индексом? что-то не совсем понятно.. 
выдает ошибку 
user posted image



--------------------
Кто ищет, тот всегда найдет.
PM MAIL ICQ Skype   Вверх
artsb
Дата 15.1.2010, 10:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Судя по всему, ошибка в том, что вы неправильное значение в Tag заносите (или не из того поля). И есть ли у вас поле id?
Код

  While not DataModule1.ObjTable.eof do
  begin
    NewItem:= TMenuItem.Create(MainMenu1);
    NewItem.Caption:= DataModule1.ObjTable.FieldByName('ObjName').AsString;
    NewItem.Tag := DataModule1.ObjTable.FieldByName('id').AsInteger; // <- это есть?
    NewItem.OnClick := MenuItemClick;
    NObj.Add(NewItem); // добавляем запись в меню "объект"
    DataModule1.ObjTable.Next;
  end;


Добавлено через 3 минуты и 49 секунд
Цитата(neweraser @  14.1.2010,  23:08 Найти цитируемый пост)
мне как раз и нужно чтобы в таблице выделялось поле путем выбора соответствующего названия в меню

Хозяин - барин smile

Это сообщение отредактировал(а) artsb - 15.1.2010, 10:39


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0822 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.