Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1352865495
MonoLife
2012-11-14 07:58
2013.03.22
Диалоговое окно выбора папки в играх.


15-1336422605
Юрий
2012-05-08 00:30
2013.03.22
С днем рождения ! 8 мая 2012 вторник


2-1329076090
dis12345
2012-02-12 23:48
2013.03.22
checkbox в stringgrid


15-1333812420
БарЛог
2012-04-07 19:27
2013.03.22
Перенести иероглифы с листа А4 на обои


15-1338256258
Error macro
2012-05-29 05:50
2013.03.22
Как стать фрилансером?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский