Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.26;
Скачать: CL | DM;

Вниз

Переменная в запросе   Найти похожие ветки 

 
Gunek ©   (2006-11-07 16:13) [0]

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


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


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


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


 
Gunek ©   (2006-11-07 16:21) [2]

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


 
Desdechado ©   (2006-11-07 16:21) [3]

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


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


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


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

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


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

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

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:35) [6]

var
 s:String;

....

s := floattostr(x);

...

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


 
Gunek ©   (2006-11-07 16:43) [7]

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


 
Desdechado ©   (2006-11-07 16:46) [8]

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


 
Gunek ©   (2006-11-07 16:47) [9]

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


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

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


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


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


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

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


 
Gunek ©   (2006-11-07 18:35) [12]

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


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


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

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


 
Gunek ©   (2006-11-07 18:47) [14]

>Дело в том, что для локальных БД типа Парадокс не работает неявное соединение вложенных запросов с основным запросом. Т.е. вложенные запросы выполняются один раз! Причём до начала обхода по внешнему запросу. А значит и условия вложенных запросов невыполнимы и всегда (в данном случае) будут давать 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:48) [15]


> 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


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


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

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

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


 
Gunek ©   (2006-11-07 18:58) [17]

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


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


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

[16]


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.11.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.031 c
11-1139554513
sff
2006-02-10 09:55
2006.11.26
VCL2MCK


2-1162887021
V.I.P
2006-11-07 11:10
2006.11.26
работа с двумя таблицами выручайте


6-1152085095
Квэнди
2006-07-05 11:38
2006.11.26
Ping с параметрами


9-1137086278
Galiaf
2006-01-12 20:17
2006.11.26
DCE в GLScene.


15-1163020114
Unit
2006-11-09 00:08
2006.11.26
Ресурс для новичков