Guest |
Отправлено: 16.06.2005, 10:15 |
|
Не зарегистрирован
|
Хотел посоветоваться.
Пишу программу для работы с БД FireBird + через FIBPlus (С++Builder 6)
БД — многопользовательская, и с программой (и БД )одновременно
будет работать несколько (1-10) человек.
В связи с этим вопрос — кто как организует обновление информации
в таблицах, допустим когда секретарь вводит в базу данных новую
организацию и она должна появиться в уже открытых таблицах
других и прочие подобное изменение информации ...
Хочу сделать это через механизм событий БД, в триггере при
изменении (вставке, редактировании, удалении записей таблиц)
например post_event 'DeviceAlert'
SQL | CREATE TRIGGER "Device_Event" FOR "Device"
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS begin post_event 'DeviceAlert';
end
|
и "принимающий" события компонент TSIBfibEventAlerter из FIBPLus
CODE |
void __fastcall TMod::FIBAlertEventAlert(TObject *Sender,
AnsiString EventName, int EventCount)
{
if(EventName == "DeviceAlert" && Device->Active){
Device->Close(); Device->Open();
}
if(EventName == "CustomerAlert" && Customer->Active){
Customer->Close(); Customer->Open();
}
}
|
но возникает вопрос — как быть с child-таблицами,
и с тем, что в таблицах люди уже стоят на какой-то определенной
записи — как это запомнить и вернуть при переоткрытии,
или есть еще какие-то способы ?
Кто как делает? Заранее спасибо за советы.
|
|
Guest |
Отправлено: 16.06.2005, 10:28 |
|
Не зарегистрирован
|
Да, забыл написать.
Можно конечно попробовать запоминать данные
через TBookmark
CODE |
TBookmark BKMR_Device;
if(EventName == "DeviceAlert" && Device->Active){
BKMR_Device = Device->GetBookmark();
Device->Close(); Device->Open();
Device->GotoBookmark(BKMR_Device);
}
|
но как быть со связанными таблицами, которые открываются
через свойство DetailConditions->dsForceOpen — проверять,
открыты ли эти наборы данных, запоминать перед
переоткрытием положение в них с помощью TBookmark
и восстанавливать после ???
А насколько корректно работает TBookmark ?
Не будет ли "ошибок" попадания не на ту запись,
ведь таблица (данные в таблице )уже изменились ?
|
|
olegenty |
Отправлено: 16.06.2005, 11:18 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
на ibase.ru есть статья об этом.
|
|
Guest |
Отправлено: 16.06.2005, 11:54 |
|
Не зарегистрирован
|
Что-то не нашел такой статьи.
А название не подскажите ? |
|
olegenty |
Отправлено: 16.06.2005, 12:34 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Название — обновление клиентских наборов данных. а ссылка — вот:
http://ibase.ru/devinfo/clientrefresh.htm
|
|
Guest |
Отправлено: 17.06.2005, 10:03 |
|
Не зарегистрирован
|
Эту статью читал, но не уверен что этот
способ достаточно удобный и что его
вообще реально используют.
|
|
olegenty |
Отправлено: 17.06.2005, 11:13 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
правильно, воспользуйся идеей. в буфер я бы тоже не полез. а идея нормальная.
|
|