|
|
|
Вьюха
|
|||
|---|---|---|---|
|
#18+
Создал вьху, орисание такое. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Но как только я хочу сделать тоже самое в форме редактирования записи вьхи, вот так в форме по кнопочке сохранения данных: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. СURSOR CANNOT CANNOT BE MODIFIED BECAUSE IT CONTAINS AN UNSAVED RECORD, где я накосячил ? = CURSORSETPROP('Buffering',5, "VDEPTS") включен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 18:07:21 |
|
||
|
Вьюха
|
|||
|---|---|---|---|
|
#18+
Что-то я рано запаниковал :) Спасибо, все правильно. Работает... если конечно правильно обновлять грид. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 22:01:29 |
|
||
|
Вьюха
|
|||
|---|---|---|---|
|
#18+
А как правильно удалять записи во вьюхе , в 5 режиме буферизации ? И кстати, после добавления, как стать на нужную запись ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 14:32:51 |
|
||
|
Вьюха
|
|||
|---|---|---|---|
|
#18+
ТупойА как правильно удалять записи во вьюхе , в 5 режиме буферизации ? Удаление - это тоже модификация. Просто модифицируется некое служебное (скрытое) "поле". Поэтому логика абсолютно такая же как и при модификации данных - TableUpdate() для сброса изменений в основную таблицу. Если используется групповая команда (сброс изменений ВСЕХ записей), то настройка SET DELETED роли не играет. Если же сброс идет в цикле по одной записи за раз, то чтобы попасть на записи, помеченные как удаленные, естесственно, надо будет снять настройку SET DELETED ТупойИ кстати, после добавления, как стать на нужную запись ? Если значение ключевому полю присваивается через функцию, указанную в свойстве Default-поля, то надо просто перенести эту функцию в Default-поля самого View. Тогда добавляя запись во View сразу назначается новый код записи и по нему можно будет позиционироваться после обновления. Если ключевое поле имеет тип Integer-Autoincrement, то здесь придется "выкручиваться". Простейший вариант: новая запись - всегда добавляется физически в конец таблицы. После добавления считываешь значение кода последней записи таблицы-источника. Есть риск спутать "свою" запись и запись добавленную другим пользователем "одновременно" Можно использовать двойную буферизаци. Наложить буферизацию на таблицу-источник. Тогда после сброса буфера из View имеем значение в буфере таблицы-источника. Потом сбрасываем буфер собственно таблицы-источника. Смысл в том, чтобы не спутать "свою" запись и запись, которая могла быть добавлена другим пользователем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 15:01:08 |
|
||
|
Вьюха
|
|||
|---|---|---|---|
|
#18+
Вот удаляю я из вьюхи так : Код: plaintext 1. 2. 3. 4. 5. Во 1. Происходит удаление ( вернее оно происходит) но в View не отображаеться с 1 раза. Удалил я допустим 5 записей, выдал потом Код: plaintext 1. 2. 3. 4. 5. Происходит удаление, ну мягко говоря не тех записей. Вот в чем проблема. Может мне удалять через SQL, типа Delete From .... Where .... ? И кстати, вновь добавленные записи в буфере с "-", ведь, как мне прыгнуть потом на нужную ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 15:41:42 |
|
||
|
Вьюха
|
|||
|---|---|---|---|
|
#18+
1) У тебя View находится в 5 режиме буферизации. Это значит, что что бы ты ни вытворял со View, но пока не будет дана команда TableUpdate() никакие изменения View не будут "сброшены" в исходные таблицы. 2) Если вопрос стоит в отображении удаленных записей. Т.е. запись удалена, но она все еще отображается. То следует помнить, что настройка SET DELETED - это своеобразный фильтр. А фильтр вступает в силу, только после "передергивания" указателя записи. Следовательно, надо действовать примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 3) Удалять "не те" записи View не может. Когда ты создавал View, то указал какое поле (или набор полей) является ключевым (KeyField = .T.). В процессе сброса буфера и будут помечены как удаленные те записи значение ключевых полей которых совпадает со значениями ключевых полей записей, удаленных во View. Если удаляются "не те" - это значит, что выбраны "не те" поля в качестве ключевых. Кстати, в этом случае и модифицироваться должны "не те" записи. 4) Как ты вообще позиционируешся на запись в таблице? По ее идентификатору. Т.е. значению ключевого поля. Вот про это я тебе и говорил. Все ранее описанное относилось к тому, чтобы определить какое же значение получит ключевое поле таблицы в новой записи. После Requery() позиционируешся на запись с этим значением. Ориентироваться на физический номер записи (Recno()) - бессмысленно. После перезапроса нет никакой гарантии, что даже "старые" записи остануться со старыми физическими номерами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 19:03:22 |
|
||
|
Вьюха
|
|||
|---|---|---|---|
|
#18+
Да, ВладимирМ, именно к так как Вы говорите. У меня были проблемы именно с отображением удаленных записей во вьюхе , SET DELETED ON выставлен, все заработало как только передернул записи. Сенкс! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 22:44:23 |
|
||
|
Вьюха
|
|||
|---|---|---|---|
|
#18+
> автор Как ты вообще позиционируешся на запись в таблице? По ее идентификатору. Т.е. значению ключевого поля. Вот про это я тебе и говорил. Все ранее описанное относилось к тому, чтобы определить какое же значение получит ключевое поле таблицы в новой записи. После Requery() позиционируешся на запись с этим значением. Ориентироваться на физический номер записи (Recno()) - бессмысленно. После перезапроса нет никакой гарантии, что даже "старые" записи остануться со старыми физическими номерами. Особенно понравилось про бессмысленность Recno() после Requery(). Ну правильно, тоесть при добавлении 1 записи во вьюху она стала recno() =-1, вторая Recno()=-2. Соответсвенно для 1 записи я знаю ID, допустим 1, для второй ,допустим 2. Как же мне после Requery() по ID стать на эту запись ? SEEK"M ?, LOCATE ? Только как-то я не встречал информации о том что для View можно строить индекс. Просвятите, плиз, еще на счет этого вопроса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 22:53:44 |
|
||
|
Вьюха
|
|||
|---|---|---|---|
|
#18+
Hi Владимир! > Если же сброс идет в цикле по одной записи за раз, то чтобы попасть на записи, помеченные как удаленные, естесственно, надо будет снять настройку SET DELETED Не обязательно - зависит от того КАК идёт переход если с циклом по GetNextModified() + GO - то без разницы (т.к. GO становится и на "отфильтрованную" запись) 2 Тупой 1) Забудь про RECNO() 2) ЧТО у тебя вводится в эти записи перед "сбросом" из в собственно таблицу? Если есть поле уникально идентифицирующее запись - то можно после перезапроса сделать LOCATE по нему. Если нету - то либо ты делаешь как сказал Владимир (т.е. получаешь ID записи ещё при вставке в буфер, т.е. ДО сохранения - и тогда после перезапроса LOCATE по этому ID) - либо банально "забиваешь" на эту проблему - т.е. после перезапроса становишься НЕ на ту запись где был в момент начала сохранения. Кстати строго формально новой записи в курсоре может и не оказаться - например она не подойдёт по параметрам запроса (а ввести "неподходящую" фокс не помешает - только твой код проверки может помешать :) ) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2005, 02:22:47 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33291208&tid=1593399]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
269ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 534ms |

| 0 / 0 |
