Как ПРАВИЛЬНО ловить курсор в табл. после передер. сервера?
Как ПРАВИЛЬНО ловить курсор в табл. после передер. сервера?
Помогите пожалуйста!
Удаляю или сохраняю запись в табличке, данные обновляются с сервера, курсор становится на 1-ю запись. Есть способы как это сделать. Вопрос в том, как ПРАВИЛЬНО это сделать, что лучше!
Удаляю или сохраняю запись в табличке, данные обновляются с сервера, курсор становится на 1-ю запись. Есть способы как это сделать. Вопрос в том, как ПРАВИЛЬНО это сделать, что лучше!
что сделать правильно, и куда?Вопрос в том, как ПРАВИЛЬНО это сделать, что лучше!
запись удаляется, DataSet переоткрывается, то есть запрос выполняется ЕЩЕ РАЗ. Соответственно, какая запись была "первая", фиг знает. Если запрос вытаскивает первичный ключ записи, то еще как-то можно сохранить "позицию курсора". Но вообще сначала надо бы выяснить чем эта "табличка" выбирается - IBQuery, IBDataSet или еще чем.
Можно попробовать попрактиковаться в телепатии
Если вопрос был "как остаться на месте", то в запросе обязательно должен быть какой-нибудь уникальный ID, перед удалением его запоминать, а после удаления, но до включения данных позиционироваться на него.
Если вопрос был "как остаться на месте", то в запросе обязательно должен быть какой-нибудь уникальный ID, перед удалением его запоминать, а после удаления, но до включения данных позиционироваться на него.
Код: Выделить всё
with Query1 do begin
DisableControls;
id:=FieldByName('id').AsInteger;
Delete;
// в этом месте делаем переоткрытие или refresh как нам надо.
Locate('id', id, []);
EnableControls;
end;
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Ты сам-то понял что написал? Сохраняем ид записи, потом ИМЕННО ЕЕ удаляем, потом пытаемся найти ее же локейтом... Ну думаю девушка поняла что ты хотел сказать, только неточность вышеописаную устранить надо.WildSery писал(а):Можно попробовать попрактиковаться в телепатии
Если вопрос был "как остаться на месте", то в запросе обязательно должен быть какой-нибудь уникальный ID, перед удалением его запоминать, а после удаления, но до включения данных позиционироваться на него.Код: Выделить всё
with Query1 do begin DisableControls; id:=FieldByName('id').AsInteger; Delete; // в этом месте делаем переоткрытие или refresh как нам надо. Locate('id', id, []); EnableControls; end;
Код по восстановлению текущей записи обычно делается так:
1. В BeforeClose набора данных вписывается код по сохранению ID текущей записи.
2. В AfterOpen набора данных вписывается код по переходу на запись с сохраненным ID.
В этом случае не надо заботиться о восстановлении позиции после вставки/удаления.
P.S. В FIBPlus есть метод FullRefresh. Он самостоятельно восстанавливает позицию текущей записи, если в запросе считывается поле первичного ключа.
1. В BeforeClose набора данных вписывается код по сохранению ID текущей записи.
2. В AfterOpen набора данных вписывается код по переходу на запись с сохраненным ID.
В этом случае не надо заботиться о восстановлении позиции после вставки/удаления.
P.S. В FIBPlus есть метод FullRefresh. Он самостоятельно восстанавливает позицию текущей записи, если в запросе считывается поле первичного ключа.
Вопрос у Марины такой размывчатый...
Когда Марина сообщит, какие компоненты использует, тут уже можно совет и про Refresh дать...
Собственно на это и отвечал...Марина писал(а):Удаляю или сохраняю запись в табличке, данные обновляются с сервера, курсор становится на 1-ю запись. Есть способы как это сделать.
Когда Марина сообщит, какие компоненты использует, тут уже можно совет и про Refresh дать...
Ага, точно. Это я ещё не проснулся.Ivan_Pisarevsky писал(а):только неточность вышеописаную устранить надо.
Теперь, выпив кофе, вижу, что девушке нужно полистать умную книгу сперва. Или хотя бы сказать, что за "табличка".
Кстати, FullRefresh вовсе не по первичному ключу работает, он вызывает ReopenLocate(''), которая в случае неуказания списка полей для locate составляет список из всех полей датасета (кроме блобов, массивов, вычисляемых, ...).
Всем привет!
Проблема такая. Я использую компоненты IBQuery, IBUpdateSQL, DataSource. Узменения в таблице произошли, транзакция подтвердилась, сервер передернули с клиента. У меня пользователь сидит в табличке или во вьюшке скажем где-то в середине - редактирует запись, т.е. впереди 100 записей, он редактирует 101-ю и сзади тоже 100 записей (всего в таблице 200 записей). Пока он ее редактировал, другой пользователь удалил его запись и еще 70 записей вперед. Т.е. теперь курсор надо поставить на 30-ю запись! Вопрос в том как ПРАВИЛЬНО это сделать! Помогите пожалуйста! )))
Проблема такая. Я использую компоненты IBQuery, IBUpdateSQL, DataSource. Узменения в таблице произошли, транзакция подтвердилась, сервер передернули с клиента. У меня пользователь сидит в табличке или во вьюшке скажем где-то в середине - редактирует запись, т.е. впереди 100 записей, он редактирует 101-ю и сзади тоже 100 записей (всего в таблице 200 записей). Пока он ее редактировал, другой пользователь удалил его запись и еще 70 записей вперед. Т.е. теперь курсор надо поставить на 30-ю запись! Вопрос в том как ПРАВИЛЬНО это сделать! Помогите пожалуйста! )))
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
коммерческий. 750 руб для частного использования, и 1740 для использования внутри фирмы. www.devrace.com.
Однако, лечить головную боль топором, а именно fullrefresh, не советую. Хотя, конечно, в смысле облегчения "позиционирования" FIBPlus лучше чем IBX. Но я рекомендую прислушаться к моему замечанию по поводу наборов записей, где существует только порядковый номер записи при получении с сервера. Одна и та же запись в разные моменты времени может быть и 5-ой, и 10-ой, и т.д.
Однако, лечить головную боль топором, а именно fullrefresh, не советую. Хотя, конечно, в смысле облегчения "позиционирования" FIBPlus лучше чем IBX. Но я рекомендую прислушаться к моему замечанию по поводу наборов записей, где существует только порядковый номер записи при получении с сервера. Одна и та же запись в разные моменты времени может быть и 5-ой, и 10-ой, и т.д.
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Привет!Марина писал(а):Всем привет!
Почему это проблема? Я тоже пользую их, в том числе.Марина писал(а):Проблема такая. Я использую компоненты IBQuery, IBUpdateSQL, DataSource.
хотрошо, но ЭТО зачем:Марина писал(а):Узменения в таблице произошли, транзакция подтвердилась,
Марина писал(а):сервер передернули с клиента.
Это как вообще понимать?
Дальше я вообще теряюсь...
Ладно, вполне житейская ситуация, согласен.Марина писал(а): У меня пользователь сидит в табличке или во вьюшке скажем где-то в середине - редактирует запись, т.е. впереди 100 записей, он редактирует 101-ю и сзади тоже 100 записей (всего в таблице 200 записей). Пока он ее редактировал, другой пользователь удалил его запись и еще 70 записей вперед.
ЗАЧЕМ??? юзеру 30-я запись???Марина писал(а):Т.е. теперь курсор надо поставить на 30-ю запись!
Предлагаю подумать и помыслить логически, а я вот не вижу решительно никакого смысла искать запись за номером 30.Марина писал(а):Вопрос в том как ПРАВИЛЬНО это сделать! Помогите пожалуйста! )))
А если так:
Тока в случае удаления не прокатит
Код: Выделить всё
var p:Pointer;
begin
p:=IBQuery1.GetBookmark;
IBQuery1.Open;
IBQuery1.GotoBookmark(p);
end;