Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Набор полей в 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]

а зачем нужны все поля из трех таблиц, причем даже не связанных никаким условием? или здесь не полный текст запроса?


Наверх

Титульная страница Поиск, карта сайта Написать письмо