Форум: "Базы";
Текущий архив: 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