Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ClientDataSet [D7, IB6.x, FB]


Страницы:   1 2

VikOss ©   (2010-11-08 11:36:00) 

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

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


Anatoly Podgoretsky   (2010-11-09 09:26:00) [1]

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

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


12   (2010-11-09 09:03:00) [2]


> 08.11.10 20:42

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


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

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

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


VikOss   (2010-11-08 20:06:00) [4]

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


VikOss   (2010-11-08 19:09:00) [5]

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


VikOss   (2010-11-08 18:16:00) [6]

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


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


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

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


12   (2010-11-08 16:30:00) [8]


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



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


VikOss   (2010-11-08 16:18:00) [9]


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

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


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

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

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


VikOss   (2010-11-08 15:11:00) [11]

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

12 и Sergey13 СПАСИБО!


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


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

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


Sergey13   (2010-11-08 14:44:00) [13]

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

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


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


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


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


VikOss   (2010-11-08 14:33:00) [15]

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


12   (2010-11-08 14:17:00) [16]


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

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


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

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

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


VikOss   (2010-11-08 13:35:00) [18]

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


VikOss   (2010-11-08 13:02:00) [19]

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


12   (2010-11-08 12:40:00) [20]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо