Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Вниз

Как свободно просматривать таблицу при добавлении данных?   Найти похожие ветки 

 
vitnt2000   (2002-09-10 07:00) [0]

Моя программа периодически добавляет данные в таблицу базы даннах, при этом положение курсора DBGrid премещается на последню(добавленую) строку. Очень неудобно, если при этом просматриваешь таблицу.
Как сделать, чтобы данные добавлялись, но при этом можно было свободно перемещаться по таблице?
Может у DBGrid можно отключить слежение за указателем?
Подскажите пожалуйста.


 
gek   (2002-09-10 07:03) [1]

Использовать закладки, если я правильно понял


 
vitnt2000   (2002-09-10 07:12) [2]

В смысле "закладки"?
Я пробовал запоминать положение курсора перед добавление данных и востанавливать после. Плохо получается, таблица дергаеться при добавлени данных.


 
gek   (2002-09-10 07:24) [3]

Я что-то не пойму, ты хочешь просматривать реальные данные и в то же время хочешь чтобы Grid не дергался. Тут надо выбирать или подключай Grid в нужный момент и отключай когда он не нужен
Сделай в конце концов это дело на SQL и смотри по необходимости


 
Max Zyuzin   (2002-09-10 08:56) [4]

Есть такой метод Locate у TBDEDataSet пробовал им воспользоваться для поиска нужной записи?


 
Anatoliy   (2002-09-10 09:48) [5]

Можно использовать закладки и в это время запретить перерисовку грида, что-то вроде:

B:=DS.SaveBookmark;
Grid.DisableControls;
AddRecord;
DS.GotoBookmark(B);
Grid.EnableControls;


 
makdi   (2002-09-10 09:53) [6]

Перед добавлением строки сделай Table1.DisableControls (грид не будет дергаться когда будет добавление), затем поставь метку методом Table1.GetBookMark, после этого можешь добавить строку. Посде добаки, делаешь Table1.Gotobookmark, Table1.EnableControls и удаляешь метку Table1.Freebookmark.
А лучше почитай хелп, там болле подробно написано, даже с примерами.


 
MsGuns   (2002-09-10 11:22) [7]

Чтобы грид вообще не реагировал на добавление записей, надо
1. Данные добавлять не в ds, связанный с гридом, а в другой dataset, ссылающийся на ту же таблицу.
2. В процедуре добавления:
- Запрет гриду перерисовываться с помощью св-ва grid.datasource.enable := false;
- открыть ttable2 (tquery2)
- выполнить модификацию таблицы через ttable2 (tquery2)
- согласовать модификацию (ApplyUpdate)
- закрыть ttable2 (tquery2)
- Разрешить гриду перерисовываться с помощью св-ва grid.datasource.enable := true и Refresh


 
NikolaB   (2002-09-10 11:23) [8]

U menia podobnii problem, no zapisi dobavliautsa iz ComPort po prerivanie. Mne kajetsa, sto luchshe, esli sdelat dva tTable - odin, kotoroi sviazan s tDBGrid, a na drugom delaetsa Append.


 
kva   (2002-09-11 08:37) [9]

Привет всем!
К сожалению, дать более умного совета, чем
Anatoliy, makdi, MsGuns и NikolaB не могу. Но мне кажется и их советы не очень хороши по следующим соображениям

2 Anatoliy, makdi
При использовании bookmark (bookmarkstr), при перемещении на запомненную запись не всегда, но (в зависимости от размеров гридки и количества записей) может происходить смещение показываемых записей относительно координат гридки. Иными словами текущая запись не изменилась, но она может показываться не в конце гридки как до добавления записей, а в середине. Это создает эффект дергания на экране.

2 MsGuns и NikolaB. Предложенный вами способ не приверял на практике, но мне кажется, что при grid.Refresh может происходить такой же эффект дергания.

Если я не прав - укажите.



 
vitnt2000   (2002-09-11 11:40) [10]

Спасибо всем за советы, я остановился на варианте

IBtable1.DisableControls; //отключаем управление
SavePlace:=IBtable1.GetBookmark; //ставим закладку
Append - Добавление данных
Ibtable1.GotoBookmark(SavePlace);//возвращаемся к закладке
Ibtable1.EnableControls; //включаем управление
Ibtable1.FreeBookmark(SavePlace);//
эфект дергания появляется если добавляемая строка в видимой части таблицы, но с этим можно смириться.
Вариант с двумя таблицами (хотя он более разумный) не получился, у меня почемуто при добавлении данных из Грида изчезала текущая
строка, и я не мог изменять данные через Грид, т.е - при следующем добалении данных изменения пропадали.
И вообще работа с базой через две таблицы идет как-то нестабильно.


 
Prooksius   (2002-09-11 14:14) [11]

Еще можно использовать метод Locate у датасета с позиционированием по центру DBGrid-а:

if Table1.Locate(FieldNames, FieldValues, Options) then
Table1.MoveBy(
-Table1.MoveBy(DBGrid.VisibleRowCount div 2));

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
3-7851
Steven
2002-09-13 07:49
2002.10.03
Дрова для


1-7899
mmb
2002-09-19 18:45
2002.10.03
Почему не получается запустить процессы друг задругом с ожиданием


3-7807
ОлегТ
2002-09-11 21:42
2002.10.03
как програмно задать псевдоним и путь в BDE


1-7895
alxx
2002-09-20 18:28
2002.10.03
Checkbox ы в TListView


14-8125
Undert
2002-09-08 10:49
2002.10.03
-----===== Delphi 7 =====-----





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский