Форум: "Базы";
Текущий архив: 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
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c