-
Мастера, помогите ! Честно перелопатил кучу инфы и так до конца не смог разобраться. Вопрос думаю для вас менее чем детский, однако меня он достал. Итак. Приложение клиент-сервер, но с использованием локального кэширования. Связка ClientDataSet ->DataSetProvider->IBDataSet->IBDataBase. Работает, только "странно". По нажатию кнопки делаю ApplyApdate. Вот тут беда, короче в базу изменения приходят только ПОСЛЕ закрытия приложения ! И если в базе что-то изменилось, то нужно закрыть приложение, убить локальный файл, и только тогда всё видно! Бред какой-то, спасите !
ПЫСЫ: можете бить, ругать, обзывать, ТОЛЬКО ПОМОГИТЕ !!! :-)
-
Commit?
-
Для чего? Метод ApplyApdates у ClientDataSet вроде не требет коммитов, он тупо должен все обновить, т.е. привести в соответствие.
-
а вы попробуйте
-
:-) , блин нигде конкретно не написано, но работает короче с коммитом, только изменения С сервера не приходят, только после перезагрузки.
-
Считывать "руками" как-то не правильно, почему метод ApplyApdates не берёт С сервера? Ведь если на серваке есть запись а у клиента её нет, то должен добавить? Или я туплю?
-
Ведь если на серваке есть запись а у клиента её нет, то должен добавить? Или я туплю?
А если на сервере и на клиенте есть запись, но на сервере другая, то apply updates должен типа обновить запись на клиенте?
-
> VikOss © (08.11.10 13:35) [5]
не если команда применить изменения, то именно это и делается. с этим TClientDataSet там по идеологии не положено тыркать с/на сервер лишний раз. А вообще книжку надо и раздел соотв. почитать. Вообще, неудобный при современных скоростях метод. ИМХО.
-
Как раз таки метод оч удобный, по задаче требуется при разрыве связи продолжать работать как ни в чём не бывало. Да всё вродь нормально, но вот не могу добить эти обновления с серваком, ну не догоняю я, а в книгах и разделах самые примитивные примеры с ADO, нет полноценного с IB, а разница в мелочах как раз и достаёт...
-
> А если на сервере и на клиенте есть запись, но на сервере > другая, то apply updates должен типа обновить запись на > клиенте?
Не совсем так, чёрт я с этим и ломаю голову, если добавил другой юзер на сервак, то этот должен по AppLyApdate разумеется увидеть её.
-
> [9] VikOss © (08.11.10 14:36) > то этот должен по AppLyApdate разумеется увидеть её.
Почему "разумеется" то? "AppLyApdate" - переводится (с моим скудным инглишем) как "применить изменения", а не "синхронизироваться с сервером". Т.е. односторониий обмен. Датасет - это не телевизор с данными, это фотографии. Хочешь обновить - перефотографируй.
-
> Почему "разумеется" то? "AppLyApdate" - переводится (с моим > скудным инглишем) как "применить изменения", а не "синхронизироваться > с сервером". Т.е. односторониий обмен. > Датасет - это не телевизор с данными, это фотографии. Хочешь > обновить - перефотографируй.
А новая запись на сервере не относится к изменениям? Или изменения считаются только на стороне клиента? Получается при каждом ApplyApdates ещё и данные с сервака перечитывать? Не, что то тут не так, иначе нафиг этот метод нужен? Одним запросом загнал всё в базу, другим прочитал и усё... Я думаю разработчики тут предлагали более широкие возможности, да и в примере с ADO нет перезапроса данных, но там ,повторюсь, чуть иначе всё реализуется. Неужели никто не использовал ClientDataSet в связке с FB/IB ?
-
Прихожу к мысли что всё таки ClientDataSet потому и клиент, не могёт он на серваке видеть, он тока у клиента пасёт изменения, потому и после переоткрытия приложения всё видно - тупо запрос на чтение выполняется.
12 и Sergey13 СПАСИБО!
-
Не совсем так,
по твоей логике как раз так. если на сервере есть записи, а на клиенте ее нет, то апплай должен вставить запись в клиента. то есть серверный вариант имеет приоритет. значит апдейт сервера с клиента должен апдейтить не сервер, а клиента. по твоей логике.
-
> по твоей логике как раз так. > если на сервере есть записи, а на клиенте ее нет, то апплай > должен вставить запись в клиента. > то есть серверный вариант имеет приоритет. > значит апдейт сервера с клиента должен апдейтить не сервер, > а клиента. > по твоей логике.
Но этого и не происходит, блин, запарился уже конкретно. Начал перечитывать, фиг там, если есть локальный файл, вообще бред происходит, ругается что не могу, запись не доступна, либо занята другим юзером, но я счас разумеется один! Удаляешь файло, читает. Блин, ну кто-нить, разжуйте в двух словах как реализовать такую модель, типа портфель? Все описания в литературе на адо не катят. На словах всё просто- фактически локальная база, нажал кнопку и все изменения, удаления, добавления пошли на сервер, а с сервера...вот в этом месте и парюсь...
-
> а с сервера...вот в этом месте и парюсь...
> Хочешь обновить - перефотографируй.
-
> > Хочешь обновить - перефотографируй.
Блин гдето упустил, смотри - открыл, считал с сервера, всё ок. Закрыл - данные в файло, всё ок. На сервак добавляю запись руками. Открываю приложение. Всё ок (все записи видны). Жмём обновить и ОП получаемс старые записи из файла...
-
Господа, заметил, что ВРОДЕ проблема с ключами. Дело в том, что локально приходиться создавать свои ключи (типа в минус), а при передаче на сервер там триггер переприсваивает уже на нормальный. Но в запросах на обновление сравнивается по ключу и ОП, а у меня локально один, а на серваке другой. Может есть другой механизм? С сервака нельзя, типа работаем без подключения. Кстати почему после чтения из локального файла, срабатывает именно апдейт, а не вставка?(внёс запись и сохранил на диске, потом переоткрыл программу и нажал обновить)
-
Короче, нашёл проблему, но не решил, может счас кто подскажет. В общем при обновлении не происходит как таковое обновление на клиенте, сервер все данные получает правильно, расставляет ключи. А вот на клиенте упс, что только не открывал-закрывал, пофиг , данные обновляются только перезагрузкой приложения, чё за бред? Да и кэш непонятно висит, надо убить файл, ну это ясно, а потом ! два ! раза в дезайн тайме открыть-закрыть ClientDataSet !!! Чё это за кэш такой?????
-
Что, никто не знает? Как обновить чёртовы данные на клиенте???? Открыть закрыть датасет и вообще всё что можно НИКАКОГО эффекта !
-
ХУУУ!!!! Как всегда решение окажется под самым носом, напишу, мож кому пригодится.
При обновлении НЕ ЗАБЫВАЕМ убрать из свойства FileName имя файла! Он если его видит, работает ИСКЛЮЧИТЕЛЬНО с файлом и ложил с перебором на все ваши ухищрения ! :-)) :-)
-
> 08.11.10 20:42
кто ж в это время работает, все советы - до 18-00 :)
-
> 12 (09.11.2010 09:03:21) [21]
Особенности бесплатного российского Интернет.
|