![]() |
|
![]() ![]() ![]() |
|
Kbl4AH |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
Здравствуйте, уважаемые.
Я столкнулся со следующей проблемой... У меня на форме есть DBGrid, который заполняется данными из OracleDataSet, причем количество строк постоянно для любого запроса. Я обновляю запись в таблице через OracleQuery и, чтобы в DBGrid отобразились измененные данные, обновляю OracleDataSet
После этого автоматически выделяется 1-я строка в DBGrid, а мне нужно, чтобы выделение оставалось на редактируемой строке (чтобы было удобно работать, если DBGrid содержит большое количество строк). Пошарил немного в DRKB и наваял процедуру:
Получилось, но только не так как нужно:( Вроде выделяется нужная строка, но когда начинаю стрелками перемещаться по DBGrid, то выясняется, что движение все равно начинается с 1-й строки, а не с выделенной. Подскажите, пожалуйста, как сделать правильно. Заранее всем признателен! Это сообщение отредактировал(а) Kbl4AH - 26.6.2008, 21:16 |
||||
|
|||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
Можно через первичный ключ или уникальный набор полей.
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Запоминай текущую строку, а потом на неё возвращайся. Как вариант.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
2Deniz У меня в запросе сделано объединение запросов из 2-х таблиц. Как в данном случае использовать первичный ключ?
2Данкинг Так я вроде так и делаю:
|
|||
|
||||
Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
-------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
Vas, неплохо бы после переоткрытия проверить валидность закладки. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Deniz, если закладка не валидна ничего не произойдет, указатель останется на первой записи.
-------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
2Vas Использовал кусок кода, который ты привел выше. Все замечательно работает. Но только сейчас обнаружил маленький нюанс. Оказывается число записей возвращаемых ДатаСетом может измениться. И в случае, когда в Гриде была выделена последняя строка (после апдейта таблицы эта запись не возвращается запросом), после обновления ДатаСета выдается ошибка "Bookmark not found". Типа запрос выдавал 15 записей (а у меня была выделена именно 15-я строка и я сделал ее апдейт), а после апдейта он возвращает 14, и при обновлении ДатаСета Делфи ругается((( Подскажи, пожалуйста, как избавиться от этого? |
|||
|
||||
Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Странно, вообще, если закладка не найдена, он должен просто становиться на первую и все. Мессагу можно подавить блоком try ..except.
Та запись на которой стоит букмарк остается на месте, и становится просто 14 в порядке, я правильно понял? -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
Нет, 15-я запись в обновленной выборке вобще отсутствует, а 14 других остаются. А как трай/ексцепт пользоваться? Просто в начале блока поставить трай, а в конце ексцепт? И еще после ошибки прога начинает глючить - исчезает возможность перемещения по строкам Грида (всегда выделена одна строка). ((( Это сообщение отредактировал(а) Kbl4AH - 2.9.2008, 23:34 |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
Kbl4AH, но если хотите добить закладки - удачи. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
Vas vs Deniz Кто кого? О_о
))) 2Deniz Мне кажется, что первичный ключ или уникальный набор не подойдет, ведь после апдейта таблицы исходная запись уже не выбирается, то есть опять будет попытка выделения строки, которая отсутствует в Гриде. 2Vas Добавил условие на проверку валидности
Вроде нормально все стало работать))) P.S. Бывалые люди, подскажите, пожалуйста, где можно почитать нормальную доку на русском по компонентам палитр DataAccess и DataControls, а то с пендосовским плохо дружу? Может ссылочки какие знаете хорошие или так у кого на винте есть и можете выслать или выложить? Очень надо... Это сообщение отредактировал(а) Kbl4AH - 3.9.2008, 08:07 |
|||
|
||||
Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Итак провел тест все нормально работает без проверки валидности закладки и без всяких блоков try..except, указатель при отсутствии записи становится на первую запись в гриде, никаких мессаг не выдается, так что х.з. почему у вас так не получается. Я ставил указатель на последнюю запись в гриде, другой человек ее удалял, после рефреша грида указатель выскочил на первую и все, причем рефреш у меня в проге делается программно через каждую минуту.
-------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
Kbl4AH |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
Хм О_о А у меня не так. Когда удаляю последнюю строку грида (закладка становится не валидна, а значит не срабатывает условие
Это сообщение отредактировал(а) Kbl4AH - 3.9.2008, 12:50 |
||||
|
|||||
Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Ты сам удаляешь? Зачем закладки при удалении использовать, они больше нужны при обновлении грида, когда не знаешь что там другие наделали. А после удаления сам и позиционируй куда надо указатель, строки то удаленной точно нет ![]() -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |