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




Вниз

Обновление записи. 


Malyatko   (2002-02-11 08:26) [0]

Уважаемые Метры баз данных. Появилась проблема с которой не могу справиться сам.А суть ее такова: есть таблица в которой 4 поля:

Cust_no - ключевое поле данной таблицы.
Firm_no - ссылки на номера фирм из другой таблице.
Tovar_no - ссылка на номере товаров из третей таблице.
Col - количество товара.

Необходимо изменить значения поля Col имеея значения Firm_no и Тоvar_no,не трогая Cust_no.
Пробовал сделать так:

if (FirstQuery.Locate("firm_no",firm_nomer,[loPartialKey]))
and (FirstQuery.Locate("tovar_no",tovar_nomer,[loPartialKey]))
then
begin
FirstQuery.Edit;
FirstQueryCOL.AsInteger:=NewCol;
FirstQuery.Post;
end;

Но как результат получал изменение в первом попавшейся записи где firm_no=firm_nomer,не учитывая значения tovar_nomer.

Не знает ли кто, как решить данную проблему? Буду благодарен за любую помощь.



fnatali   (2002-02-11 08:56) [1]

Попробуй так:
With Query1 do
begin
SQL.clear;
SQL.add("update table1 col=""+NewCol+""");
SQL.add("where firm_no=""+firm_nomer+"" and tovar_no=""+tovar_nomer+""");
execSQL;
end;
Или такой же запрос можно с параметрами сделать, передавая туда значения NewCol, firm_nomer и tovar_nomer.



Gregory   (2002-02-11 08:58) [2]

Используй SQL оператор UPDATE. Правда, если ты потом изменившиеся в БД данные сам перечитаешь (в том плане что в связных DataControl"ах они не поменяются).

1) Создай Query1 : TQuery
2) В свойстве SQL напиши

UPDATE table1
SET Col = :p_col
WHERE Firm_no = :p_firmno
AND Tovar_no = :p_tovarno

3) Зайди в свойство Params (через Object Inspector) и проставь типы для данных параметров (String, там или Integer ...)
4) Используй:

Query1.ParamByName( "p_firmno" ).AsInteger := firm_nomer;
Query1.ParamByName( "p_tovarno" ).AsInteger := tovar_nomer;
Query1.ParamByName( "p_col" ).AsInteger := NewCol;
Query.ExecuteSQL;



Sima   (2002-02-11 09:09) [3]

Так не пробовали? Ведь так еще легче.

if FirstQuery.Locate("firm_no;tovar_nomer",VarArrayOf([firm_nomer,tovar_nomer]),[loPartialKey])) then

begin
FirstQuery.Edit;
FirstQueryCOL.AsInteger:=NewCol;
FirstQuery.Post;
end;




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




Наверх





Память: 0.72 MB
Время: 0.014 c
14-19346          fliz                  2002-01-22 16:15  2002.03.07  
тест на понимае сути вещей :))


1-19256           Zergg                 2002-02-20 12:18  2002.03.07  
Про динамическую загрузку DLL


14-19326          Геннадий Михалев      2002-01-19 18:29  2002.03.07  
Вопрос коммерч. характера.


14-19305          Свой                  2002-01-17 23:40  2002.03.07  
Действия эксплорера


3-19050           Dreamer               2002-02-07 19:01  2002.03.07  
Написал кодик через SQL но уж лчень медленно, как его под Table переделать не могу понять :)