Вниз
Скачать: CL | DM;

Обновление таблици в БД   Найти похожие ветки 

 
syte_ser78 ©   (2004-08-17 11:08) [0]

Поделитесь элементарным примером для сабжа.
Тоесть есть Таблица А с индексным полем - "number" и есть таблица Б с нимже. Если в таблице А запись из Б не найдена, то она добавляется, если найдена, то меняется.


 
Anatoly Podgoretsky ©   (2004-08-17 11:13) [1]

Edit vs Append


 
Sandman25 ©   (2004-08-17 11:15) [2]

BEGIN WORK;
BEGIN
 ON EXCEPTION SET lSqlErr, lIsamErr, lErrMsg
   ROLLBACK WORK;
   RAISE EXCEPTION  lSqlErr, lIsamErr, lErrMsg;
 END EXCEPTION;
 FOREACH
   SELECT number
     INTO lNumber
     FROM tableA
   BEGIN
     ON EXCEPTION IN (-268)  -- unique constraint violated
       UPDATE tableB SET number = number + lNumber;
     END EXCEPTION;
     INSERT INTO tableB(number) VALUES (lNumber);
   END
   END FOREACH;
 COMMIT WORK;
END


:)


 
Anatoly Podgoretsky ©   (2004-08-17 11:20) [3]

А чего смеешься, разве он что то конкретное сказал, или ты над ним смеешься?


 
syte_ser78 ©   (2004-08-17 11:23) [4]

Я прикола не понял но наверно надо мной.
2 Anatoly Podgoretsky  - научите пожалуйста, как более конкретно задать вопрос. Просто меня ответ интересует.


 
Sandman25 ©   (2004-08-17 11:24) [5]

Радуюсь тому, что в кои-то веки могу привести код на родном SPL языке.


 
Sandman25 ©   (2004-08-17 11:25) [6]

[4] syte_ser78 ©   (17.08.04 11:23)

Тип СУБД указывайте, компоненты доступа, где необходимо совершить операцию (на клиенте через запросы/TTable или на сервере через хранимые процедуры).


 
Жук ©   (2004-08-17 11:29) [7]


> если найдена, то меняется

Что меняется ? "Найдена" - это "А.намбер=Б.намбер" ?


 
syte_ser78 ©   (2004-08-17 11:32) [8]


> Тип СУБД указывайте, компоненты доступа, где необходимо
> совершить операцию (на клиенте через запросы/TTable или
> на сервере через хранимые процедуры).

Delphi7 Операцию совершать на клиенте (DataSource Table)


 
syte_ser78 ©   (2004-08-17 11:33) [9]


>
> > если найдена, то меняется
>
> Что меняется ? "Найдена" - это "А.намбер=Б.намбер" ?

Если найдена запись в таблице А (по индексному полю) то она вся меняется на запись из Б


 
Anatoly Podgoretsky ©   (2004-08-17 11:35) [10]

syte_ser78 ©   (17.08.04 11:23) [4]
Этому учат в детстве


 
Sandman25 ©   (2004-08-17 11:38) [11]

if TableB.Locate("number", TableAnumber.AsVariant, []) then
begin
 TableB.Edit;
 TableBNumber.Value := TableANumber.Value + TableBNumber.Value
end
else
begin
 TableB.Append;
 TableBNumber.Value := TableANumber.Value;
end;
TableB.Post;


 
syte_ser78 ©   (2004-08-17 11:43) [12]


> [11] Sandman25 ©   (17.08.04 11:38)

Спасибо! Смысл понятен.


 
syte_ser78 ©   (2004-08-17 11:58) [13]

Если не сложно еще один вопросик.
на строку
TableB.Post;
выскакивает -
TableA DataSet not in edit or insert mode

Имена таблиц заменены на те что были в примере.


 
syte_ser78 ©   (2004-08-17 12:10) [14]

Исправил!


 
Anatoly Podgoretsky ©   (2004-08-17 12:17) [15]

syte_ser78 ©   (17.08.04 11:58) [13]
А то что до записи требуется перевести в этот режим.


 
syte_ser78 ©   (2004-08-17 13:59) [16]


> [15] Anatoly Podgoretsky ©   (17.08.04 12:17)
> syte_ser78 ©   (17.08.04 11:58) [13]
> А то что до записи требуется перевести в этот режим.

Да нет, с этой проблемой я разобрался. Причина была в другом.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.021 c
1-1092847654
RaPToR_1
2004-08-18 20:47
2004.09.05
прорисовка


8-1087747242
Илья
2004-06-20 20:00
2004.09.05
MIDI - работа на низком уровне


1-1092635057
r9000
2004-08-16 09:44
2004.09.05
Преобразование времени


3-1092124172
pavel_guzhanov
2004-08-10 11:49
2004.09.05
Текст запроса


14-1092572756
YurikGL
2004-08-15 16:25
2004.09.05
Черный список вредоносных программ




   Наверх