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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2012, 14:26   #1
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию Как передать вместо свойства строку?

Может заголовок некорректный, вопрос все пояснит:
Есть два DBGrid-а на форме, я хочу чтобы по выбору какой либо ячейки в первом DBGrid-е менялось содержимое второго.
То есть есть много DataSource-ов и я хочу присвоить имя одного из них второму гриду
Код:
TableName:='DataModule.DSZamery'+DBGrid1.DataSource.DataSet.Fields[1].AsString;
DBGrid2.DataSource:= ???
Вот если я в TableName собрал то что мне надо в качестве имени как мне это прикрутить ко всему?
BoozZzilla вне форума Ответить с цитированием
Старый 12.12.2012, 14:40   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

TableName к DataSource так просто не прикрутить
Можно так
Код:
if DBGrid1.DataSource.DataSet.Fields[1].AsString='тра-ля-ля1' then DBGrid2.DataSource:=DataSource1
else if DBGrid1.DataSource.DataSet.Fields[1].AsString='тра-ля-ля2' then DBGrid2.DataSource:=DataSource2
else if ...
Чуть посложнее - поискать в Components по имени нужный DataSource
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.12.2012, 14:49   #3
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию

Не, ну я сам понял что можно системой условий, просто это некрасиво. (поясню, там 9 таблиц будет)
А как там, что там с Components? Что писать то?

upd.
Урряяя, я его сам победил.
На всякий случай рассказываю как:
Работаю через ADO
Я создал одну общую ADO таблицу. В нужный момент закрываю активный DataSource, меняю имя таблицы к которой общая таблица привязана и заново активирую DataSource:
Код:
DataModule2.DSCommon.DataSet.Active:=False;
DataModule2.CommonTable.TableName:=TableName;
DataModule2.DSCommon.DataSet.Active:=True;

Последний раз редактировалось BoozZzilla; 12.12.2012 в 14:59.
BoozZzilla вне форума Ответить с цитированием
Старый 12.12.2012, 14:55   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В цикле от 0 до ComponentCount-1 искать на форме где они находятся компоненты типа TDataSource по некоторому условию и при нахождении засунуть найденный указатель в DBGrid2.DataSource
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.12.2012, 14:57   #5
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Связь типа Мастер-Детайл?
если так то должна получиться связка
ADOQuery1->DataSource1->ADOQuery2(проперти DataSource)->DataSource2

в запросе ADOQuery2 в Where должны использоваться параметры с именами как имена полей в ADOQuery1

т.е. ADOQuery1
Select Table1_id, Name From Table1;

в ADOQuery2
Select * FROM Table2 Where MasterId= :Table1_id;


и все автоматом заработает... и гриды тут непричем, это все равно что сказать "повис монитор"
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 12.12.2012, 17:38   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
То есть есть много DataSource-ов и я хочу присвоить имя одного из них второму гриду
Цитата:
В цикле от 0 до ComponentCount-1 искать на форме где они находятся компоненты типа TDataSource
зачем цикл если есть Tcomponent.FindComponent
Код:
ds:=xx.FindComponent('DSXXX'); //один из DataSource (а именно с именем DSXXX)
DbgridX.DataSource:=ds as TDataSource; // "присвоить" DBgrid'y
OFFTOP: Завязываться на имена плохая привычка.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 12.12.2012, 19:28   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
зачем цикл если есть Tcomponent.FindComponent
Специально не писал - только поиск по имени, а перебором можно и по другим критериям, например по значению Tag
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WinSock.gethostbyname правильно передать строку. Человек_Борща Общие вопросы Delphi 5 03.07.2012 18:29
Передать в dll(загружна в чужое АП) строку... Человек_Борща Win Api 8 18.09.2011 01:01
вместо memo передать в переменную bulldog5293 Работа с сетью в Delphi 5 24.12.2010 23:13
Не могу передать строку в функцию Никки Общие вопросы Delphi 4 18.09.2010 21:22
Слова из столбика - в строку с добавлением символа вместо разрыва строки Nash1 Microsoft Office Word 4 20.12.2009 00:19