Конференция "Базы" » ClientDataSet [D7, IB6.x, FB]
 
  • VikOss © (08.11.10 11:36) [0]
    Мастера, помогите ! Честно перелопатил кучу инфы и так до конца не смог разобраться. Вопрос думаю для вас менее чем детский, однако меня он достал. Итак.
    Приложение клиент-сервер, но с использованием локального кэширования. Связка ClientDataSet ->DataSetProvider->IBDataSet->IBDataBase. Работает, только "странно". По нажатию кнопки делаю ApplyApdate. Вот тут беда, короче в базу изменения приходят только ПОСЛЕ закрытия приложения ! И если в базе что-то изменилось, то нужно закрыть приложение, убить локальный файл, и только тогда всё видно! Бред какой-то, спасите !

    ПЫСЫ: можете бить, ругать, обзывать, ТОЛЬКО ПОМОГИТЕ !!! :-)
  • 12 © (08.11.10 12:02) [1]
    Commit?
  • VikOss © (08.11.10 12:16) [2]
    Для чего? Метод ApplyApdates у ClientDataSet вроде не требет коммитов, он тупо должен все обновить, т.е. привести в соответствие.
  • 12 © (08.11.10 12:40) [3]
    а вы попробуйте
  • VikOss © (08.11.10 13:02) [4]
    :-) , блин нигде конкретно не написано, но работает короче с коммитом, только изменения С сервера не приходят, только после перезагрузки.
  • VikOss © (08.11.10 13:35) [5]
    Считывать "руками" как-то не правильно, почему метод ApplyApdates не берёт С сервера? Ведь если на серваке есть запись а у клиента её нет, то должен добавить? Или я туплю?
  • Медвежонок Пятачок © (08.11.10 14:07) [6]
    Ведь если на серваке есть запись а у клиента её нет, то должен добавить? Или я туплю?

    А если на сервере и на клиенте есть запись, но на сервере другая, то apply updates должен типа обновить запись на клиенте?
  • 12 © (08.11.10 14:17) [7]

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

    не
    если команда применить изменения, то именно это и делается.
    с этим TClientDataSet  там по идеологии не положено тыркать с/на сервер лишний раз.
    А вообще книжку надо и раздел соотв. почитать.
    Вообще, неудобный при современных скоростях метод. ИМХО.
  • VikOss © (08.11.10 14:33) [8]
    Как раз таки метод оч удобный, по задаче требуется при разрыве связи продолжать работать как ни в чём не бывало. Да всё вродь нормально, но вот не могу добить эти обновления с серваком, ну не догоняю я, а в книгах и разделах самые примитивные примеры с ADO, нет полноценного с IB, а разница в мелочах как раз и достаёт...
  • VikOss © (08.11.10 14:36) [9]

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


    Не совсем так, чёрт я с этим и ломаю голову, если добавил другой юзер на сервак, то этот должен по AppLyApdate разумеется увидеть её.
  • Sergey13 © (08.11.10 14:44) [10]
    > [9] VikOss ©   (08.11.10 14:36)
    > то этот должен по AppLyApdate разумеется увидеть её.

    Почему "разумеется" то? "AppLyApdate" - переводится (с моим скудным инглишем) как "применить изменения", а не "синхронизироваться с сервером". Т.е. односторониий обмен.
    Датасет - это не телевизор с данными, это фотографии. Хочешь обновить - перефотографируй.
  • VikOss © (08.11.10 15:06) [11]

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

    А новая запись на сервере не относится к изменениям? Или изменения считаются только на стороне клиента? Получается при каждом ApplyApdates  ещё и данные с сервака перечитывать? Не, что то тут не так, иначе нафиг этот метод нужен? Одним запросом загнал всё в базу, другим прочитал и усё... Я думаю разработчики тут предлагали более широкие возможности, да и в примере с ADO нет перезапроса данных, но там ,повторюсь, чуть иначе всё реализуется. Неужели никто не использовал ClientDataSet в связке с FB/IB ?
  • VikOss © (08.11.10 15:11) [12]
    Прихожу к мысли что всё таки ClientDataSet потому и клиент, не могёт он на серваке видеть, он тока у клиента пасёт изменения, потому и после переоткрытия приложения всё видно - тупо запрос на чтение выполняется.

    12 и Sergey13 СПАСИБО!
  • Медвежонок Пятачок © (08.11.10 16:05) [13]
    Не совсем так,

    по твоей логике как раз так.
    если на сервере есть записи, а на клиенте ее нет, то апплай должен вставить запись в клиента.
    то есть серверный вариант имеет приоритет.
    значит апдейт сервера с клиента должен апдейтить не сервер, а клиента.
    по твоей логике.
  • VikOss © (08.11.10 16:18) [14]

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

    Но этого и не происходит, блин, запарился уже конкретно. Начал перечитывать, фиг там, если есть локальный файл, вообще бред происходит, ругается что не могу, запись не доступна, либо занята другим юзером, но я счас разумеется один! Удаляешь файло, читает. Блин, ну кто-нить, разжуйте в двух словах как реализовать такую модель, типа портфель? Все описания в литературе на адо не катят.
    На словах всё просто- фактически локальная база, нажал кнопку и все изменения, удаления, добавления пошли на сервер, а с сервера...вот в этом месте и парюсь...
  • 12 © (08.11.10 16:30) [15]

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



    >  Хочешь обновить - перефотографируй.
  • VikOss © (08.11.10 16:46) [16]

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

    Блин гдето упустил, смотри - открыл, считал с сервера, всё ок. Закрыл - данные в файло, всё ок. На сервак добавляю запись руками. Открываю приложение. Всё ок (все записи видны). Жмём обновить и ОП получаемс старые записи из файла...
  • VikOss © (08.11.10 18:16) [17]
    Господа, заметил, что ВРОДЕ проблема с ключами. Дело в том, что локально приходиться создавать свои ключи (типа в минус), а при передаче на сервер там триггер переприсваивает уже на нормальный. Но в запросах на обновление сравнивается по ключу и ОП, а у меня локально один, а на серваке другой. Может есть другой механизм? С сервака нельзя, типа работаем без подключения.
    Кстати почему после чтения из локального файла, срабатывает именно апдейт, а не вставка?(внёс запись и сохранил на диске, потом переоткрыл программу и нажал обновить)
  • VikOss © (08.11.10 19:09) [18]
    Короче, нашёл проблему, но не решил, может счас кто подскажет. В общем при обновлении не происходит как таковое обновление на клиенте, сервер все данные получает правильно, расставляет ключи. А вот на клиенте упс, что только не открывал-закрывал, пофиг , данные обновляются только перезагрузкой приложения, чё за бред? Да и кэш непонятно висит, надо убить файл, ну это ясно, а потом ! два ! раза в дезайн тайме открыть-закрыть ClientDataSet !!! Чё это за кэш такой?????
  • VikOss © (08.11.10 20:06) [19]
    Что, никто не знает? Как обновить чёртовы данные на клиенте???? Открыть закрыть датасет и вообще всё что можно НИКАКОГО эффекта !
 
Конференция "Базы" » ClientDataSet [D7, IB6.x, FB]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]