Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Навигация по DBGrid

Автор: Atreides 9.03.2011 14:32

Добрый день! Может кто сталкивался с подобной проблемой. Использую DBGrid, ClientDataSet, DataSource для вывода данных из Оркалинной БД. Пользователь может добавлять, редактировать или удалять записи. Все действия выполняются отлично, но после выполнения обновления и чтоб наверняка обновляю запросом повторным, DBGrid улетает в начало списка. Как при добавлении записи перевести на новую запись, при редактировании оставить на отредактированной записи, при удалении оставить на месте предыдущей?
Еще вопрос, немного не в тему. Использую в качестве справочника DBLookupComboBox. Как перейти, при уже заполненном данными DBLookupComboBox к строке в которой такое же значение как и в поле редактируемой записи?

Автор: volvo 9.03.2011 16:47

Цитата
Как при добавлении записи перевести на новую запись, при редактировании оставить на отредактированной записи, при удалении оставить на месте предыдущей?
TBookmark использовать во всех трех случаях. Перед тем, как произвести действие с базой, запоминай в букмарке ту позицию, куда потом надо вернуться, после произведения действия - обновляй грид и возвращайся в запомненную позицию.

Автор: Atreides 9.03.2011 17:21

Цитата(volvo @ 9.03.2011 12:47) *

TBookmark использовать во всех трех случаях. Перед тем, как произвести действие с базой, запоминай в букмарке ту позицию, куда потом надо вернуться, после произведения действия - обновляй грид и возвращайся в запомненную позицию.

А можно пример, пожалуйста, а то никогда не работал с такой компонентой. С добавлением нашел просто выход - ClientDataSet.Last

Автор: volvo 11.03.2011 14:54

Цитата
А можно пример, пожалуйста, а то никогда не работал с такой компонентой.
В хелпе должен быть пример использования. Вот из онлайн-документации: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devwin32/5datasetmarkingandreturningtorecords_xml.html

Цитата
С добавлением нашел просто выход - ClientDataSet.Last
А если данные будут добавлены не в самый конец набора? Тогда что? Добавил в середину, и перешел к последнему элементу? Все ж зависит от того, как у тебя происходит сортировка при выводе...

Автор: Atreides 11.03.2011 16:57

Цитата(volvo @ 11.03.2011 10:54) *

В хелпе должен быть пример использования. Вот из онлайн-документации: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devwin32/5datasetmarkingandreturningtorecords_xml.html

Спасибо, пригодиться!

Цитата(volvo @ 11.03.2011 10:54) *

А если данные будут добавлены не в самый конец набора? Тогда что? Добавил в середину, и перешел к последнему элементу? Все ж зависит от того, как у тебя происходит сортировка при выводе...


А у меня в таблице добавленные записи всегда с новым идентификатором пишутся (+1). Подобрал вот такой способ для прыжка на место записи -
Код
  
  st := 'select * from .... order by идентификатор записи';
    Form1.ClientDataSet1.close;
    Form1.ClientDataSet1.DataRequest(st);
    Form1.ClientDataSet1.open;
FOrm1.ClientDataSet1.Locate('Искомое поле', VarArrayOf([TRIM(Form1.Edit2.text)]), [loPartialKey]);