![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Набор полей в Query при 3-х таблицах [D7, XP]
Alex8 © (2007-11-02 10:06:00)Здравствуйте !
Если в свойстве SQL компонента Query1 я ссылаюсь на
3 таблицы (A, B, C), т.е "Select * From A, B, C " , то при
обращении к редактору полей после нажатия кнопки "Add" (любой)
происходит выход из DELPHI без всякого уведомления и без сохранения
изменений.
В случае 2-х таблиц набор полей формируется нормапьно.
Может быть я что-то не так делаю или существуют ограничения
на число используемых таблиц ?. Спасибо.
Alex8 (2007-11-02 12:08:00) [1]> Главное - не поля, а связи между таблицами.
> Показывай, что получилось!
Просто неприятие звездочки привело к тому, что
Вместо "Select * From A, B, C"
записать в исходном SQL
"Select A.p1, B.p2, C.p3 From A, B, C"
и после нажатия "Add all Fields" набор
полей сформировался.
Т.е. дело все-таки в суммарном числе полей.
А связи между таблицами будут указаны
при програмном формировании текста
рабочего Select.
Тут проблем нет. Части записей талицы А
соответствует группа записей таблицы В
(связь по ключу). Аналогично. Некоторым записям талицы В
соответствует группа записей таблицы С.
Еще раз спасибо.
ЮЮ (2007-11-02 11:07:00) [2]>
> Спасибо. Все понял. Поля сформированы.
> Немного дольше, чем через звездочку,
> но это не так важно.
Главное - не поля, а связи между таблицами.
Показывай, что получилось!
Alex8 (2007-11-02 10:57:00) [3]> Вообще то решающий фактор Голова ....
Спасибо. Все понял. Поля сформированы.
Немного дольше, чем через звездочку,
но это не так важно.
Anatoly Podgoretsky (2007-11-02 10:47:00) [4]
> > решающим фактором является
> > число таблиц
>
> А кто бы сомневался :)
Вообще то решающий фактор Голова, а число таблиц - количественный
ЮЮ (2007-11-02 10:43:00) [5]
Первоначально, надо связать таблицы, чтобы каждой записи в одной таблице соответствовало нужное количество записей из другой.
А в случае SELECT FROM А, В
для
А (Id) и B(Id)
1 1
2 2
3 3
В результате получаем 9 записей
1 1
1 2
1 3
...
3 2
3 3
Это и есть "произведение" таблиц.
> решающим фактором является
> число таблиц
А кто бы сомневался :)
Alex8 (2007-11-02 10:36:00) [6]> а зачем нужны все поля из трех таблиц.....
Мне не нужны все поля. Но как отобрать нужные,
если в SQL изначально не указана нужная таблица ?
Select * From A, B, C вносится первоначально для
формирования нужного набора полей, которые берутся
из 3-х таблиц. Это позволит в дальнейшем обойтись
одним запросом.
А потом я проверил - решающим фактором является
число таблиц, а не число полей.
Anatoly Podgoretsky (2007-11-02 10:16:00) [7]> ЮЮ (02.11.2007 10:13:02) [2]
Это декартовое в квадрате.
А за звездочку увольнять без выходного пособия.
ЮЮ (2007-11-02 10:13:00) [8]Декартово произведение записей Зх "полновесных" таблиц не выдержит ни одно приложение.
См.
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1193910910&n=3
clickmaker (2007-11-02 10:10:00) [9]а зачем нужны все поля из трех таблиц, причем даже не связанных никаким условием? или здесь не полный текст запроса?