Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > TDBGrid


Автор: pavelv 17.7.2006, 06:50
У меня есть две таблицы на InterBase. В одной помимо кучи инфы хранятся номера, информация о которых занесена в другую таблицу - справочник.
Тоесть к примеру Table1:
name - varchar(25)
num - int
Table2:
info - varchar(25)
number - int

Я хочу в гриде отобразить информацию из 1ой таблицы, но вместо num показать info из таблицы два, при условии что num совпал с number. Не могу найти куда вписать такой sql запрос, чтобы всё отображалось?

P.S> Надеюсь в нужный раздел написал, а то вроде в оба подходит. 

Автор: Ramin 17.7.2006, 09:43
Цитата

Не могу найти куда вписать такой sql запрос, чтобы всё отображалось


как это где?
DataSet.SQL.Text:='// сюда'; 

воопшето компоненты доступа на БД какие? 

Автор: ТоляМБА 17.7.2006, 09:48
Код

Select Table1.Name, Table2.Info
From table1
Inner join table2
on table1.num=table2.number
 

Автор: pavelv 17.7.2006, 10:32
дане sql запрос как написать я понимаю.
Ramin поподробней можно.
У меня DBGrid1:TDBGrid
У него в датасурс выбрана table1. И значит мне доступна инфа только из table1, как мне завести колонку в этом DbGrid1, чтобы там отобразилась инфа из table2 учитывая вышесказанные условия. 

P.S> Толи я тормоз, но чота dataset(я TibQuery пользуюсь) тут непричем. Ты мне сказал компонент для выполнения sql запроса, но как этот запрос к гриду привязать?  

Автор: Ramin 17.7.2006, 10:38
Цитата(pavelv @ 17.7.2006,  10:32)
дане sql запрос как написать я понимаю.
Ramin поподробней можно.
У меня DBGrid1:TDBGrid
У него в датасурс выбрана table1. И значит мне доступна инфа только из table1, как мне завести колонку в этом DbGrid1, чтобы там отобразилась инфа из table2 учитывая вышесказанные условия. 

P.S> Толи я тормоз, но чота dataset(я TibQuery пользуюсь) тут непричем. Ты мне сказал компонент для выполнения sql запроса, но как этот запрос к гриду привязать?

да вам ешё книжки почитать нужно! для этого ТIBТабле вам не поможет нужно исползывать TIBQuery!

TibQuery->TDataSource->TDBGrid...

Код

dbgrid1.datasource.dataset.close;
 dbgrid1.datasource.dataset.sql.clear;
 dbgrid1.datasource.dataset.sql.add('Select Table1.Name, Table2.Info');
 dbgrid1.datasource.dataset.sql.add('From table1 Inner join table2');
 dbgrid1.datasource.dataset.sql.add('on table1.num=table2.number');
dbgrid1.datasource.dataset.open;


 

Автор: pavelv 17.7.2006, 11:32
Если честно я просто не шипко ориентируюсь в этих компонентах для БД. Но в TIBTable видно какие-то поля MasterSource, KeyFields....в общем есть подозрение, что через него тоже можно выудить поле из другой таблицы. Заморачиваться не стал, сейчас делаю через TIBQuery и новый DataSource. 
Ramin спасибо конечно за помощь....видимо я плохо вопрос сформулировал, хотелось конечно без новых DataSource и прочей лабуды ввести sql запрос непосредственно в Grid...как я понял такого сделать нельзя. 

Автор: SergeBS 17.7.2006, 12:59
pavelv, 
Fields Editor: New Field -> назови например numinfo, type=string, size = 25 - как у info, Field type = lookup, 
Dataset = кто к table2 подключен.
keyfields =  num (table1) 
lookup keys = number (table2)
Result Field = info (table2)
Все. Dublclick на гриде, это поле отражающем(таблицу 1) - выкатит (по умолчанию) - кнопку-треугольник, по кнопке - список таблицы 2(info)
Это если редактировать надо. А если просто отображать - запрос как у ТоляМБА-IBQuery-datasource-dbgrid. 
 

Автор: Mu57Di3 18.7.2006, 09:20
Предыдущий пост верен но вот еще вариант SQL запрос
Код

select t1.name, t2.info from Table1 t1, Table2 t2
where t1.num = t2.number
group by t1.name, t2.info

Закидывай этот запрос в IBQuery и подсоединяй его к своему набору данных. Должон сделать все что требуется. 

Автор: pavelv 18.7.2006, 11:17
Всем спасибо сделал через TIBQuery. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)