Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Как выполнить запрос на выборку данных из нескольких таблиц?   Найти похожие ветки 

 
Gunek   (2006-11-01 23:25) [0]

Здравствуйте, многоуважаемые Мастера 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;


 
Petr V. Abramov ©   (2006-11-01 23:36) [1]

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

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

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


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

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


 
MsGuns ©   (2006-11-01 23:47) [3]

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


 
Petr V. Abramov ©   (2006-11-01 23:52) [4]

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


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

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

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-02 00:22) [6]

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

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


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

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

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

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


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

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


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

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

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


 
Petr V. Abramov ©   (2006-11-02 01:01) [10]

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


 
Gunek ©   (2006-11-02 02:47) [11]

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

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;


 
Anatoly Podgoretsky ©   (2006-11-02 07:43) [12]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.047 c
15-1166810910
RL69
2006-12-22 21:08
2007.01.21
Блокнот


2-1167821736
daser
2007-01-03 13:55
2007.01.21
Как удалить строку из текстового файла, содержащую...


15-1167206302
k2
2006-12-27 10:58
2007.01.21
В свете последних веток


6-1155834995
Tiberius
2006-08-17 21:16
2007.01.21
Как привязать файл к html-форме


2-1167757954
zol
2007-01-02 20:12
2007.01.21
заблокировать(запретить) ввод в TEdit