|
|
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Добрый день! Работаю с Remote View. Необходимо при добалении, редактировании данных (из другой формы) становиться в гриде на текущую запись ( добавленную, редактируемую). При удалении на предыдущую. Для редактирования и добавления после TABLEUPDATE я запоминаю номер записи, потом после REQUERY опять перехожу на нее. Как быть в случае удаления ? Если удалаю последнюю запись, то система выдает ошибку, что я переше за границы диапазона допустимых номеров записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 15:46 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Как переходишь? По номеру записи? RECCOUNT() - кол-во записей. Код: plaintext 1. 2. 3. 4. 5. Только если кто-то другой добавит запись в середину - то у тебя все съедет. Поэтому лучше это делать по ключу с indexseek(), правда индекс создать прийдется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 16:02 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
>Как быть в случае удаления ? Если удалаю последнюю запись, то система >выдает ошибку, что я переше за границы диапазона допустимых номеров >записей. Переходишь как goto recno NNN ? Тогда проверять максимально допустимый номер (reccount() ) Ну судя по тому, что проблема возникает при удалении (опять таки последнюю в плане с бОльшим номером записи или после удаления в таблице не остается записей?) последней (в смысле больше нет записей), то ты переходишь по skip`у. Тогда вопрос: а на кой тебе, спрашивается, дали функции BOF(), EOF() и иже с ними? А если я не угадал, то еще один вопрос: Где маленький примерчик кода, на котором вылетает ошибка? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 16:35 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Ну вот, было Код: plaintext 1. 2. 3. 4. 5. 6. Специально для удаления сделал так : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Galyamov Rinat, все конечно правильно про BOF и EOF, казалось бы ) Только поле REQUERY указатель становиться на 1-ю запись, если она есть, и ему насрать на то что в буфере ты стер последнюю ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 20:24 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
"Foxii" <nospam@sql.ru> сообщил/сообщила в новостях следующее: news:5286698@sql.ru... > Автор: Foxii > Ну вот, было > > > local lnrec > lnRec = RECNO() > = REQUERY(this.alias) > IF !eof(this.alias ) AND !bof(this.alias) > GOTO lnRec > endif > > Специально для удаления сделал так : > > > LOCAL lnRec > IF MESSAGEBOX("Вы действительно хотите удалить строку ?",4+32,"Внимание") > =7 > RETURN > ENDIF > > lnRec = RECNO()-1 > DELETE IN (this.alias) > this.update() > = REQUERY(this.alias) > IF !EOF(this.alias) AND !BOF(this.alias) AND lnRec >0 > GO lnRec > ENDIFВроде бы все работает, но хотелось бы, не разносить в разные методы. > сделать одним. > > Galyamov Rinat, все конечно правильно про BOF и EOF, казалось бы ) > Только поле REQUERY указатель становиться на 1-ю запись, если она есть, и > ему насрать на то что в буфере ты стер последнюю ) Ну я говорил : Судя по ... ты переходишь по skip`у. Тогда вопрос: а на кой тебе, спрашивается, дали функции BOF(), EOF() и иже с ними? А в твоем варианте надо проверять: do case case lnRec <=0 go top in (this.alias) case lnRec >=Reccount(this.alias) go top in (this.alias) otherwise GO lnRec in (this.alias) endcase Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 20:46 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Сорри, поправочка. do case case lnRec <=0 go top in (this.alias) case lnRec >=Reccount(this.alias) go BOTTOM in (this.alias) && Здесь поправил - так логичнее otherwise GO lnRec in (this.alias) endcase Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 20:49 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Galyamov Rinat, ну блин, как ты не поймешь, что то, что было до сброса буфера это совсем не то, что стало после. И текущая запись , та которая после обновления вьюхи, это никакого отношения к тому состояния таблицы в котором она находилась до сброса и обновления вьюхи не имеет и наоборот. И ктати, вьюха может быть упорядочена допустим по иникальному значению первичного ключа или еще как-нибудь, так что тут не угадаешь, кто тут первый и был. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 23:24 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
> Galyamov Rinat, ну блин, как ты не поймешь, что то, что было до > сброса буфера это совсем не то, что стало после. Про то что это не одно и то же, тебе уже говорили. Лишний раз повторять тебе одно и то же смысла не вижу. > И текущая запись , та которая после обновления вьюхи, это никакого > отношения к тому состояния таблицы в котором она находилась >до сброса и > обновления вьюхи не имеет и наоборот. Полностью согласен. Но ты упорно твердишь >go to lnRec и >Если удалаю последнюю запись, то система выдает ошибку, что я переше за >ГРАНИЦЫ диапазона допустимых номеров записей. > И ктати, вьюха может быть упорядочена допустим по иникальному значению > первичного ключа или еще как-нибудь, так что тут не >угадаешь, кто тут > первый и был. no comments Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 05:16 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Foxii Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Надо проверять RECCOUNT() после REQUERY() проверка !EOF(this.alias) AND !BOF(this.alias) в твоем коде равнозначна RECCOUNT(this.alias) = 0, т.к. если есть записи, то после REQUERY() встанешь на первую и EOF() и BOF() будут .F. Cмоделируем ситуацию работы двух пользователей. В хронологической последовательности: 1-й открыл VIEW (например 48 записей) 2-й открыл VIEW (48 записей) 1-й удалил любую кроме последней (осталось 47) 2-й удалил последнюю (для него 48-ю), пытается перейти на 47-ю а их 46 уже :) FoxiiВроде бы все работает, но хотелось бы, не разносить в разные методы. сделать одним. А под этой фразой что подразумевалось? То что при добавлении, удалении и изменении этот код повторить пришлось? PS Опираться номер записи во VIEW далеко не самое лучшее решение. При интенсивной многопользовательской работе указатель будет ездить совсем не так как ты задумывал. Подумай об использовании Id записи и создания индекса по Id для VIEW (после REQUERY() индекс перестраивается) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 08:46 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Если система многопользовательская, то после REQUERY может оказаться, что другой пользователь тоже удалил некоторые записи, которые попадали в выборку. В этом случае RECNO() - 1 может стать больше RECCOUNT(). Если система однопользовательская, то может оказаться, что изменилось условие where для выборки. В этом случае RECNO() - 1 тоже может стать больше RECCOUNT(). Если мы во View удалили запись, которую сами ранее добавляли, но еще не сохранили, ее RECNO() была отрицательной, а RECNO() - 1 будет "еще более отрицательной". Если мы удалили первую запись, то RECNO() - 1 будет 0. Я бы, может быть, попробовал вместо RECNO() использовать поиск по выражению сортировки при SET NEAR ON, например, если ничего более подходящего для конкретной ситуации нет. ________ Не дадим распространиться заразе политкорректности! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 09:23 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
FoxiiДобрый день! Работаю с Remote View. Необходимо при добалении, редактировании данных (из другой формы) становиться в гриде на текущую запись ( добавленную, редактируемую). При удалении на предыдущую. Для редактирования и добавления после TABLEUPDATE я запоминаю номер записи, потом после REQUERY опять перехожу на нее. Как быть в случае удаления ? Если удалаю последнюю запись, то система выдает ошибку, что я переше за границы диапазона допустимых номеров записей. Можно уточнить, а зачем вообще давать команду Requery()? При добавлении или изменении записи данные и так уже у клиента. А вот при удалении достаточно сделать настройку Код: plaintext И код удаления будет выглядеть примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Если же Requery() необходима, то Вы и сами понимаете, что пытаться как-то позиционироваться по физическому номеру записи просто бессмысленно. Затея, заранее обреченная на провал. После Requery() все номера записей "поплывут". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 23:25 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
В ту же тему. Для создания параметров отбора я делал параметризованную вьюху, но не как обычно, а через макроподстановку в условие, допустим так : Код: plaintext 1. Но! что-то с удаленным представлением так не получается. Что делать ? Варианты есть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2008, 23:45 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Вам очень скоро ответся, что вместо макроподставновки лучше использовать ? . Но у меня давно возникал вопрос с remote view и я решил задать его в этой теме. При работе с DBF очень хорошо, что Фокс перезапрашивает данные через определенный промежуток времени и сечет обновления (хотя экран при этом чуть передергивет увы). Но что делать с remote view? Я так понимаю, что resfresh() может лучше, чем requery() обновить данные. Но при refresh() будут перезапрашиваться только даттые включенные в первоначальный запрос и не включатся добавленные другими пользователями стороки? Кто-нибудь нашел хорошее решение? Кстати 1С 7.7 и в DBF и в SQL - версиях хорошо разруливает эту проблему. И экран не мигает, и курсор не скачет и все сечется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2008, 01:23 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
FoxiiВ ту же тему. Для создания параметров отбора я делал параметризованную вьюху, но не как обычно, а через макроподстановку в условие, допустим так : Код: plaintext 1. Но! что-то с удаленным представлением так не получается. Что делать ? Варианты есть ? 1. Папаметризованная вьюха т.е. переменные с "?" 2. SQLEXEC() - генери запрос как угодно. apapacy... Кто-нибудь нашел хорошее решение? Кстати 1С 7.7 и в DBF и в SQL - версиях хорошо разруливает эту проблему. И экран не мигает, и курсор не скачет и все сечется. Свойство формы LockScreen должно помочь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2008, 15:37 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Dima T Свойство формы LockScreen должно помочь Вопрос мой скорее относился к способу обновить данные в remote view, чем к миганию экрана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2008, 16:56 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
apapacy Dima T Свойство формы LockScreen должно помочь Вопрос мой скорее относился к способу обновить данные в remote view, чем к миганию экрана. Тогда вопрос не совсем понятен. Requery() - обновление данных в представлении с SQL-сервера Refresh() - обновление содержимого контролов отображающих данные. Что именно не устраивает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2008, 17:01 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Dima T Тогда вопрос не совсем понятен. Requery() - обновление данных в представлении с SQL-сервера Refresh() - обновление содержимого контролов отображающих данные. Что именно не устраивает? Это не совсем так. Refresh-метод контролов обновляет контролы. Но есть и Refresh-функция. Refreshes data in an updatable SQL view. REFRESH([nRecords [, nRecordOffset]] [, cTableAlias | nWorkArea]) Return Values Numeric Parameters nRecords Specifies the number of records to refresh. If nRecords is 1 or you omit nRecords, only the current record is refreshed. If nRecords is 0, no records are refreshed. Не устраивает то, что requery() перезапрашивает курсор и становится на 1+ю запись - что и составляет суть вопроса автора топика. Requery - действует более мягко, но перезапрашивает только строки, которые попали в самый первоначальный запрос (без учета строк добавленных другими юзерами) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2008, 17:31 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Dima T, на сколько я понял Вы программили под парус. Вот у них сделано так, чтобы динамически формировать параметры отбора. Маятся с ? когда в форме отбора 20-30 значений, будет гораздо проблематичнее. Я стремлюсь к тому, чтобы сделать локальное представление на уделаенное, с обновлением данных проблем нет, но! при создании вьюхи так как я описал представление работает только если w_VDSPOSZAK = ".T." или w_VDSPOSZAK = ".F, а допустим при w_VDSPOSZAK =[PARENT_RN ='0001'] не работает. А казалось бы должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2008, 20:08 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
apapacyНо есть и Refresh-функция. Если честно - не знал, но думаю не много потерял. Очень специфичная функция. apapacyНе устраивает то, что requery() перезапрашивает курсор и становится на 1+ю запись - что и составляет суть вопроса автора топика. Для себя раз решил проблему оберткой над requery() с позиционированием по Id Form.RequeryRV() Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2008, 20:18 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
Dima T, а можно подробнее об этом авторТолько если кто-то другой добавит запись в середину - то у тебя все съедет. Поэтому лучше это делать по ключу с indexseek(), правда индекс создать прийдется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 10:02 |
|
||
|
Встать на нужную запись
|
|||
|---|---|---|---|
|
#18+
FoxiiDima T, на сколько я понял Вы программили под парус. ... Никогда с парусом не работал (только сейчас заметил этот пост) FoxiiDima T, а можно подробнее об этом авторТолько если кто-то другой добавит запись в середину - то у тебя все съедет. Проблема из той же серии что и эта: Dima T Cмоделируем ситуацию работы двух пользователей. В хронологической последовательности: 1-й открыл VIEW (например 48 записей) 2-й открыл VIEW (48 записей) 1-й удалил любую кроме последней (осталось 47) 2-й удалил последнюю (для него 48-ю), пытается перейти на 47-ю а их 46 уже :) немножко переиначим на добавление и получится: 1-й открыл VIEW (например 48 записей) 2-й открыл VIEW (48 записей) 1-й добавил любую кроме последней (стало 49) 2-й обновил стоя на последней (для него 48-й), а запись на которой он стоял оказалась 49-й Или про это поподробней?: авторПоэтому лучше это делать по ключу с indexseek(), правда индекс создать прийдется. так тут после открытия VIEW делаешь индекс по Id INDEX ON ... и дальше им пользуешься, при REQUERY() индекс тоже обновится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 12:01 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35137655&tid=1588046]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
79ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 440ms |

| 0 / 0 |
