![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как выполнить запрос на выборку данных из нескольких таблиц? [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
убедитесь, что проблема именно в нем
шансы получить ответ на такой вопрос, как правило, малы, хотя задали Вы его нормально :)
разбирайтесь