![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Событие по смене записи [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