Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.04.08;
Скачать: [xml.tar.bz2];

Вниз

ADO+DataSet+DBGrid - быстро обновить данные.   Найти похожие ветки 

 
Alex_C   (2011-12-14 14:02) [0]

Есть Аксесная таблица - 160 тыс записей. Через ADOCommand INSERT INTO добавляем в нее новые данные. Естественно нужно обновить данные в DataSet, чтоб в гриде уже актуальные данные отображались. Кроме как SELECT * FROM это можно как то сделать - таким образом на обновление данных порядка 3 сек уходит. Может есть смысл вообще для тавличного вида отказаться от DataSet+DBGrid - но тогда что взамен?


 
Ega23 ©   (2011-12-14 14:05) [1]

Зачем тебе 160.000 записей на клиенте одновременно?
Если есть серьёзный аргумент на этот вопрос - то имеет смысл обсуждать варианты действий.


 
Медвежонок Пятачок ©   (2011-12-14 14:11) [2]

Кроме как SELECT * FROM это можно как то сделать - таким образом на обновление данных порядка 3 сек уходит.

а зачем лезть за этими данными в таблицу, если эти данные доступны еще до выполнения инсертов?


 
Anatoly Podgoretsky ©   (2011-12-14 14:18) [3]

> Alex_C  (14.12.2011 14:02:00)  [0]

Ну используй тогда карточки


 
Alex_C   (2011-12-14 14:22) [4]


> Если есть серьёзный аргумент на этот вопрос - то имеет смысл
> обсуждать варианты действий.


Есть. Основное в этом - это есть во всех других подобных программах. :)
И самый главный аргумент - в аналогичной моей программе (т.е. ADO+Access) на этой же самой базе вставка в таблицу происходит мгновенно! Уже всю голову сломал - как этого удалось добиться?
Уже выборку в отдельный тред вынет, чтоб если вставка данных быстро идет - чтоб задержки не было при наборе новых данных, но все равно - таблица обновляется с задержкой.


> а зачем лезть за этими данными в таблицу, если эти данные
> доступны еще до выполнения инсертов?


Вот я в этом направлении и мыслю. Только как их более правильно добавлять в DBGrid, не лезя в таблицу?


 
Медвежонок Пятачок ©   (2011-12-14 14:25) [5]

А зачем их добавлять в дбгрид, тем более, что дбгрид ничего и никогда добавлять нельзя?


 
Ega23 ©   (2011-12-14 14:30) [6]


> Есть. Основное в этом - это есть во всех других подобных
> программах. :)


Приведи пример.


> Только как их более правильно добавлять в DBGrid, не лезя
> в таблицу?


Ну и вставляй это запись в DataSet, в чём проблема-то?

with DataSet do
begin
 DisableControls;
 try
   Insert;
   try
     FieldByName().As... := ...;
     FieldByName().As... := ...;
     ....
     Post;
   except
     Cancel;
   end;
 finally
   Enablecontrols;
 end;
end;


 
Alex_C   (2011-12-14 14:40) [7]


> Ну и вставляй это запись в DataSet, в чём проблема-то?


Имеется ввиду ADODAtaSet?
Так у меня по началу так и было сделано. Но при Post программа зависала на 3 сек. Я так понимаю это из за того, что сама база обновлялась. При использовании ADOCommand INSERT INTO - добавление происходит "фоново", что очень удобно, не задерживает следующий ввод.


 
Медвежонок Пятачок ©   (2011-12-14 14:42) [8]

вселенские проблемы.....


 
Ega23 ©   (2011-12-14 14:52) [9]


>  Я так понимаю это из за того, что сама база обновлялась.


Поройся в свойствах, там что-то было на этот счёт.
Ну или вообще отключи нафиг от коннекта.


 
Inovet ©   (2011-12-14 15:17) [10]

> [9] Ega23 ©   (14.12.11 14:52)
> >  Я так понимаю это из за того, что сама база обновлялась.
>
> Поройся в свойствах, там что-то было на этот счёт.

MarshalOptions?


 
Inovet ©   (2011-12-14 15:20) [11]

> [0] Alex_C   (14.12.11 14:02)
> 160 тыс записей

Пользователь их все не сможет разглядеть. Выбирай только те, которые ему нужны, например: за указанный им период, по указанной стране, и т.п. в разных сочетаниях.


 
Alex_C   (2011-12-14 15:20) [12]


> MarshalOptions?


moMarshalModifiedOnly - если поможет, было бы круто))


 
Alex_C   (2011-12-14 15:21) [13]


> Пользователь их все не сможет разглядеть. Выбирай только
> те, которые ему нужны, например: за указанный им период,
>  по указанной стране, и т.п. в разных сочетаниях.


Да я конечно понимаю. Но понимаю и другое - раз в другой программе это реализовано, и реализовано ОЧЕНЬ быстро - зачем пользователя вообще в чем то искусственно ограничивать. Надо просто понять, как так удалось сделать.


 
Inovet ©   (2011-12-14 15:27) [14]

> [13] Alex_C   (14.12.11 15:21)
> Надо просто понять, как так удалось сделать.

Может там программа на dbf сделана и прямая навигация по файлу, в ADO данные хранятся локально в памяти в Датасете. А если их будет не 160 тыс, а 100500 млрд?


 
Ega23 ©   (2011-12-14 15:32) [15]


> Надо просто понять, как так удалось сделать.


Не используй DB-Aware, пользуй ORM.
Правда тут есть нюансы по-поводу того, что будет, когда в БД что-то изменилось другим пользователем. Перестраивать всё заново? Учитывать в БД произведённые изменения? Не удалять реально записи, а помечать флагом "удалено", а также ко всем записям присобачить метку изменения, и потом выбирать те, у которых изменение было после последней выборки?
Вариантов много.
А что касается пользователя, то он видит только те записи, которые помещаются на экран. Вопрос: нахрена ему стопицот (а в твоём случае даже в полтора раза больше) записей на клиенте?
Используй систему фильтров.


 
Ega23 ©   (2011-12-14 15:33) [16]


> Inovet ©   (14.12.11 15:17) [10]
>
> MarshalOptions?


Возможно, я точно не помню. Такое дело лет 5 назад реализовывал, исходники есть, но искать в них тупо лень, да и времени нет.


 
Alex_C   (2011-12-14 17:25) [17]


> Возможно, я точно не помню


Исходников не надо - нужно направление. Дальше сам или соображу, или накопаю)))


> Не используй DB-Aware, пользуй ORM.


Да только сегодня про это ситал. Пока Думаю...


> Правда тут есть нюансы по-поводу того, что будет, когда
> в БД что-то изменилось другим пользователем. Перестраивать
> всё заново? Учитывать в БД произведённые изменения? Не удалять
> реально записи, а помечать флагом "удалено", а также ко
> всем записям присобачить метку изменения, и потом выбирать
> те, у которых изменение было после последней выборки?


Отталкиваясь от реальной задачи - у меня все проще. На эти вопросы ответ достаточно простой...


> А что касается пользователя, то он видит только те записи,
>  которые помещаются на экран. Вопрос: нахрена ему стопицот
> (а в твоём случае даже в полтора раза больше) записей на
> клиенте?
> Используй систему фильтров.


Как это сказать... традиция чтоль))) У меня какие угодно фильтры есть - и по времени конечно тоже. Но вот есть такое))) в радиолюбительской среде)))


> а также ко всем записям присобачить метку изменения, и потом
> выбирать те, у которых изменение было после последней выборки?
>


Почему бы не идея?


> Может там программа на dbf сделана и прямая навигация по
> файлу, в ADO данные хранятся локально в памяти в Датасете.
>  А если их будет не 160 тыс, а 100500 млрд?


Очень возможно Но опять же - среднестатистическое количество QSO в логе - не более 30 тыс. У 5% "монстров" - до 300 тыс. Говорят, было 2-3 коллективки, у который почти до миллиона доходило. Вот и хочу от реалий отталкиваться. А с малым количеством записей оно другое чем у 100 мульонов. Согласись!


 
Ega23 ©   (2011-12-14 17:37) [18]


> Исходников не надо - нужно направление. Дальше сам или соображу,
>  или накопаю)))


Направление я уже дал. Поковыряйся в опциях TADODataSet, там что-то есть на этот счёт.


> Как это сказать... традиция чтоль))) У меня какие угодно
> фильтры есть - и по времени конечно тоже. Но вот есть такое)))
> в радиолюбительской среде)))


Ну так и применяй их на уровне СУБД, а не локально, в чём проблема-то?


> Почему бы не идея?


Этой "идее" сто лет в обед.


>  А с малым количеством записей оно другое чем у 100 мульонов.
>  Согласись!


Не соглашусь. Тебе надо коммерческую выгоду поиметь? Ну так и ориентируйся на большинство, а не на гиков-красноглазиков.
Основная задача - поиметь денег, сделав при этом минимум работы и быстро.
Будешь делать "офигенно-качественный продукт, который будет работать под любой осью, любым браузером и будет любой офисный пакет использовать, а также разворачиваться на любой СУБД" - тебя конкуренты сожрут моментально, ибо сроки.
Но это только в случае коммерческого приложения.
А если "для души" - пуркуа бы и не па?


 
Медвежонок Пятачок ©   (2011-12-14 17:45) [19]

Ну допустим, что ты вставил 30000 записей мгновенно.
Затем так же мгновенно переоткрыл датасет с новыми записями.

Это значит, что решаемая задача уже решена и юзер доволен?


 
Медвежонок Пятачок ©   (2011-12-14 22:44) [20]

Такой простой вопрос, а ставит вас в тупик.

Итак, что сделает юзер, когда его грид мгновенно всосет все 30000 записей?

Он его закроет и счастливый ляжет спать?
Он будет шариться по этому гриду в поисках чего-то интересного, перебирая 30000 строк?
А может быть он захочет посмотреть нечто конкретное наложив фильтр или применив поиск?

Вопрос: чего ради надо было лезть из кожи вон и делать мгновенную загрузку 30000 строк, если юзер сразу после открытия датасета применяет фильтр?


 
Alex_C   (2011-12-17 00:24) [21]


> Вопрос: чего ради надо было лезть из кожи вон и делать мгновенную
> загрузку 30000 строк


И все же опять подниму эту тему - очень многое, да в принципе глобальное все уже переделано под под SQL. Спасибо всем присутствующим.
Но пока последний такой глобальный момент остается - в другой программе все мгновенно в таблице отображается.
Давайте оставим "зачем это нужно", меня интересует вопрос "ну как же это сделано"? Вариант с Marshal не прокатил. Другие опции пробовал - пока результат ноль.


 
Ega23 ©   (2011-12-17 00:40) [22]


> меня интересует вопрос "ну как же это сделано"


Вариантов - масса.
Я уже советовал ORM посмотреть. Например.


 
Alex_C   (2011-12-17 00:46) [23]


> Я уже советовал ORM посмотреть.

Все же по совокупности некоторых данных - это не оно. Что-то ну совсем примитивное... dbf правда чтоли?))



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2012.04.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.006 c
15-1323350471
TUser
2011-12-08 17:21
2012.04.08
Текущий момент


6-1254724774
matt_
2009-10-05 10:39
2012.04.08
Wi-Fi и прием данных


15-1323164766
mochik
2011-12-06 13:46
2012.04.08
Inna Setup 5


15-1323421930
aka
2011-12-09 13:12
2012.04.08
Текстовый редактор на PaintBox.


2-1324135784
igorium
2011-12-17 19:29
2012.04.08
TabControl и 64-битная Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский