Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];




Вниз

Обновление таблицы 


gegc   (2002-02-18 15:38) [0]

есть таблица1:
клиент,дата,товар,цена,количество,стоимость

есть таблица2:
клиент,товар,цена
в ней указаны скидочные цены на определнные товары определённым клиентам

нужно пересчитать таблицу1 по таблице2

по всякокому пробовал, никак не получается обновить. В select"e всё получатось, А в update"е видители нельзя связывать 2 таблицы. Неужели мне придётся делать через select into таблица3

что делать?



Johnmen   (2002-02-18 15:43) [1]

А что за база то ?



zver   (2002-02-18 15:56) [2]

2 Johnmen
DBF Local SQL



Сергей Иванов   (2002-02-18 16:04) [3]

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

with Table1 do begin
while not EOF do begin
if Table2.Locate("CLIENT;TOVAR", VarArrayOf([CLIENT, TOVAR]), []) then begin
Edit;
FieldByName("SUMMA").Value := FieldByName("Amount").AsFloat*Table2.FieldByName("Price").AsFloat;
Post;
end; {if Table2.Locate}
Next;
end; {while not Table1.EOF}
end; {with Table1}



gegc   (2002-02-18 16:34) [4]

2 Сергей Иванов

гм. спасибо. Но мне хотелось обойтись без дельфей, одним эскуэлем.



Сергей Иванов   (2002-02-18 16:49) [5]

ГМ. А сикуэль у тебя не из дельфей?
Поставь вместо Table Query.
И апдэйть на здоровье.
Вместо ...
Edit;
FieldByName("SUMMA").Value := FieldByName("Amount").AsFloat*Table2.FieldByName("Price").AsFloat;
Post;
end;
...
Будет что-нибудь:
SQL у Query -
"Update table 1 set summa=:SUM_OF where (client=:client) and (tovar=:tovar)";
и далее:
while not ...
with Query do begin
Params.ParamValues["SUM_of"] := Query1.FieldByName("Amount").AsFloat*Query2.FieldByName("Price").AsFloat;
Params.ParamValues["client"] := Query2.FieldByName("Client").Value;
Params.ParamValues["tovar"] := Query2.FieldByName(""tovar").Value;
Prepare; ExecSQL;



gegc   (2002-02-18 16:56) [6]

не из дельфей :(



Mambet   (2002-02-19 06:16) [7]

А так не подойдет?

update table1 t1 set cena=
(select min(t2.cena) from table2 t2
where t2.Client=t1.Client and
t2.Tovar =t1.Tovar);
update table2 set stoimost=cena*kol;



Mambet   (2002-02-19 08:16) [8]

Сорри.Во втором апдейте конечно же table1 :)



GreySerg   (2002-02-19 15:47) [9]

позволю себе чуть обновить версию Mambet , чтобы было одним sql-ем:
update table1 t1
set price = (select min(price) from table2 t2 where
t2.Client=t1.Client and t2.tovar=t1.tovar),
summa = price*amount




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.014 c
3-57340           Yuri Btr              2002-02-18 11:32  2002.03.18  
Помогите с SQL+ADO


7-57528           KLM                   2001-12-17 04:36  2002.03.18  
Все про COM порты


1-57367           Vacheslav             2002-03-04 18:35  2002.03.18  
Color --> String --> Color


1-57379           Kozhanov              2002-03-01 11:44  2002.03.18  
Про Handle...


4-57561           Mastak                2002-01-20 15:21  2002.03.18  
Помогите!!! Нужна инфа по поводу функции...