Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.05;
Скачать: 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 вся ветка

Текущий архив: 2004.09.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.056 c
3-1092053243
Dmitry
2004-08-09 16:07
2004.09.05
Проблема с полем Char в Interbase


1-1093208613
JohnJ
2004-08-23 01:03
2004.09.05
Парадокс или моя невнимательность?


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


1-1092813495
Sergo_NIG
2004-08-18 11:18
2004.09.05
Как отследить изменение свойства компонента Enabled?


1-1092905782
snake1977
2004-08-19 12:56
2004.09.05
QuickReport