Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обновление записи. [D6, IB6.x]


Malyatko ©   (2002-02-11 08:26:00) 

Уважаемые Метры баз данных. Появилась проблема с которой не могу справиться сам.А суть ее такова: есть таблица в которой 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.

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


Sima   (2002-02-11 09:09:00) [1]

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

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

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


Gregory   (2002-02-11 08:58:00) [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;


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

Попробуй так:
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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо