-
Добрый день!
Просветите плиз на счет работы с таблицами в памяти. Например, RXMemoryData - набор данных, который живет в оперативке. Но ведь и любой локальный курсор также создается в оперативной памяти.
В чем различие?
С уважением.
-
Видимо он может и не иметь источника данных
-
один RX... другой ADO... третий Client...
ты что Пацак дальтоник что ли? © Кин Дза Дза
> Видимо он может и не иметь источника данных
все могут.
-
КУ :-)
Поясню задачу. На sql сервере есть таблица, которая накапливает записи в рилтайме. Каждый раз перезапрашивать все таблицу не есть гуд. На клиенте надо только отображать данные, редактирование не требуется.
Посоветуйте, плиз, какой компонент на клиенте использовать, чтобы туда складировать новые записи с сервера? TClientDataSet?
С уважением.
-
> которая накапливает записи
> Каждый раз перезапрашивать все таблицу не есть гуд.
для новых придется... либо сначала открывать обычно, а дальше самому делать "ручной дозапрос"
> Посоветуйте, плиз
хочешь трехзвенку? делай с клиентским, у него провайдер данных подходящий по это дело есть... не хочешь заморачиваться лишним звеном? ну тогда по базе смотри, если mssql то ADO наиболее подходящее.
-
для ADO например есть режим батчапдейт... начальное скачивание гарантировано, дальше как хочешь меняй только апдейт не делай, все в памяти, никакой записи. а для полной гарантии можно еще и от коннекта отключить тогда даже сделав ничего не запишешь, ошибку получишь.
-
> Посоветуйте, плиз, какой компонент на клиенте использовать,
> чтобы туда складировать новые записи с сервера?
TObjectList<T>
Серьёзно.
-
Приветствую!
Про TList (TObjectList) думал, не охота с каждым объектом возиться.
2 sniknik:
Я сейчас использую ADO. Мне не совсем понятен механизм - как можно использовать адодтасет в качестве таблицы в памяти, без привязки к реальной таблице в базе?
С уважением, Юрий.
-
> как можно использовать адодтасет в качестве таблицы в памяти
Как и любой другой.
with DataSet do
begin
Insert;
FieldByName(...). := ....;
........
FieldByName(...). := ....;
Post;
end;
Но я бы крайне посоветовал не лениться и и использовать TObjectList<T>
-
накой здесь датасет вообще?
только потому что на него можно повесить грид?
обычный запрос по ключу "где больше чем у меня есть" + стринггрид, стринглист etc.
-
> + стринггрид, стринглист etc.
ListView
-
> как можно использовать адодтасет в качестве таблицы в памяти, без привязки к реальной таблице в базе?
вообще без привязки см. хелп от TClientDataSet-а, принцип тот же. но вообще откуда тогда начальные данные брать?, они же нужны судя по твоему описанию... проще как говорил, загрузить и или не апдейтить изменения, либо вообще "отключить" коннект, чтобы даже возможности такой не было.
-
> накой здесь датасет вообще?
> только потому что на него можно повесить грид?
индексы/фильтр/сортировка/объединения
> стринггрид
никогда не пользуюсь давно уже... из-за принципа хранения данных, "DB аваре" с их "отображаемым окном" гораздо более логично/удобно/функционально/менее напряжно при более менее большом количестве обрабатываемых данных.
-
судя по всему у него там просто журнал.
значит никаких индексов не надо и сортировка по времени задом наперед.
-
> судя по всему у него там просто журнал.
даже если так, достаточно большой журнал в стринглисте будет тормозить, из-за того, что данные хранятся в прямо в компоненте. да и сортировка в нем будет делаться сдвигом все большего количества строк ("задом наперед" это - последнее в начало вставлять?)
все одно бы сделал в рекордсете + дбгрид.
-
> [3] yurikon (25.10.11 17:28)
> Поясню задачу. На sql сервере есть таблица, которая накапливает
> записи в рилтайме. Каждый раз перезапрашивать все таблицу
> не есть гуд. На клиенте надо только отображать данные, редактирование
> не требуется.
И сколько примерно данных ты желал бы видеть на клиенте? И как часто обновлять? Кто и (главное) как на них смотреть будет?
Я бы подумал на тему получать агрегатные значения за последние полчаса-час (подобрать эмпирически нужное) и 100-200 самых последних "для примера". И не заморачиваться на изыски в памяти.
-
Доброго дня всем!
Нюанс вот еще в чем. Данные тянутся с нескольких однотипных таблиц. Я их сейчас объединяю в запросе UNION`ом. К концу дня строк может быть под 500-700 в итоговом запросе. Обновление идет сразу, как только добавилась хоть одна запись в любой таблице (через триггер).
Видеть надо все записи.
Поэтому и иду в сторону решения, предложенного Медвежонком - дозапрашивать новые записи и добавлять их DataSet.Append.
Раньше никогда просто не использовал датасеты без привязки к реальной таблице в базе. :-)
Спасибо за советы, буду пробовать ADO раз с ним уже работаю.
С уважением, Юрий.
-
> [16] Yurikon (27.10.11 17:35)
> К концу дня строк может быть под 500-700 в итоговом запросе.
Т.е. реально 300-400, а то и меньше? Вы через модем на скорости 4800bps работаете что ли? Было бы о чем заморачиваться и огород городить, ИМХО.