Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2010, 09:34   #1
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию убрать сдвиг в dbGrid

Здравствуйте. Скажите, пожалуйста, как убрать сдвиг данных в dbGrid-е при обновлении.
Например, в dbGrid-е отображается
121
122
123
124
125
126
127
128
И если выбрать, например, запись 127, то после кода
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
recno:=adotable1.RecNo;
Adotable1.Requery();
adotable1.RecNo:=recno;
end;
данные сдвигаются вниз
124
125
126
127
128
129
130
131
Как сделать так, чтобы после выполнения кода отображалось
121
122
123
124
125
126
127
128
Сергей089 вне форума Ответить с цитированием
Старый 08.02.2010, 09:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если не секрет то зачем ты в таймере такое делаешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2010, 10:12   #3
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию

Просто данные могут изменяться с нескольких компьютеров, поэтому обновляю через каждые 10 секунд.
Сергей089 вне форума Ответить с цитированием
Старый 08.02.2010, 10:27   #4
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

если данные постоянно меняются, то не стоит запоминать номер строки, это не идентификационный показатель записи, можно запоминать значение ключевого поля и затем делать Locate этого значениz. В случае удаления этого значения просто встать на начало.
И, я могу и ошибаться, просто подзабыла это дело, но кажется Requery и сам после обновления встает на ту же строку, в отличие от Refresh
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 08.02.2010, 10:37   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Просто данные могут изменяться с нескольких компьютеров
Я бы на твоем месте написал к программе оповещатель, мол - обновились данные, пошли сообщение всем компьютерам (по UDP например) типа, "Гей, хлопци, перечитайте". А вот так по таймеру... Так и на тормоза нарваться можно серьезно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2010, 10:44   #6
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию

Цитата:
Сообщение от koma_grusha Посмотреть сообщение
Requery после обновления встает на ту же строку
Так не получается. После Requery выбирается первая запись.
С Locate всеравно сдвигаются записи.
Код:
nomer:=form1.ADOTable1nom.Value;
Adotable1.Requery();
adotable1.Locate('nom',nomer,[]);
Цитата:
пошли сообщение всем компьютерам (по UDP например)
Для этого нужно знать адреса компьютеров? А БД сама может оповещать программу об изменении?

Последний раз редактировалось Stilet; 08.02.2010 в 11:25.
Сергей089 вне форума Ответить с цитированием
Старый 08.02.2010, 11:27   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Для этого нужно знать адреса компьютеров?
Не обязательно. UDP протокол может широко вещать всем компьютерам без указания IP - TIdUDPBase.Broadcast Этот метод посылает строку сообщения всем в сети.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2010, 11:42   #8
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию

И все равно после обновления в dbGrid-е будут сдвигаться данные. Есть какие нибудь идеи, как от этого избавиться?
Можно ли узнать какая запись отображается первой в dbGrid-е?

Кое-что нашел на http://forum.codenet.ru/showthread.php?t=46878. Попробую разобраться.

Последний раз редактировалось Stilet; 08.02.2010 в 12:04.
Сергей089 вне форума Ответить с цитированием
Старый 08.02.2010, 12:04   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я лично никогда такого не наблюдал чтоб после переоткрытия данные сдвигались. Единственное что могу тебе посоветовать, так это запоминать значение ключевого поля до переобновления в некую переменную, а после обновления методом locate становится на ту запись ключ которой запомнил - это сделает видимость что курсор не соскочил никуда.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2010, 12:26   #10
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

от себя:
пишите свой запрос и юзайте ADOQuery.
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сдвиг belii0987 Общие вопросы C/C++ 1 04.02.2010 16:05
Циклический сдвиг в С rand8154 Общие вопросы C/C++ 1 14.11.2009 01:49
Циклический сдвиг Mish92(21-09) Помощь студентам 0 07.11.2009 21:59
Как убрать прокрутку в DBGrid doncova1 Компоненты Delphi 5 02.05.2009 09:07
Сдвиг файла OrdJONY Общие вопросы Delphi 13 21.12.2007 22:22