Пусть есть сервер с данными. Несколько пользователей одновременно работают с этими данными в приложениях основанных на WINFORMS. Каждый пользователь меняет данные при помощи datagrid. Как правильно реализовать обновленние данных у других пользователей, не читая заново всю таблицу с сервера. (Метод Fill у OleDbDataAdaptera читает заново все строки хотя в описании написано что он может делать Refresh) ???
Hello > Пусть есть сервер с данными. Несколько пользователей одновременно работают с этими данными в приложениях основанных на WINFORMS. Каждый пользователь меняет данные при помощи datagrid. Как правильно реализовать обновленние данных у других пользователей, не читая заново всю таблицу с сервера. (Метод Fill у OleDbDataAdaptera читает заново все строки хотя в описании написано что он может делать Refresh) ???
В данном случае основная задача получить из базы данных набор измененных данных.
После этого можно будет использовать метод Fill (он будет производить объединение записей с совпадающим PK)
Posted via RSDN NNTP Server 1.4.6 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Re: Обновление данных в datagrid
От:
Аноним
Дата:
05.03.03 12:58
Оценка:
Здравствуйте, TK, Вы писали:
TK>Hello >> Пусть есть сервер с данными. Несколько пользователей одновременно работают с этими данными в приложениях основанных на WINFORMS. Каждый пользователь меняет данные при помощи datagrid. Как правильно реализовать обновленние данных у других пользователей, не читая заново всю таблицу с сервера. (Метод Fill у OleDbDataAdaptera читает заново все строки хотя в описании написано что он может делать Refresh) ???
TK>В данном случае основная задача получить из базы данных набор измененных данных. TK>После этого можно будет использовать метод Fill (он будет производить объединение записей с совпадающим PK)
А как получить из БД этот набор (хотя бы примерно). Он будет уникальным для каждого пользователя?
Здравствуйте, <Аноним>, Вы писали:
А>Пусть есть сервер с данными. Несколько пользователей одновременно работают с этими данными в приложениях основанных на WINFORMS. Каждый пользователь меняет данные при помощи datagrid. Как правильно реализовать обновленние данных у других пользователей, не читая заново всю таблицу с сервера. (Метод Fill у OleDbDataAdaptera читает заново все строки хотя в описании написано что он может делать Refresh) ???
Видимо тебе нужен сервер приложений с кешированием.
Hello > > TK>В данном случае основная задача получить из базы данных набор измененных данных. > TK>После этого можно будет использовать метод Fill (он будет производить объединение записей с совпадающим PK) > > А как получить из БД этот набор (хотя бы примерно). Он будет уникальным для каждого пользователя?
Естественно, что для каждого пользователя он будет уникальным.
Один из самых простых вариантов — это добавить в таблицу данных поле "время последнего обновления записи".
При этом каждый клиент запоминает время на которое хранится информация в его DataSet и переодически опрашивает
БД на предмет изменений.
Posted via RSDN NNTP Server 1.4.6 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Re[4]: Обновление данных в datagrid
От:
Аноним
Дата:
05.03.03 13:45
Оценка:
Здравствуйте, TK, Вы писали:
TK>Hello >> >> TK>В данном случае основная задача получить из базы данных набор измененных данных. >> TK>После этого можно будет использовать метод Fill (он будет производить объединение записей с совпадающим PK) >> >> А как получить из БД этот набор (хотя бы примерно). Он будет уникальным для каждого пользователя?
TK>Естественно, что для каждого пользователя он будет уникальным. TK>Один из самых простых вариантов — это добавить в таблицу данных поле "время последнего обновления записи". TK>При этом каждый клиент запоминает время на которое хранится информация в его DataSet и переодически опрашивает TK>БД на предмет изменений.
Как это сделать теоретически я представляю. Меня больше интересует нет ли чего-то встроенного в Datasete или DataAdaptere для этих целей.
> TK>Естественно, что для каждого пользователя он будет уникальным. > TK>Один из самых простых вариантов — это добавить в таблицу данных поле "время последнего обновления записи". > TK>При этом каждый клиент запоминает время на которое хранится информация в его DataSet и переодически опрашивает > TK>БД на предмет изменений. > > Как это сделать теоретически я представляю. Меня больше интересует нет ли чего-то встроенного в Datasete или DataAdaptere для этих целей.
Нет. Можно только перечитывать все данные целиком
Posted via RSDN NNTP Server 1.4.6 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, <Аноним>, Вы писали:
А>Как это сделать теоретически я представляю. Меня больше интересует нет ли чего-то встроенного в Datasete или DataAdaptere для этих целей.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, <Аноним>, Вы писали:
А>>Как это сделать теоретически я представляю. Меня больше интересует нет ли чего-то встроенного в Datasete или DataAdaptere для этих целей.
AVK>Ну если только DataSet.Merge
Жаль, Жаль (( вроде это стандартная проблема для приложений Клиент-Сервер
А>Жаль, Жаль (( вроде это стандартная проблема для приложений Клиент-Сервер
При Клиент-Сервер эта проблема НАДУМАНА разработчиками.
Кстати, за это некоторые сильно ругают такой подход, как в .NET так и в dbExpress.
А с другой стороны, не вижу реальных проблем (IMHO).
Дело в том, что конечному пользователю НА-ПЛЕ-ВАТЬ на динамическое обновление данных.
А постоянное изменение данных на глазах пользователя может вызвать раздраженение.
Как правило, обновление (одной записи) делается (если очень нужно) при перемежении по записям, используя уникальный ключ. А обновление всего — только по запросу пользователя.
Команда 1: "UPDATE Table ..."
И сразу команда 2: "SELECT * FROM Table WHERE KeyField= ..."
Вообще эту проблему можно решить просто логикой. Грубо — есть статичные таблицы, данные в которых обновляются сравнительно редко, а чаще всего происходит простая выборка. А есть динамические (рабочие) таблицы.
Рабочие таблицы можно организовать как временные (для каждого пользователя) или как "разделенные" по определенному признаку (пример из бухгалтерии — таблица "Журнал", поле "Тип Журнала", которое содержит "Журнал Документов 1", "Журнал Документов 2" и тыды, а каждый пользователь работает в своем журнале).
При этом пользователь работает только в своей области. При завершении работы пользователь запускает "регистрацию", в процессе которой данные переносятся из "рабочей" таблицы в статическую.
Real programmers don't comment their code.
If it was hard to write, it should be hard to understand.