Разработка обновления приложения Delphi

Тема в разделе "Другие языки", создана пользователем RALF, 26 ноя 2007.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. RALF

    RALF черный рыцарь

    Регистр.:
    1 май 2006
    Сообщения:
    114
    Симпатии:
    25
    Добрый всем вечер!

    Тут работаю над одним проектиком. Есть два приложения, одно приложение на Delphi – справочник предприятий их реквизиты и т.д. Т.е. приложение само по себе служит только для поиска и отображения информации. Есть веб-приложение, аналог по функциям этого приложения, но с одним условием. Данное веб-приложение написано на php и имеет панель администратора, через которую добавляются новые записи.

    Это было предисловие. А теперь вопрос:
    Как мне сделать обновление? Т.е. человек скачивает приложение написанное на Delphi и через некоторое время хочет обновить БД. Ему не нужно скачивать опять полный дистрибутив с БД, он просто может нажать кнопку «обновить» и всё. Вот по повод этой кнопки как раз-таки вопрос:

    Как сделать правильно обновление? Через что отправлять данные? Если можно подойдет всё ссылки на информацию об этом, да и просто ответы. Хотелось бы обсудить с программистами J))
     
  2. garcia

    garcia Прохожие

    Т.е. есть живая БД на серваке и устаревающая на клиенте? И можно править код серверного приложения?
    Вариантов полно - самый IMHO правильный:
    - В базе на серваке хранить дату последнего обновления/изменения каждой записи.
    - Из Delphi шлется запрос о получении обновления с указанием даты/времени последнего обновления. Ему возвращается список измененных записей - имеющих время изменения позже запрошенного. Все записи передаются с ID.
    - Потом напр. построчно - если такой ID уже есть в клиентской базе - заменить эту запись новым вариантом. Если нет - просто добавить.
    Если нужно отслеживать удаления - можно также передавать список удаленных ID-ов (на сервере хранить историю удаления с датой)
    - Изменяется дата последнего обновленя на стороне Delphi
    Список можно отдавать с сервака зазипованным CVS - трафик юзеру экономить.
    Или спрашиваешь, как даунлоад делать?
    Например, дельфийская прилада лезет на http://domain.ru/getupdate.php?lastdate=01012008 - а сервак ему - текстовик к примеру. Забирать такое хоть сокетом можно.
    ----
    можно еще проверку делать: спрашиваешь у сервака http://domain.ru/isthereupdate.php?lastdate=01012008 - а он тебе yes или no возвращает
     
  3. RALF

    RALF черный рыцарь

    Регистр.:
    1 май 2006
    Сообщения:
    114
    Симпатии:
    25
    Да живая БД на серваке в инете, а устаревшая на компе. Ты правильно понял! Код серверного приложения можно править!

    Я имею ввиду как передать массив данных через https ... Через закрытое соединение? И чтобы особо сильно долго не обновлялось? Если брать html страницу, чтобы скрипт формировал страницу и передавала ее delphi приложению!

    Про id понял. С датой нужно поиграться!
    Я тебя правильно понял, ты предлагаешь получать данные (id, данные, дата)?
    Соотвественно по ID вставляем даты.

    Как сделать именно отслежку удаления?
     
  4. Dogmat

    Dogmat Постоялец

    Регистр.:
    16 фев 2007
    Сообщения:
    122
    Симпатии:
    38
    храни в базе удаленные ID c датой удаления
    при обновлении проверяй список удаленных ID с момента
    последнего удаления и удаляй их собственно из локальной базы =)
     
  5. garcia

    garcia Прохожие

    нет, дата не нужна. Она нужна, чтоб отдающий скрипт отличил новые записи от старых. А именно, в запросе на выборку из таблицы организаций для отдачи нужно поставить просто
    SELECT ....
    WHERE lasteditdate > 'XXXXXX'", где XXXXX - дата, переданная клиентом при запросе к серваку
    --------------
    Можно сделать так: не удалять физически организации на серваке, а просто помечать их, как удаленные в специальном поле "deleted" к примеру - 0 - не удалено, 1 - удалено. (не забывая изменить дату изменения). Правда придется поправить запросы в приложении на сервере - поставить везде условие "WHERE deleted=0".
    Отдающий скрипт (который будет отдавать список клиенту) если встречает удаленную запись - передает только ее код - принимающий софт может интерпретировать это как удаление - и удалять в локальной базе соотв. запись с этим ID. (Так - потому что лишние данные не передаются)
    Если отдаваемые данные не паковать (а можно паковать между прочим - отдельную тему лучше создавай) то экономичнее всего отдавать не html страницу, а CVS - в каждой строке по порядку перечисляются значения полей записи через символ-разделитель (напр. "|"). Да и парсить (делать синтаксический разбор) такого очень просто. Если в строке тока ID - значит удаляем, и т.д.
    А HTTPS - чеб не те не качали? Ну, вариантов много... Можно например проходить http авторизацию логином и паролем, связанным с серийным номером - заодно статистику скачек на серваке можно вести (пускать только зарегистрированные серийники). Видишь, что с одного серийника чет слишком часто апдейтят? Банишь серийник, предъявляешь покупателю.
     
  6. x4ray

    x4ray Писатель

    Регистр.:
    19 ноя 2007
    Сообщения:
    7
    Симпатии:
    1
    А не легче дамп базы забирать своим приложением?
     
  7. garcia

    garcia Прохожие

    Ну, во-первых, на стороне клиента не мускул. Во-вторых - база большая, а нужно от нее кусочек
     
  8. RALF

    RALF черный рыцарь

    Регистр.:
    1 май 2006
    Сообщения:
    114
    Симпатии:
    25
    ну-ну... И как ты думаешь это реализовать?

    garcia Прав!!!
    1. У клиента не мускул!
    2. Пользователи просто закидают меня камнями за такую хиромантию...
    Давай возьмем пример, ты бы каждый раз обновлял программу, бд которой весит 5-10 метров? Это каждый раз нужно закачивать эту бд с 2*x обновишимися сроками! :mad:
     
  9. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    а почему б не использовать XML?
    и Delphi и PHP великолепно с ним работают.
     
  10. garcia

    garcia Прохожие

    XML будет хавать немного больше трафика - надо теги передавать. А в CSV тупо меньше букаф, не надо парсер подключать к клиенту (и так парсится элементарно)
    Тут XML IMHO незачем - передается 1 таблица
     
Статус темы:
Закрыта.