|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.04.2013, 17:37 | #1 |
Форумчанин
Регистрация: 09.09.2008
Сообщений: 418
|
Как правильно обновлять dataset?
Инструменты : Delphi XE2, FibPlus, Ehlib, соответственно БД - *.fdb.
На форме: pFIBStoredProc1, pFIBDataSet1, DataSource1, DBGridEh1. Читаю с com-порта данные в отдельном потоке и заношу в БД. после каждого Insert закрываю и открываю dataset, т.е. Код:
Спасибо! |
28.04.2013, 17:44 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Может у твоего грида есть некий метод типа Refresh или Reopen?
I'm learning to live...
|
28.04.2013, 17:44 | #3 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
У датасетов есть методы DisableControls и EnableControls.
Перед перечитыванием данных с сервера отключить прорисовку: pFIBDataSet1.DisableControls, после включить: pFIBDataSet1.EnableControls. В этом контексте First и Last лишние вызовы. Последний раз редактировалось Прик; 28.04.2013 в 17:46. |
28.04.2013, 17:52 | #4 | |
Форумчанин
Регистрация: 09.09.2008
Сообщений: 418
|
Цитата:
|
|
28.04.2013, 18:03 | #5 | |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Цитата:
И, признаться, не совсем понятно при чем здесь объем возвращаемых записей. От количества возвращаемых записей установка курсора (маркера, "ползунка") после открытия выборки не зависит никак. Последний раз редактировалось Прик; 28.04.2013 в 18:06. |
|
28.04.2013, 18:07 | #6 |
Форумчанин
Регистрация: 09.09.2008
Сообщений: 418
|
Все верно, а вот где конец выборки он не знает и даже размер самого ползунка не соответствует соотношению количества записей к высоте грида.
ПРИК, спасибо с DisableControls все работает отлично, вот как теперь сделать, чтобы при каждой новой записи не скакал в начало датасета, если выделена конкретная? Последний раз редактировалось tarakan1983; 28.04.2013 в 18:14. |
28.04.2013, 18:17 | #7 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Здесь вы правы. Ползунок гриды "не знает" конца выборки пока не будет достигнут конец выборки. Но если количество строк в выборке будет большим, то ваш демарш (Last, First) вызовет полный как говорится фетч всех записей, а нередко это приводит к большим задержкам и как вы говорите, к перемаргиванию гриды.
И тут возникает вопрос: "вам ехать ли шашечки?" Зачем заморачиваться на ерунду в виде "правильно" выставленного ползунка скролбара, если это приводит к заметному неудобству в работе пользователя с вашим приложением. |
28.04.2013, 18:21 | #8 | |
Форумчанин
Регистрация: 09.09.2008
Сообщений: 418
|
Цитата:
Можете подскажете как теперь сделать, чтобы при каждой новой записи курсор не скакал в начало датасета, если выделена конкретная? |
|
28.04.2013, 18:27 | #9 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Запоминать местоположение курсора и возвращать его на место после перечитывания данных методом Locate.
Но, вообще-то, при добавлении записей так делать не принято (хотя, конечно, кто запретит). В этом случае я, например, выясняю у сервера идентификатор новой строки и по нему позиционирую на вставленную запись. Последний раз редактировалось Прик; 28.04.2013 в 18:30. |
28.04.2013, 18:31 | #10 |
Форумчанин
Регистрация: 09.09.2008
Сообщений: 418
|
это если использовать DBGridEh1CellClick(Column: TColumnEh);
а у меня грид Readonly и при использовании колесика мышки курсор перемещается. И получается пользователь кликнул на ID = 145, потом колесиком пролистал до ID = 174 и при обновлении датасета курсор сбежит на id = 145. Как тут быть? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как обновить DataSet? | Vit@L | БД в Delphi | 23 | 25.10.2012 18:33 |
Как обновлять значения в ячейках автоматически? и упростить код? | budmit | Microsoft Office Excel | 4 | 20.06.2011 13:20 |
Строку из одного DataSet в другой DataSet | Abbath1349 | Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) | 0 | 22.05.2011 19:26 |
Как рабоать с классом DataSet | Droid | Общие вопросы .NET | 2 | 18.01.2011 09:24 |
Из DataSet работающего по циклу в DataSet | maroder22 | БД в Delphi | 1 | 05.09.2010 23:22 |