![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
связанные таблицы
Женя © (2010-03-12 03:19:00)Всем доброй ночи! Помогите пожалуйста новичку решить проблему. Проблема следующая: пытаюсь связать две таблицы с помощью query но неполучается. сам запрос следующий:
select *
from CKBI,telephone
where keylink=key1
Связь в таблицах вообще отсутствует, тоесть таблица с ключевым полем keylink выдает абсолютно все игнорируя условие. Может я что не так делаю? Пожалуйста помогите, заранее благодарен!
Женя (2010-03-12 18:30:00) [1]Спасибо))))))))))))
Sergey13 (2010-03-12 16:44:00) [2]> [28] Женя (12.03.10 16:28)
> Еще одна просьба, не мог бы ты сбросить ссылки на тему мастер-детальное связывание таблиц.
Легко.
http://www.google.ru/
8-)
Женя (2010-03-12 16:28:00) [3]Да, все получилось, огромное спасибо! Еще одна просьба, не мог бы ты сбросить ссылки на тему мастер-детальное связывание таблиц. Я имею ввиду доступные для понимания простым смертным))
Sergey13 (2010-03-12 15:56:00) [4]> [26] Женя (12.03.10 15:30)
:keylink - это параметр, который по идее должен заполняться значением ключевого поля из материнского датасета, который привязан к датасорсу, который у тебя CKBISource. Это мастер-детальное связывание таблиц.
Если материнский датасорс не указывать, то можно в принципе сделать это руками, повесив на событие афтерскролл материнского датасета присваивание значения этому параметру и переоткрытие дочернего датасета.
Не понял - у тебя заработало или нет?
Женя (2010-03-12 15:30:00) [5]
> Anatoly Podgoretsky © (12.03.10 14:45) [25]
Обьясняю, если бы я не хотел понимать что делаю, то разве не проще бы было это сделать заменив компонент query на компонент table, где кстати все прекрасно работало!
> Sergey13 © (12.03.10 14:43) [24]
Обьясните пожалуйста строку:
SQL=select * from telephone WHERE keylink=: keylink
я так понимаю что keylink- переменная, но каким образом в нее передается какое либо значение поля key1? Или этой переменной нужно присваивать значение уже в ходе программы, с помощью команды:
tlfQuery.Parameters.ParamByName('keylink').Value:=CKBIQuery.FieldValues['key1'];
Anatoly Podgoretsky (2010-03-12 14:45:00) [6]> Sergey13 (12.03.2010 14:03:21) [21]
А ему понимать не надо, ему надо выполнить задание.
Sergey13 (2010-03-12 14:43:00) [7]> [22] Женя (12.03.10 14:17)
Тогда запрос должен быть такой
tlfquery('DataSource=CKBISource',SQL= select * from telephone WHERE keylink=:keylink)->tlfsource('DataSet=tlfquery')
Женя (2010-03-12 14:21:00) [8]
> Плохиш © (12.03.10 14:01) [20]
Что за методичку вы имеете ввиду?
Женя (2010-03-12 14:17:00) [9]
> Sergey13 © (12.03.10 14:03) [21]
В таблице CKBI (ключевое поле key1, счетчик) хранятся данные людей (ФИО, год рожденья, и т.д.). Но поскольку номеров телефонов у одного человека может быть несколько, я создаю еще одну таблицу telephone, где в строки поля keylink прописываю соответствующие значения поля key1, для осуществления фильтрации номеров текущего человека с индексом key1. И затем хочу отобразить эти данные с помощью двух гридов. Тоесть например при переключении абонента в левом гриде, в правом отображались номера его телефонов
Sergey13 (2010-03-12 14:03:00) [10]> [19] Женя (12.03.10 13:51)
так и надо сказать ему WHERE telephone.keylink =1
Ты бы задачу лучше описал свою. А то чувствуется, что ты не понимешь что делаешь.
Плохиш (2010-03-12 14:01:00) [11]
> Женя (12.03.10 13:51) [19]
>
>
В вашей методичке это раздел, в названии которого упоминаются слова Master/Detail.
Женя (2010-03-12 13:51:00) [12]
> Sergey13 © (12.03.10 13:04) [17]
а что нужно прописать, чтобы выдало не произведение, а например если курсор в CKBIquery указывает на строку где key1=1(при условии что 1 - индекс который не повторяется), то выдало в соседнем гриде все строки где поле keylink=1 (компонента tlfquery)?
Anatoly Podgoretsky (2010-03-12 13:35:00) [13]> Женя (12.03.2010 12:20:12) [12]
Под алиасом понимается псевдоним, просто не переведено.
Sergey13 (2010-03-12 13:04:00) [14]> [15] Женя (12.03.10 12:36)
> я так понимаю должно выдать все строки где поле telephone.keylink = CKBI.key1
Должно выдать произведение (количественно) всех записей одной таблицы и всех другой. Т.е. если в каждой таблице есть 1 запись с key1=1, а в другой 10 записей с keylink=1, то выдаст 10 (10*1) записей в результирующем наборе при WHERE telephone.keylink = CKBI.key1.
Плохиш (2010-03-12 12:38:00) [15]
> Женя (12.03.10 12:36) [15]
goto [7]
Женя (2010-03-12 12:36:00) [16]
> Sergey13 © (12.03.10 12:23) [13]
> Это как? Число похоже на другое?
WHERE telephone.keylink = CKBI.key1
Да, при совпадении числа поля key1 с полем keylink, я так понимаю должно выдать все строки где поле telephone.keylink = CKBI.key1. Если ошибаюсь, то подскажите пожалуйста как сделать правильно, и подскажите пожалуйста, как красиво писать код?
Ega23 (2010-03-12 12:30:00) [17]Ещё раз, в
Select * fromуберите звёздочку. Либо у ней алиас таблицы поставьте.
Sergey13 (2010-03-12 12:23:00) [18]> [9] Женя (12.03.10 12:12)
> WHERE telephone.keylink like CKBI.key1
Это как? Число похоже на другое?
> [10] Amir (12.03.10 12:12)
Что из запроса
> [0] Женя (12.03.10 03:19)
тебе не понятно?
Женя (2010-03-12 12:20:00) [19]Прошу прощение за возможно глупый вопрос,но что подразумевается под алиасом?
Плохиш (2010-03-12 12:16:00) [20]
> Женя (12.03.10 12:12) [9]
И как это вяжется с запросом из > Женя (12.03.10 03:19)