Форум: "Базы";
Текущий архив: 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.076 c