Запрос к БД

YuriyV

Приветствую!В Query в свойстве SQL пишу запрос
select * from table2
В FieldsEditor выбираю поля, которые должны отображаться в DBGrid(в том числе и calculated поля).В DBGrid вижу следующее(Таблица2):
[b]таблица1_id [/b] |поле <b>2</b>
<b>21</b> | <b>00</b>:<b>02</b>:<b>00</b>
<b>25</b> | <b>15</b>:<b>10</b>:<b>49</b>
n... | ...........
Таблица 1 - справочник. Сейчас в таблице2 видно только поле id из таблицы1 Как мне отобразить текстовое поле из таблицы1 в таблице2. :
[b]таблица1_id [/b] |поле <b>2</b>
текст1 | <b>00</b>:<b>02</b>:<b>00</b>
текст2 | <b>15</b>:<b>10</b>:<b>49</b>
текст n.... | ...........
Спасибо!
19 ответов

YuriyV

Master-Detail


YuriyV

YuriyV,если я тебя правильно понял, то запрос должен быть таким
SELECT* FROM TABLE1, TABLE2 WHERE TABLE1.FIELD_ZKEY = TABLE2.FIELD_XKEY


YuriyV

а lookup для чего придумали?
<b>with</b> TStringField.Create(Self) <b>do</b>
 <b>begin</b>
 FieldName := 'НОВОЕ_ПОЛЕ_В_ДАТАСЕТЕ';
 DataSet := ClientDataSet_ОСНОВНАЯ_ТАБЛИЦА;
 FieldKind := fkLookup;
 KeyFields := 'ПОЛЕ_В_ОСНОВНОЙ_ТАБЛИЦЕ_КОТОРОЕ_НАДО_ЗАМЕНИТЬ'; <i>// ID</i>
 LookUpDataset := ClientDataSet_СПРАВОЧНАЯ_ТАБЛИЦА;
 LookUpKeyFields := 'КЛЮЧ_СПРАВОЧНИКА';
 LookUpResultField := 'ЗНАЧЕНИЕ_СПРАВОЧНИКА';
 Size := <b>80</b>;
 <b>with</b> FieldDefs.AddFieldDef <b>do</b>
 <b>begin</b>
 Name := FieldName;
 DataType := ftString;
 Size := <b>80</b>;
 <b>end</b>;
 <b>end</b>;


YuriyV

1) какой СУБД?2) если нормальный : а) лучше не использовать калкулате филедс а вместо их использовать операторы SQL б) отображение обедненных таблиц в сгл пишутся так:
select t2.*, t1.mytextfield from table2 t2
 inner join table1 t1
 on t2.t1_id = t1.id
----www.hramin.jino-net.ru


YuriyV

а поповоду калк фиелдс можно писать например такой селект
select t2.number_f1, t2.number_f2, .... , sum(t2.number_f1+<b>2</b>.number_f2) <b>as</b> mycalcfields
from table2 t2
----www.hramin.jino-net.ru


YuriyV

Как мне отобразить текстовое поле из таблицы1 в таблице2. :
Еще один вариант, наиболее близкий духу вопроса.Что-нибудь типа
alter table2 add column table1_name...

<b>for</b> c <b>in</b> (select id, name from table1)
loop
 update table2 <b>set</b> table1_name = c.name where id = c.id;
<b>end</b> loop;


YuriyV

Еще один вариант, наиболее близкий духу вопроса.Что-нибудь типа
alter table2 add column table1_name...

<b>for</b> c <b>in</b> (select id, name from table1)
loop
 update table2 <b>set</b> table1_name = c.name where id = c.id;
<b>end</b> loop;
2ALL : ерунда .... не слушайтесь. даже никогда не пытайтесь такую писать. 2SQLap : а что будет если в табле 1 поменяет когото имя???????----www.hramin.jino-net.ru


YuriyV

Еще один вариант, наиболее близкий духу вопроса.Что-нибудь типа
alter table2 add column table1_name...

<b>for</b> c <b>in</b> (select id, name from table1)
loop
 update table2 <b>set</b> table1_name = c.name where id = c.id;
<b>end</b> loop;
Фигасебе, вы совет дали челу... хоть бы смайл поставили. Его ж одмин с главпрогером пристрелят за такое


YuriyV

Фигасебе, вы совет дали челу... хоть бы смайл поставили. Его ж одмин с главпрогером пристрелят за такое
Судя по вопросу, отобразить надо именно в таблице. Чтож, пристрелят наверное, если уволить не судьба


YuriyV

Чуваку всего лишь надо отобразить. Это задача ГУЕв.Да, согласен, можно подготовить нужный вид селектом используя джойн.А можно и на клиенте, подучив доступный VCL. Насколько я понял, чел использует DBGrid для отображения и попробую предположить, что еще есть ввод данных, или фильтрация, как минимум. Значит данные из справочников могут использоваться не только для подмены в главном гриде, а еще дофига где.Исходя из этого, ему по любому надо тянуть эти справочники на форму при инициализации. Так лучше их вытянуть в отдельные датасеты и дальше уже работать как вздумается. Хочешь, лукап для грида, хочешь в листбокс на вводе.


YuriyV

Судя по вопросу, отобразить надо именно в таблице. Чтож, пристрелят наверное, если уволить не судьба
Дык он про DBGrid говорил же =)


YuriyV

SQLap читай книжки про РСУБД...----www.hramin.jino-net.ru


YuriyV

SQLap читай книжки про РСУБД...----www.hramin.jino-net.ru
Гы, эка налетели) Вам могу азбуку порекомендовать. Чем грид отличается от таблицы, и как правильно задавать вопросы


YuriyV

Дык он про DBGrid говорил же =)
Как мне отобразить текстовое поле из таблицы1 в таблице2. :
В упор не вижу грида)))


YuriyV

Ну хорош, хорош =)Топик криетор закинул удочку и свалил. А мы тут про книжки да азбуки беседы ведем.Лучше у него спросим, чего ж он на самом деле хотел =)


YuriyV

tempero,Да и спрашивать не надо). Хотел он то, что предлагаете вы, а вопрос задал совершенно по другому)


YuriyV

В упор не вижу грида)))
От же слепотупой я. SQLap, прошу прощения, слона не приметил. ))


YuriyV

YuriyV,если я тебя правильно понял, то запрос должен быть таким
SELECT* FROM TABLE1, TABLE2 WHERE TABLE1.FIELD_ZKEY = TABLE2.FIELD_XKEY
Спасибо, это то, что хотел.Всем откликнувшимся тоже благодарю.


YuriyV

SQLap, вы выиграли)