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

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

Переменная в запросе


Gunek ©   (2006-11-07 16:13:00) 

Здравствуйте, Мастера Delphi!
Возник очередной вопрос. Значение некой переменной x типа double нужно прибавить к значению поля cost типа number. Как это сделать?
Я пробую так:
query1.SQL.Text:='select inv,marka,cost+'+floattostr(x)+' from avto;';
но прибавляется в каждой записи одно и тоже число.


Плохиш   (2006-11-07 19:07:00) [1]

http://www.yandex.ru/yandsearch?stype=&nl=0&text=delphi+%E2%FB%F7%E8%F1%EB%FF%E5%EC%FB%E5+%EF%EE%EB%FF


Gunek   (2006-11-07 19:01:00) [2]

Создаёшь вычисляемое поле и в событии OnCalcFields делаешь всё, что хочешь.
Можно чуть поподробней?


Плохиш   (2006-11-07 19:01:00) [3]


> Gunek ©   (07.11.06 18:58) [17]

[16]


Gunek   (2006-11-07 18:58:00) [4]

>Плохиш ©   (07.11.06 18:48) [15]
Что-то вроде этого, только чтобы работало.


Плохиш   (2006-11-07 18:51:00) [5]


> Gunek ©   (07.11.06 18:47) [14]

Ну значит тебе не повезло.

Создаёшь вычисляемое поле и в событии OnCalcFields делаешь всё, что хочешь.


Плохиш   (2006-11-07 18:48:00) [6]


> Gunek ©   (07.11.06 18:35) [12]

Это что ли нада?

select a.inv, a.marka, a.cost +
 (select SUM(Стоимость) from query2 where inv=a.inv) +
 (select SUM(Затраты) from query4 where inv=a.inv)
from avto a


Gunek   (2006-11-07 18:47:00) [7]

>Дело в том, что для локальных БД типа Парадокс не работает неявное соединение вложенных запросов с основным запросом. Т.е. вложенные запросы выполняются один раз! Причём до начала обхода по внешнему запросу. А значит и условия вложенных запросов невыполнимы и всегда (в данном случае) будут давать NULL.
SELECT
Avto.Inv,
Avto.Marka,
AVTO.COST +
(SELECT sum(azs.vl*fprice.price) FROM azs, fprice
 WHERE avto.inv=azs.inv and azs.fuel=fprice.fuel) +
(SELECT SUM(REMONT.COST) FROM remont WHERE avto.inv=remont.inv)
FROM avto

И в поле cost остаются пустые ячейки


Правильный Вася   (2006-11-07 18:40:00) [8]


>  некая особенность Paradox помешала

да ну!? какая?


Gunek   (2006-11-07 18:35:00) [9]

Без sql как это можно сделать?
Или как только при помощи sql?


Сергей М.   (2006-11-07 16:51:00) [10]


> Да нет, тоже самое получается.


Что хотел, то и получается.

Что прибавил, то и получил.


Gunek   (2006-11-07 16:48:00) [11]

>Это делается в БД SQL-запросом модификации, а не хитрожелтыми >манипуляциями на клиенте
Да пробовал, но некая особенность Paradox помешала


Gunek   (2006-11-07 16:47:00) [12]

>s := floattostr(x);
>query1.SQL.Text:= 'select inv,marka,cost+' + s + ' from avto;'
Да нет, тоже самое получается.


Desdechado   (2006-11-07 16:46:00) [13]

Gunek ©   (07.11.06 16:43) [7]
Это делается в БД SQL-запросом модификации, а не хитрожелтыми манипуляциями на клиенте


Gunek   (2006-11-07 16:43:00) [14]

задачу-то изначальную опиши подробно ..
Нужно при совпадении в поле inv (сравнивая его знач. в табл. avto c значениями в табл. azs и remont)  нарастить X(значения берутся из  соотв. поля (типа number)). потом его значение вписать в поле cost табл. avto в соотв. по знач. inv записи.


Сергей М.   (2006-11-07 16:35:00) [15]

var
 s:String;

....

s := floattostr(x);

...

query1.SQL.Text:= 'select inv,marka,cost+' + s + ' from avto;'


Gunek   (2006-11-07 16:26:00) [16]

> переменная-то у тебя одна, вот и прибавляется ее значение
Переменная одна, каждый раз она обнуляется и затем берёт новые значения

for i:=1 to query1.recordcount do begin
    x:=0;
    for j:=1 to query2.RecordCount do begin
 if
query1.FieldByName('inv').AsInteger=query2.FieldByName('inv').AsInteger then
x:=x+query2.FieldByName('Стоимость').AsFloat;
query2.Next;
                                     end;
    for k:=1 to query4.RecordCount do begin
   if
query1.FieldByName('inv').AsInteger=query4.FieldByName('inv').AsInteger then
x:=x+query4.FieldByName('Затраты').AsFloat;
query4.Next;  
                                       end;
query2.First;
query4.First;
query1.SQL.Text:='select inv,marka,cost+'+floattostr(x)+' from avto;';
query1.Close;
query1.Open;
query1.Next;
                                     end;
        end;


Сергей М.   (2006-11-07 16:24:00) [17]


> А так правильно, как я пробую?


А что ты "пробуешь"-то ?

задачу-то изначальную опиши подробно ..


Desdechado   (2006-11-07 16:21:00) [18]

> но прибавляется в каждой записи одно и тоже число.
1. использовать параметры, а то нарвешься на непривычный десятичный разделитель и будет у тебя на один столбик больше
2. переменная-то у тебя одна, вот и прибавляется ее значение


Gunek   (2006-11-07 16:21:00) [19]

А так правильно, как я пробую?


Сергей М.   (2006-11-07 16:17:00) [20]


> прибавляется в каждой записи одно и тоже число


Какое ты "прибавляешь", такое и "прибавляется". Чему ж тут удивляться ?


Наверх

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