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

Вниз

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

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

Наверх





Память: 0.49 MB
Время: 5.898 c
15-1162848484
Bogdan1024
2006-11-07 00:28
2006.11.26
Как посмотреть pdf?


2-1162968666
LexXL
2006-11-08 09:51
2006.11.26
записать переменную в файл


2-1163084546
Greenchel
2006-11-09 18:02
2006.11.26
Фильтрация символов в TEdit


1-1160053712
atruhin
2006-10-05 17:08
2006.11.26
Проблеммы с двумя TSpliter


10-1126443761
Grant
2005-09-11 17:02
2006.11.26
Delphi и PowerPoint





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский