Форум: "Базы";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизСобытие по смене записи Найти похожие ветки
← →
yurikon (2010-09-22 16:53) [0]Добрый день!
Вроде простая задача, но не могу решить. Какое событие вызывается, когда перемещаешься с одной записи на другую? использую TDBGridEh и TADODataSet.
Пробовал onMove - но оно генерируется постоянно, даже когда маркер не двигается по таблице.
Весь хелп уже облазил, помогите плиз.
С уважением,
Юрий.
← →
12 © (2010-09-22 17:03) [1]OnDataChange
← →
Sergey13 © (2010-09-22 17:14) [2]АфтерСкролл.
← →
Ega23 © (2010-09-22 17:18) [3]
> АфтерСкролл.
Оно всегда генерируется, даже если DataSet.DisabledControls
ИМХО, OnDataChange - в данном случае более верно.
← →
Sergey13 © (2010-09-22 17:37) [4]> [3] Ega23 © (22.09.10 17:18)
> в данном случае более верно.
А что за случай то? 8-)
← →
Ega23 © (2010-09-22 17:47) [5]
> А что за случай то? 8-)
По гриду товарищ смещается.
← →
yurikon (2010-09-22 18:13) [6]Афтерскролл - постоянно выскакивает, а onDatatChange - я не изменяю данные, просто прохожу по записям.
Что еще можно посмотреть?
← →
Германн © (2010-09-22 18:28) [7]
> 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 20:13) [8]onDataChange - не подходит, так как таблица переоткрывается каждую секунду и он срабатывает (((.
← →
Медвежонок Пятачок © (2010-09-22 21:16) [9]а ты переоткрывай чаще.
раз в миллисекунду.
тогда оно не успеет сработать.
← →
Ega23 © (2010-09-22 22:09) [10]
> так как таблица переоткрывается каждую секунду
Убивать за такое надо.
← →
sas-koval (2010-09-23 00:34) [11]
> так как таблица переоткрывается каждую секунду
это определённо странно.. на это есть какие-то адекватные причины?
и всё-же опиши, для чего тебе знать, когда сместился курсор? может к какому-то ещё событию привязаться? например очередной рефреш таблицы...
опиши детальней и больше будет толковых ответов.
> а ты переоткрывай чаще.
> раз в миллисекунду.
> тогда оно не успеет сработать.
)))))))
← →
Sergey13 © (2010-09-23 10:20) [12]> [8] yurikon (22.09.10 20:13)
Ты бы написал, что хочется получить в результате всех этих телодвижений. А то искать варианты к твоим домыслам быстро, видишь, не получается.
← →
yurikon (2010-09-23 13:56) [13]2 Ega23:
Если вы такой умный, может подскажите, как узнать обновилась внешняя таблица в базе аксесс, не переоткрывая ее?
по делу
Вообщем проблемка носит больше косметический характер. Есть форма с гридом и есть форма "поверх всех" с TDBLookupComboBoxEh со столбцом из этой же таблицы. Когда переходим на новую запись на гриде, надо чтобы автоматом обновлялся комбобох, для этого ему надо прописать KeyValue по событию, которое я пока не нашел.
С уважением.
← →
Ega23 © (2010-09-23 14:09) [14]
> Если вы такой умный, может подскажите, как узнать обновилась
> внешняя таблица в базе аксесс, не переоткрывая ее?
Да, я такой умный. Да, могу.
1. Такой функционал по-настоящему нужен только в очень небольшом количестве систем, в 99.99% случаев достаточно кнопки "Обновить", которую пользователь нажимает сам.
2. Как правило, пользователю нафиг не нужна ВСЯ выборка, ему нужно только то, что он видит на экране. Соответственно, если у тебя в базе миллион записей, то ты не весь миллион тащишь, а какое-то количество. Значит у пользователя должна быть возможность сортировки.
3. Если тебе всё-таки совсем пипец как необходимо свежие изменённые данные давать пользователю, то вот тебе один из вариантов:
3.1. В таблицу заводится поле LastModifyed datetime
3.2. Поле индексируется.
3.3. Выборка делается с учётом данного поля.
3.4. На клиенте данные сохраняются, также сохраняется максимальное значение времени в выборке.
3.5. Следующие запросы идут с проверкой, чтобы LastModifyed было больше.
3.6. GOTO 3.3.
← →
Ega23 © (2010-09-23 14:30) [15]
> для этого ему надо прописать KeyValue по событию, которое
> я пока не нашел.
Тебе в первом ответе всё сказали.
Но я понимаю, тебе лениво в хелп лезть, в исходники, экспериментировать...
Гораздо проще на форуме, да?
Хотя нет, в [7] тебе даже хелп процитировали. Даже выделили.
Чего непонятно-то?
← →
Sergey13 © (2010-09-23 15:20) [16]> [13] yurikon (23.09.10 13:56)
Я это делаю через
> [2] Sergey13 © (22.09.10 17:14)
> АфтерСкролл.
Только не напрямую, а через таймер. Т.е. в самом событии перезапуск таймера, а в онТайм переоткрытие нужного датасета. Это для того, что бы отсечь работу при "скольжении" по записям.
← →
yurikon (2010-09-23 15:45) [17]
> Тебе в первом ответе всё сказали.
> Но я понимаю, тебе лениво в хелп лезть, в исходники, экспериментировать.
> ..
> Гораздо проще на форуме, да?
На форуме много умных людей, а с ними всегда приятно общаться ;-).
А за конструктив в [14] действительно спасибо. Ваш ответ натолкнул на мысль, что выполнение программы можно значительно ускорить при запросах к таблицам, в которых только увеличивается количество записей, а сами записи не изменяются.
Осталось сообразить, как "правильней" доклеивать новые записи из Запроса1 к старым...
Создать клон таблицы и SELECT ... INTO ..."клон" - доклеивать?
С уважением,
Юрий.
← →
Ega23 © (2010-09-23 15:53) [18]
> Осталось сообразить, как "правильней" доклеивать новые записи
> из Запроса1 к старым...
DataSet.Insert, TDataSet.Edit
← →
Германн © (2010-09-23 15:54) [19]
> натолкнул на мысль, что выполнение программы можно значительно
> ускорить
Если мне будет позволено еще чуть-чуть потелепировать, то могу предположить что использование DisableControls/EnableControls тоже может помочь ОРД.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.078 c