Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Событие по смене записи [D7, access]


yurikon ©   (2010-09-22 16:53:00) 

Добрый день!

Вроде простая задача, но не могу решить. Какое событие вызывается, когда перемещаешься с одной записи на другую? использую TDBGridEh и TADODataSet.

Пробовал onMove - но оно генерируется постоянно, даже когда маркер не двигается по таблице.

Весь хелп уже облазил, помогите плиз.

С уважением,
 Юрий.


Германн   (2010-09-23 15:54:00) [1]


> натолкнул на мысль, что выполнение программы можно значительно
> ускорить

Если мне будет позволено еще чуть-чуть потелепировать, то могу предположить что использование DisableControls/EnableControls тоже может помочь ОРД.


Ega23   (2010-09-23 15:53:00) [2]


> Осталось сообразить, как "правильней" доклеивать новые записи
> из Запроса1 к старым...


DataSet.Insert, TDataSet.Edit


yurikon   (2010-09-23 15:45:00) [3]


> Тебе в первом ответе всё сказали.
> Но я понимаю, тебе лениво в хелп лезть, в исходники, экспериментировать.
> ..
> Гораздо проще на форуме, да?


На форуме много умных людей, а с ними всегда приятно общаться ;-).

А за конструктив в [14] действительно спасибо. Ваш ответ натолкнул на мысль, что выполнение программы можно значительно ускорить при запросах к таблицам, в которых только увеличивается количество записей, а сами записи не изменяются.
Осталось сообразить, как "правильней" доклеивать новые записи из Запроса1 к старым...
Создать клон таблицы и SELECT ... INTO ..."клон" - доклеивать?

С уважением,
 Юрий.


Sergey13   (2010-09-23 15:20:00) [4]

> [13] yurikon   (23.09.10 13:56)

Я это делаю через
> [2] Sergey13 ©   (22.09.10 17:14)
> АфтерСкролл.

Только не напрямую, а через таймер. Т.е. в самом событии перезапуск таймера, а в онТайм переоткрытие нужного датасета. Это для того, что бы отсечь работу при "скольжении" по записям.


Ega23   (2010-09-23 14:30:00) [5]


> для этого ему надо прописать KeyValue по событию, которое
> я пока не нашел.


Тебе в первом ответе всё сказали.
Но я понимаю, тебе лениво в хелп лезть, в исходники, экспериментировать...
Гораздо проще на форуме, да?
Хотя нет, в [7] тебе даже хелп процитировали. Даже выделили.
Чего непонятно-то?


Ega23   (2010-09-23 14:09:00) [6]


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


Да, я такой умный. Да, могу.
1. Такой функционал по-настоящему нужен только в очень небольшом количестве систем, в 99.99% случаев достаточно кнопки "Обновить", которую пользователь нажимает сам.
2. Как правило, пользователю нафиг не нужна ВСЯ выборка, ему нужно только то, что он видит на экране. Соответственно, если у тебя в базе миллион записей, то ты не весь миллион тащишь, а какое-то количество. Значит у пользователя должна быть возможность сортировки.
3. Если тебе всё-таки совсем пипец как необходимо свежие изменённые данные давать пользователю, то вот тебе один из вариантов:
3.1. В таблицу заводится поле LastModifyed datetime
3.2. Поле индексируется.
3.3. Выборка делается с учётом данного поля.
3.4. На клиенте данные сохраняются, также сохраняется максимальное значение времени в выборке.
3.5. Следующие запросы идут с проверкой, чтобы LastModifyed было больше.
3.6. GOTO 3.3.


yurikon   (2010-09-23 13:56:00) [7]

2 Ega23:
Если вы такой умный, может подскажите, как узнать  обновилась внешняя таблица в базе аксесс, не переоткрывая ее?

по делу

Вообщем проблемка носит больше косметический характер. Есть форма с гридом и есть форма "поверх всех" с TDBLookupComboBoxEh со столбцом из этой же таблицы. Когда переходим на новую запись на гриде, надо чтобы автоматом обновлялся комбобох, для этого ему надо прописать KeyValue по событию, которое я пока не нашел.

С уважением.


Sergey13   (2010-09-23 10:20:00) [8]

> [8] yurikon   (22.09.10 20:13)

Ты бы написал, что хочется получить в результате всех этих телодвижений. А то искать варианты к твоим домыслам быстро, видишь, не получается.


sas-koval   (2010-09-23 00:34:00) [9]


> так как таблица переоткрывается каждую секунду

это определённо странно.. на это есть какие-то адекватные причины?
и всё-же опиши, для чего тебе знать, когда сместился курсор? может к какому-то ещё событию привязаться? например очередной рефреш таблицы...

опиши детальней и больше будет толковых ответов.


> а ты переоткрывай чаще.
> раз в миллисекунду.
> тогда оно не успеет сработать.

)))))))


Ega23   (2010-09-22 22:09:00) [10]


> так как таблица переоткрывается каждую секунду


Убивать за такое надо.


Медвежонок Пятачок   (2010-09-22 21:16:00) [11]

а ты переоткрывай чаще.
раз в миллисекунду.
тогда оно не успеет сработать.


yurikon   (2010-09-22 20:13:00) [12]

onDataChange - не подходит, так как таблица переоткрывается каждую секунду и он срабатывает (((.


Германн   (2010-09-22 18:28:00) [13]


> onDatatChange - я не изменяю данные, просто прохожу по записям

Occurs when the data in a record has changed, either due to field edits or moving the cursor to a new record.


yurikon   (2010-09-22 18:13:00) [14]

Афтерскролл - постоянно выскакивает, а onDatatChange - я не изменяю данные, просто прохожу по записям.

Что еще можно посмотреть?


Ega23   (2010-09-22 17:47:00) [15]


> А что за случай то? 8-)


По гриду товарищ смещается.


Sergey13   (2010-09-22 17:37:00) [16]

> [3] Ega23 ©   (22.09.10 17:18)
> в данном случае более верно.

А что за случай то? 8-)


Ega23   (2010-09-22 17:18:00) [17]


> АфтерСкролл.


Оно всегда генерируется, даже если DataSet.DisabledControls
ИМХО, OnDataChange - в данном случае более верно.


Sergey13   (2010-09-22 17:14:00) [18]

АфтерСкролл.


12   (2010-09-22 17:03:00) [19]

OnDataChange


Наверх

Титульная страница Поиск, карта сайта Написать письмо