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

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

Как выполнить запрос на выборку данных из нескольких таблиц? [D7, Paradox]


Gunek ©   (2006-11-01 23:25:00) 

Здравствуйте, многоуважаемые Мастера Delphi!

Проблема в следующем:
Когда я выбираю критерий отбора в combobox, то возникает ошибка: invalid use of keyword. Token: SELECT

Существуют 3 таблицы в БД:
avto.DB <Инвентарный_номер, Дата_покупки, Стоимость, Марка>
AZS.DB <Номер_выписки, Инвентарный_номер, Топливо, Выдано_литров>
Fprice.db <ТОПЛИВО, ЦЕНА>

В результате нужно вывести таблицу с тремя полями:
<Инвентарный_номер><Марка><Общие_затраты_на топливо>

Последнее получается путём суммирования затрат на конкретный вид топлива .
Вот фрагмент кода:

procedure TForm6.ComboBox1Change(Sender: TObject);
begin
query1.Close;
  IF COMBOBOX1.ItemIndex=0 then
begin
query1.SQL.Add(' SELECT Avto.Инвентарный_номер, Avto.Марка, SUM(  Azs.Выдано_литров * Fprice.ЦЕНА  )');
query1.SQL.Add(' FROM "avto.DB" Avto');
query1.SQL.Add(' INNER JOIN "AZS.DB" Azs');
query1.SQL.Add(' ON  (Avto.Инвентарный_номер = Azs.Инвентарный_номер)');
query1.SQL.Add(' INNER JOIN "Fprice.db" Fprice');
query1.SQL.Add(' ON  (Azs.топливо = Fprice.топливо)');
query1.SQL.Add(' Group BY Avto.Инвентарный_номер, Avto.Марка');
                               end;


Anatoly Podgoretsky   (2006-11-02 07:43:00) [1]

> Gunek  (02.11.2006 2:47:11)  [11]

Точно также помогло бы и Clear
Но ты партизан.


Gunek   (2006-11-02 02:47:00) [2]

Вот и решилась задача!!!

query1.Close;
 query1.SQL.text:=('SELECT Avto.inv, Avto.marka, SUM(Azs.vl*Fprice.price) from "avto.DB" Avto INNER JOIN "AZS.DB" Azs ON (Avto.inv=Azs.inv) INNER JOIN "Fprice.db" Fprice ON (Azs.fuel=Fprice.fuel) group BY Avto.inv, Avto.marka');
 query1.Open;


Petr V. Abramov   (2006-11-02 01:01:00) [3]

> Gunek ©   (02.11.06 00:56) [8]
невозможно.
> C Clear программа вообще не запускается.
еще один довод в пользу версии, что не в запросе дело


Anatoly Podgoretsky   (2006-11-02 00:59:00) [4]

> Gunek  (02.11.2006 0:56:08)  [8]

Значит не там поставил, Clear никогда не мешает, даже если уверен в чистоте


Gunek   (2006-11-02 00:56:00) [5]

C Clear программа вообще не запускается.
Факт: С одной таблицей всё получалось. Может быть query(или не query) не видит поля из других таблиц? Возможно ли устранить это при помощи Fields editor?


Anatoly Podgoretsky   (2006-11-02 00:26:00) [6]

> Gunek  (01.11.2006 23:41:02)  [2]

> Возможно, я упустил что-нибудь в свойствах Query?

Конечно упустил, а очистять от старого Пушкин будет.
Добавь Clear


Petr V. Abramov   (2006-11-02 00:22:00) [7]

ну смотри. если запрос везде работает, он нормальный? (а ты уверен, что везде, кроме как в том контексте, в котором задал вопрос) - наверное, да

проблема где? а хрен его знает, но не в запросе, верно?
если это так, разбирайся, и задавай новый вопрос


Gunek   (2006-11-02 00:15:00) [8]

Заменил имена полей, но ошибка та же.

query1.SQL.Add(' SELECT Avto.Inv, Avto.Marka, SUM(  Azs.Vl*Fprice.price  )');
query1.SQL.Add(' FROM "avto.DB" Avto');
query1.SQL.Add(' INNER JOIN "AZS.DB" Azs');
query1.SQL.Add(' ON  (Avto.Inv=Azs.Inv)');
query1.SQL.Add(' INNER JOIN "Fprice.db" Fprice');
query1.SQL.Add(' ON  (Azs.Fuel=Fprice.Fuel)');
query1.SQL.Add(' Group BY Avto.Inv, Avto.Marka');


Petr V. Abramov   (2006-11-01 23:52:00) [9]

> Gunek ©   (01.11.06 23:41) [2]
или комбобокса. :)
> Возможно, я упустил что-нибудь в свойствах Query?
это врядли. сильно надеюсь, что никаких умных тулзов, которые меняют текст запроса, нету?


MsGuns   (2006-11-01 23:47:00) [10]

Мне не нравится, что Вы используете русские имена полей. И очевидно, что не только мне ;))


Gunek   (2006-11-01 23:41:00) [11]

Запрос выполняется в SQL Builder именно так как хотелось бы.
Возможно, я упустил что-нибудь в свойствах Query?


Petr V. Abramov   (2006-11-01 23:36:00) [12]

скорее всего, со скобками не так все хорошо :)

поиграйтесь с запросом в каком-нить SQL Explorer`e
убедитесь, что проблема именно в нем

шансы получить ответ на такой вопрос, как правило, малы, хотя задали Вы его нормально :)
разбирайтесь


Наверх

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