Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.05 c
2-1167221075
harusha
2006-12-27 15:04
2007.01.21
DLL


15-1167862627
Tirael
2007-01-04 01:17
2007.01.21
читал вот орешник...


15-1167825467
kaZaNoVa
2007-01-03 14:57
2007.01.21
Автоматизация сбора ресурсов


2-1167384513
RomanH
2006-12-29 12:28
2007.01.21
Передача массива в процедуру


3-1162509855
as77
2006-11-03 02:24
2007.01.21
Ошибка в запросе.Дата и параметры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский