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