![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с Interbase [D6, IB6.x]
MAxiMum © (2002-03-26 12:29:00)У меня, вообще-то, куча вопросов по Interbase. Ответьте, хотя бы на некоторые.
1. Как клиент может послать обновлённые (добавленные) данные?
2. Как сервер может узнать об обновлении?
Пока всё. ПОМОГИТЕ!!!
dymka (2002-03-28 07:38:00) [21]2 GrayMage:
Насколько часто тебе нужно видеть эти изменения??? Или ты хочешь чтобы лампочка загоралась, если пользователь что-нибудь сменил???
Обоснуй частое обновление, ведь можно обновлять локальные данные при новом запросе. Т.е. нужно узнать - нажал на кнопку... а автоматически то зачем... не спорю - такие ситуации возникают, только нужно хорошее обоснование...
GrayMage (2002-03-28 07:34:00) [22]Хорошо dymka, а выход где? Да я, например, сузил диапазон обрабатываемый Query. И мне необходимо видеть все изменения которые делает пользователь (база складского учета, выписка накладных, в накладную вбивается позиция - сумма изменяется - требуется обновление; меняется признак накладной - требуется обновление; и т.д.). И как это сделать без большого трафика?
To MAxiMum:
> даже на той машине, где и произошли изменения. А это не
> нужно.
Интересно, а как эта машина узнает что IB принял эти изменения? Commit он такой ... Конечно этот вопрос справедлив если ты используешь для отображения Query.
dymka (2002-03-28 07:17:00) [23]БАЗА НЕ ВЕЗДЕ! Она только в одном месте, именуемом сервером...
Чтобы я мог хорошо понимать вопрос нужно задавать их, используя по возможности "правильную" терминологию...
На клиенте это локальная копия данных... Когда ты подключаешься к серверу и открываешь набор, то стартует транзакция и часть данных копируется тебе в память, с которой и работает клиент.
Ничего страшного нет, если ты обновишь локальные данные...
Вот интересно - насколько часты обновления у тебя? Если база многопользовательская и обновления идут каждую секунду, то работа станет невозможной, всвязи с частыми обновлениями...
Это не так быстро - переоткрыть набор...
MAxiMum (2002-03-27 18:52:00) [24]Если программа изменяет что-то в БД. То, если использовать события, обновится сама база везде, даже на той машине, где и произошли изменения. А это не нужно.
dymka (2002-03-27 17:59:00) [25]Не понял сути вопроса в следущем месте:
Если он сам изменил, генерируется событие и он обновляет то, что сам и исправил.
Бррр... Как сам изменил??? Как обновляет??? Что исправил???
MAxiMum (2002-03-27 17:54:00) [26]Надо, чтобы изменения были видны сразу.
Кстати, CommitRetaining есть и у IBTransaction.
Ну, а с трафиком ничего не поделаешь. Неохота, тяжело, но придётся ещё везде и Event"ы ставить. Эх!
А на сервере, интересно, как может получиться. Если он сам изменил, генерируется событие и он обновляет то, что сам и исправил. Я думаю это не порядок. Подскажите, как обойти это!
dymka (2002-03-27 17:31:00) [27]Вообще принципы клиент-серверного программирования не допускают автоматического узнавания другими клиентами изменения в базе, а сделано это для минимизации сетевого траффика, т.к. база сетевая... В айби можно создать событие - тока будь осторожен, стандартный TIBEvent немного глюкует... Но, если ты скажем на триггер будешь генерировать событие, а на клиентах перечитывать данные по нему, то ты здорово напряжешь свой сервак и сеть...
Если уж очень такое надо, то перечитывай базу скажем после 10 евентов... или подбери число экспериментально...
Далее... Если использовать IBX, то при Commit все наборы данных в текущее сессии закроются... Выход первый - сразу открыть все и восстановить букмарки, которые ты предварительно сделал...
Второе - воспользоваться компонентами FIBPlus, где есть поддержка CommitRetaining и что еще приятно после BDE, CommitOnPost...
MAxiMum (2002-03-27 14:21:00) [28]Т.е. нужно добавить Event"ы везде и потом ловить на TIBEvents?
Fay (2002-03-27 14:15:00) [29]POST_EVENT вроде
MAxiMum (2002-03-27 14:09:00) [30]Повторю, кто не слышал. Как сервер или клиент может узнать об изменениях в БД на сервере. Подскажите, плз.
MAxiMum (2002-03-26 20:21:00) [31]А как насчёт вопроса №3(обновления не появятся на сервере) и вопроса №4(подскажите насчёт этого).
Johnmen (2002-03-26 16:56:00) [32]-CommitRetaining,RollbackRetaining
-кнопкой
-так все изменения и делает только сервер !
MAxiMum (2002-03-26 16:44:00) [33]Я работаю без BDE. После явного IBTransaction.Commit всё закрывается (IBDatabase, IBTransaction, все IBTable и IBQuery). Приходится всё переоткрывать.
Порекоммендуйте, как:
1) это можно обойти (переоткрытие);
2) как делать Commit: кнопкой, на OnPost или по таймеру.
3) сервер узнает об изменениях;
4) организовать на клиенте обзор базы (я думаю запрос к серверу, чтобы он выдавал информацию о паках и файлах своего компьютера, но это гемморно).
>Johnmen
С транзакциями я знаком.
Alexandr (2002-03-26 14:38:00) [34]2All:для тех, кто не понял- он через IBX работает.
2MAxiMum: В поставке Дельфи есть пример по работе с IBX посмотри (называется что -то вроде MastAppIB)
alexandervasjuk (2002-03-26 14:37:00) [35]CommitRetail рекомендую для IBX
Для BDE в BDE Administrator поройся в настройках своего Alias"а
Ura (2002-03-26 14:31:00) [36]Тогда попробуй сделать явно Commit для транзакции к которой привязана таблица...
Johnmen (2002-03-26 14:30:00) [37]Это и есть IBX...
Используй IBDatabase, IBTransaction - это обязательно,
остальное - по вкусу...
Slava (2002-03-26 14:29:00) [38]IBTransaction.Commit
MAxiMum (2002-03-26 14:22:00) [39]>Ura
Нет через компоненты страница Interbase.
Ura (2002-03-26 14:21:00) [40]Повторяю вопрос через что доступ?
IBX ADO Express BDE ???