Конференция "Базы" » Событие по смене записи [D7, access]
 
  • yurikon (22.09.10 16:53) [0]
    Добрый день!

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

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

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

    С уважением,
     Юрий.
  • 12 © (22.09.10 17:03) [1]
    OnDataChange
  • Sergey13 © (22.09.10 17:14) [2]
    АфтерСкролл.
  • Ega23 © (22.09.10 17:18) [3]

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


    Оно всегда генерируется, даже если DataSet.DisabledControls
    ИМХО, OnDataChange - в данном случае более верно.
  • Sergey13 © (22.09.10 17:37) [4]
    > [3] Ega23 ©   (22.09.10 17:18)
    > в данном случае более верно.

    А что за случай то? 8-)
  • Ega23 © (22.09.10 17:47) [5]

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


    По гриду товарищ смещается.
  • yurikon (22.09.10 18:13) [6]
    Афтерскролл - постоянно выскакивает, а onDatatChange - я не изменяю данные, просто прохожу по записям.

    Что еще можно посмотреть?
  • Германн © (22.09.10 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 (22.09.10 20:13) [8]
    onDataChange - не подходит, так как таблица переоткрывается каждую секунду и он срабатывает (((.
  • Медвежонок Пятачок © (22.09.10 21:16) [9]
    а ты переоткрывай чаще.
    раз в миллисекунду.
    тогда оно не успеет сработать.
  • Ega23 © (22.09.10 22:09) [10]

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


    Убивать за такое надо.
  • sas-koval (23.09.10 00:34) [11]

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

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

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


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

    )))))))
  • Sergey13 © (23.09.10 10:20) [12]
    > [8] yurikon   (22.09.10 20:13)

    Ты бы написал, что хочется получить в результате всех этих телодвижений. А то искать варианты к твоим домыслам быстро, видишь, не получается.
  • yurikon (23.09.10 13:56) [13]
    2 Ega23:
    Если вы такой умный, может подскажите, как узнать  обновилась внешняя таблица в базе аксесс, не переоткрывая ее?

    по делу

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

    С уважением.
  • Ega23 © (23.09.10 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 © (23.09.10 14:30) [15]

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


    Тебе в первом ответе всё сказали.
    Но я понимаю, тебе лениво в хелп лезть, в исходники, экспериментировать...
    Гораздо проще на форуме, да?
    Хотя нет, в [7] тебе даже хелп процитировали. Даже выделили.
    Чего непонятно-то?
  • Sergey13 © (23.09.10 15:20) [16]
    > [13] yurikon   (23.09.10 13:56)

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

    Только не напрямую, а через таймер. Т.е. в самом событии перезапуск таймера, а в онТайм переоткрытие нужного датасета. Это для того, что бы отсечь работу при "скольжении" по записям.
  • yurikon (23.09.10 15:45) [17]

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


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

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

    С уважением,
     Юрий.
  • Ega23 © (23.09.10 15:53) [18]

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


    DataSet.Insert, TDataSet.Edit
  • Германн © (23.09.10 15:54) [19]

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

    Если мне будет позволено еще чуть-чуть потелепировать, то могу предположить что использование DisableControls/EnableControls тоже может помочь ОРД.
 
Конференция "Базы" » Событие по смене записи [D7, access]
Есть новые Нет новых   [134432   +18][b:0][p:0.001]