![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
И снова про транзакции и обновление [D7, IB6.x]
For © (2004-11-28 03:28:00)Подскажите тупому новичку, как правильно реализовать обновление таблиц с помощью транзакций. Пример: одна прога изменяет данные, другая их должна видеть, или получить сообщение, что таблица изменена. Везде где обсуждался этот вопрос нет ничего конкретного, или я не догоняю. Применимо как для IBDataset, так и для IBTable. ХЭЛП!
MaxxSoft (2004-11-28 11:28:00) [1]Создаешь процедуру в БД для изменения данных, и на выходе генерируешь событие, напрмер:
CREATE PROCEDURE "CHANGE_TABLE1"
(
"VALUE1" INTEGER,
"VALUE2" INTEGER
)
AS
begin
update TABLE1 set FIELD1 = :VALUE1 where FIELD2 = :VALUE2;
post_event('TABLE1_CHANGED');
end
В приложении, изменяющем данные в БД создаешь SQL-запрос и через него вызываешь эту процедуру:
CHANGE_TABLE1_SQL: TIBSQL;
...
with CHANGE_TABLE1_SQL do
begin
CHANGE_TABLE1_SQL.SQL.TEXT := 'execute procedure CHANGE_TABLE1' (:VALUE1, :VALUE2);
if not Prepared then Prepare;
ParamByName('VALUE1').AsInteger := Value1;
ParamByName('VALUE2').AsInteger := Value2;
ExecQuery;
Close;
end;
В приложении, которое отображает изменения создаешь Event:
CHANGE_TABLE1_EVENT: TIBEvents;
...
//при создании формы устанавливаешь и регистрируешь событие:
CHANGE_TABLE1_EVENT.Events.Clear;
CHANGE_TABLE1_EVENT.Events.Add('TABLE1_CHANGED');
CHANGE_TABLE1_EVENT.Registered := true;
...
//Пишешь обработчик события
procedure TDataModul.CHANGE_TABLE1_EVENTEventAlert(...);
begin
//To do...
end;
Вот и все, успехов...
Vemer (2004-11-28 11:09:00) [2]Тут и рядом с ним можно найти много интересного:
http://www.sql.ru/forum/actualthread.aspx?tid=140992