|
Указатель в grid
|
|||
---|---|---|---|
#18+
Добрый день! На форме grid, в RowSource Remote View, Order By по 4 полям, в том числе по номеру помещения. Запоминаю строку по главному индексу помещения. При редактировании одного из этих полей делается update через sqlexec,затем requery, далее locate, чтобы встать на нужную строку и refresh. Например: помещения под номерами 5,6,7. Хочу поменять 5 на 8. После requery вижу, что указатель в таблице (brow) стоит на строке с номером помещения 8. При отображении в grid указатель - на строке с помещением №6. Получается, что указатель остался на прежнем месте, то есть сортировка прошла, а указатель остался там же, где был. Помогите, пожалуйста, разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 16:45 |
|
Указатель в grid
|
|||
---|---|---|---|
#18+
LataЗапоминаю строку по главному индексу помещения.Что такое "главный индекс помещения"? Каким кодом реализуется сие запоминание? При редактировании одного из этих полей делается update через sqlexec,затем requery, далее locate, чтобы встать на нужную строку и refresh. Например: помещения под номерами 5,6,7. Хочу поменять 5 на 8. После requery вижу, что указатель в таблице (brow) стоит на строке с номером помещения 8. При отображении в grid указатель - на строке с помещением №6. Получается, что указатель остался на прежнем месте, то есть сортировка прошла, а указатель остался там же, где был. Помогите, пожалуйста, разобраться.Сначала покажите код ваших действий. Ибо пока совершенно непонятно кто на ком стоял, что есть в данных, что запомнилось, что ищется, как ищется, находится ли и т,д. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 17:09 |
|
Указатель в grid
|
|||
---|---|---|---|
#18+
&&этот код в событии valid thisform.pageframe1.page8.grid1.column3.text1, в котором меняется номер помещения LOCAL num,recc SELECT vnupomn &&уникальный код помещения recc=vnupomn.sys_pom IF .NOT. EMPTY(this.value) LOCAL xvalue xvalue = ALLTRIM(this.value) IF ISDIGIT(RIGHT(xvalue, 1)) this.value = PADL(xvalue, ; 4) + ' ' ELSE this.value = PADL(xvalue, ; 5) ENDIF ENDIF &&обновленный номер помещения num=thisform.pageframe1.page8.grid1.column3.text1.value if nconn>0 nsql=sqlexec(nconn,"update vnupomn set npp=?this.value where vnupomn.sys_pom=?vnupomn.sys_pom and vnupomn.sys_ot=?to_otz.sys_ot") else messagebox(“Нет соединения!”) endif REQUERY("vnupomn") && номер помещения обновился SELECT vnupomn LOCATE FOR vnupomn.sys_pom=recc If found() BROW && указатель на измененной строке Else Messagebox(“Ошибка!”) endif THISFORM.PAGEFRAME1.PAGE8.GRID1.REFRESH() ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 17:45 |
|
Указатель в grid
|
|||
---|---|---|---|
#18+
Lata, запускайте отладчик и ищите место, в котором игнорируются все ваши показанные здесь действия и идет переход по номеру строки. Что-то еще срабатывает ПОСЛЕ все показанного здесь кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 18:27 |
|
Указатель в grid
|
|||
---|---|---|---|
#18+
Спасибо за совет. Уже ходила по шагам: доходит до refresh - нормально. Следующий шаг - кидает на команду do form ... (вызов данной формы), указатель уже съехал на прежнюю позицию. С полями, которые не входят в order by, все в порядке. Посоветуйте, в какую сторону еще посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 11:50 |
|
Указатель в grid
|
|||
---|---|---|---|
#18+
LataСпасибо за совет. Уже ходила по шагам: доходит до refresh - нормально. Следующий шаг - кидает на команду do form ... (вызов данной формы), указатель уже съехал на прежнюю позицию. С полями, которые не входят в order by, все в порядке. Посоветуйте, в какую сторону еще посмотреть.Отлаживать дальше программу и искать в ней место перегона указателя. Для этого в отладчике в окне Watch надо создать строку с recn('vnupomn') и слева от нее дважды кликнуть мышкой для устанвки точки останова с условием и прогнать весь код. Отладчик остановится в момент изменения номера строки. Дальше смотрите код и анализируете. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 12:42 |
|
Указатель в grid
|
|||
---|---|---|---|
#18+
Сделала все, как Вы посоветовали. Отладчик сигналил об изменении строки, пока шел по valid, и все было правильно. Следующий шаг после valid - do form - указатель уже не там, где нужно, о чем отладчик уже сигнала не дал. Выход нашла, но не совсем понятно, почему так: на AfterRowColChange кода нет и вообще, кроме valid, нигде нет кода, но указатель уже съехал. Я его поставила на место, при условии, что были изменения, и все прокатило (пока, может, где-нибудь вылезет). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 16:10 |
|
Указатель в grid
|
|||
---|---|---|---|
#18+
Я, конечно, извиняюсь, но зачем Вы вообще Requery() делаете? У Вас ведь содержимое таблицы, отображенное в Grid и так соответствует тому, что есть на сервере. Вам надо всего лишь передать это изменение на сервер. Обновлять "картинку" на клиенте после передачи изменений на сервер не надо. Более того, если Вы используете Remote View, то даже код писать по передаче изменений нет необходимости. Достаточно сделать соответствующие настройки в дизайнере Remote View и в зависимости от режима буферизации изменения будут автоматически передаваться на сервер либо при перемещении на новую запись, либо явно по команде TableUpdate() Вообще-то, объект Grid - это "вещь в себе". Крайне не любит отдавать управление кому-либо. Поэтому любые изменения в Grid надо делать сначала уведя фокус с этого объекта. Также очень не рекомендуется без крайней необходимости что-либо писать в методах Valid. Если есть возможность, лучше писать код в других методах. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 19:03 |
|
|
start [/forum/topic.php?fid=41&msg=39300199&tid=1582066]: |
0ms |
get settings: |
13ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 266ms |
total: | 406ms |
0 / 0 |