Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.04.28;
Скачать: CL | DM;

Вниз

ClientDataSet   Найти похожие ветки 

 
VikOss ©   (2010-11-08 11:36) [0]

Мастера, помогите ! Честно перелопатил кучу инфы и так до конца не смог разобраться. Вопрос думаю для вас менее чем детский, однако меня он достал. Итак.
Приложение клиент-сервер, но с использованием локального кэширования. Связка ClientDataSet ->DataSetProvider->IBDataSet->IBDataBase. Работает, только "странно". По нажатию кнопки делаю ApplyApdate. Вот тут беда, короче в базу изменения приходят только ПОСЛЕ закрытия приложения ! И если в базе что-то изменилось, то нужно закрыть приложение, убить локальный файл, и только тогда всё видно! Бред какой-то, спасите !

ПЫСЫ: можете бить, ругать, обзывать, ТОЛЬКО ПОМОГИТЕ !!! :-)


 
12 ©   (2010-11-08 12:02) [1]

Commit?


 
VikOss ©   (2010-11-08 12:16) [2]

Для чего? Метод ApplyApdates у ClientDataSet вроде не требет коммитов, он тупо должен все обновить, т.е. привести в соответствие.


 
12 ©   (2010-11-08 12:40) [3]

а вы попробуйте


 
VikOss ©   (2010-11-08 13:02) [4]

:-) , блин нигде конкретно не написано, но работает короче с коммитом, только изменения С сервера не приходят, только после перезагрузки.


 
VikOss ©   (2010-11-08 13:35) [5]

Считывать "руками" как-то не правильно, почему метод ApplyApdates не берёт С сервера? Ведь если на серваке есть запись а у клиента её нет, то должен добавить? Или я туплю?


 
Медвежонок Пятачок ©   (2010-11-08 14:07) [6]

Ведь если на серваке есть запись а у клиента её нет, то должен добавить? Или я туплю?

А если на сервере и на клиенте есть запись, но на сервере другая, то apply updates должен типа обновить запись на клиенте?


 
12 ©   (2010-11-08 14:17) [7]


> VikOss ©   (08.11.10 13:35) [5]

не
если команда применить изменения, то именно это и делается.
с этим TClientDataSet  там по идеологии не положено тыркать с/на сервер лишний раз.
А вообще книжку надо и раздел соотв. почитать.
Вообще, неудобный при современных скоростях метод. ИМХО.


 
VikOss ©   (2010-11-08 14:33) [8]

Как раз таки метод оч удобный, по задаче требуется при разрыве связи продолжать работать как ни в чём не бывало. Да всё вродь нормально, но вот не могу добить эти обновления с серваком, ну не догоняю я, а в книгах и разделах самые примитивные примеры с ADO, нет полноценного с IB, а разница в мелочах как раз и достаёт...


 
VikOss ©   (2010-11-08 14:36) [9]


> А если на сервере и на клиенте есть запись, но на сервере
> другая, то apply updates должен типа обновить запись на
> клиенте?


Не совсем так, чёрт я с этим и ломаю голову, если добавил другой юзер на сервак, то этот должен по AppLyApdate разумеется увидеть её.


 
Sergey13 ©   (2010-11-08 14:44) [10]

> [9] VikOss ©   (08.11.10 14:36)
> то этот должен по AppLyApdate разумеется увидеть её.

Почему "разумеется" то? "AppLyApdate" - переводится (с моим скудным инглишем) как "применить изменения", а не "синхронизироваться с сервером". Т.е. односторониий обмен.
Датасет - это не телевизор с данными, это фотографии. Хочешь обновить - перефотографируй.


 
VikOss ©   (2010-11-08 15:06) [11]


> Почему "разумеется" то? "AppLyApdate" - переводится (с моим
> скудным инглишем) как "применить изменения", а не "синхронизироваться
> с сервером". Т.е. односторониий обмен.
> Датасет - это не телевизор с данными, это фотографии. Хочешь
> обновить - перефотографируй.

А новая запись на сервере не относится к изменениям? Или изменения считаются только на стороне клиента? Получается при каждом ApplyApdates  ещё и данные с сервака перечитывать? Не, что то тут не так, иначе нафиг этот метод нужен? Одним запросом загнал всё в базу, другим прочитал и усё... Я думаю разработчики тут предлагали более широкие возможности, да и в примере с ADO нет перезапроса данных, но там ,повторюсь, чуть иначе всё реализуется. Неужели никто не использовал ClientDataSet в связке с FB/IB ?


 
VikOss ©   (2010-11-08 15:11) [12]

Прихожу к мысли что всё таки ClientDataSet потому и клиент, не могёт он на серваке видеть, он тока у клиента пасёт изменения, потому и после переоткрытия приложения всё видно - тупо запрос на чтение выполняется.

12 и Sergey13 СПАСИБО!


 
Медвежонок Пятачок ©   (2010-11-08 16:05) [13]

Не совсем так,

по твоей логике как раз так.
если на сервере есть записи, а на клиенте ее нет, то апплай должен вставить запись в клиента.
то есть серверный вариант имеет приоритет.
значит апдейт сервера с клиента должен апдейтить не сервер, а клиента.
по твоей логике.


 
VikOss ©   (2010-11-08 16:18) [14]


> по твоей логике как раз так.
> если на сервере есть записи, а на клиенте ее нет, то апплай
> должен вставить запись в клиента.
> то есть серверный вариант имеет приоритет.
> значит апдейт сервера с клиента должен апдейтить не сервер,
>  а клиента.
> по твоей логике.

Но этого и не происходит, блин, запарился уже конкретно. Начал перечитывать, фиг там, если есть локальный файл, вообще бред происходит, ругается что не могу, запись не доступна, либо занята другим юзером, но я счас разумеется один! Удаляешь файло, читает. Блин, ну кто-нить, разжуйте в двух словах как реализовать такую модель, типа портфель? Все описания в литературе на адо не катят.
На словах всё просто- фактически локальная база, нажал кнопку и все изменения, удаления, добавления пошли на сервер, а с сервера...вот в этом месте и парюсь...


 
12 ©   (2010-11-08 16:30) [15]


> а с сервера...вот в этом месте и парюсь...



>  Хочешь обновить - перефотографируй.


 
VikOss ©   (2010-11-08 16:46) [16]


> >  Хочешь обновить - перефотографируй.

Блин гдето упустил, смотри - открыл, считал с сервера, всё ок. Закрыл - данные в файло, всё ок. На сервак добавляю запись руками. Открываю приложение. Всё ок (все записи видны). Жмём обновить и ОП получаемс старые записи из файла...


 
VikOss ©   (2010-11-08 18:16) [17]

Господа, заметил, что ВРОДЕ проблема с ключами. Дело в том, что локально приходиться создавать свои ключи (типа в минус), а при передаче на сервер там триггер переприсваивает уже на нормальный. Но в запросах на обновление сравнивается по ключу и ОП, а у меня локально один, а на серваке другой. Может есть другой механизм? С сервака нельзя, типа работаем без подключения.
Кстати почему после чтения из локального файла, срабатывает именно апдейт, а не вставка?(внёс запись и сохранил на диске, потом переоткрыл программу и нажал обновить)


 
VikOss ©   (2010-11-08 19:09) [18]

Короче, нашёл проблему, но не решил, может счас кто подскажет. В общем при обновлении не происходит как таковое обновление на клиенте, сервер все данные получает правильно, расставляет ключи. А вот на клиенте упс, что только не открывал-закрывал, пофиг , данные обновляются только перезагрузкой приложения, чё за бред? Да и кэш непонятно висит, надо убить файл, ну это ясно, а потом ! два ! раза в дезайн тайме открыть-закрыть ClientDataSet !!! Чё это за кэш такой?????


 
VikOss ©   (2010-11-08 20:06) [19]

Что, никто не знает? Как обновить чёртовы данные на клиенте???? Открыть закрыть датасет и вообще всё что можно НИКАКОГО эффекта !


 
VikOss ©   (2010-11-08 20:42) [20]

ХУУУ!!!! Как всегда решение окажется под самым носом, напишу, мож кому пригодится.

При обновлении НЕ ЗАБЫВАЕМ убрать из свойства FileName имя файла! Он если его видит, работает ИСКЛЮЧИТЕЛЬНО с файлом и ложил с перебором на все ваши ухищрения !
:-))  :-)


 
12 ©   (2010-11-09 09:03) [21]


> 08.11.10 20:42

кто ж в это время работает, все советы - до 18-00 :)


 
Anatoly Podgoretsky ©   (2010-11-09 09:26) [22]

> 12  (09.11.2010 09:03:21)  [21]

Особенности бесплатного российского Интернет.



Страницы: 1 вся ветка

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

Наверх




Память: 0.53 MB
Время: 0.006 c
15-1356553802
Юрий
2012-12-27 00:30
2013.04.28
С днем рождения ! 27 декабря 2012 четверг


15-1356468566
KillZBOT
2012-12-26 00:49
2013.04.28
Нужна Контра для Wi-fi сети


15-1356521593
brother
2012-12-26 15:33
2013.04.28
порезать файл XML


15-1356364173
Es
2012-12-24 19:49
2013.04.28
ADO, ошибка в провайдере MSDAORA при select... for update


15-1356839680
Neptune++
2012-12-30 07:54
2013.04.28
Как такое может быть?