|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
Всем привет! Народ, кто как выходит из следующей ситуатии. Есть форма для редактирования и она же для ввода новых данных из буферизованного курсора. На форме есть кнопка "Сохранить". Под "Сохранить" стоит проверка по GetFldState с вопросом - Да или Нет. Если Нет, возвращаемся в форму и по TABLEREVERT отменяем введенные данные. Статус редактирования или ввода определяет глобальная переменная edit_new. В ините формы есть SELECT <Поле1>,<Поле2>...<ПолеN> FROM table INTO CURSOR tmpcursor READWRITE Данные из <Поле1>,<Поле2>...<ПолеN> служат ControlSource в TextBox формы. Далее вариантов может быть 2: 1) Либо так: IF edit_new=.T. APPEND BLANK ENDIF =CURSORSETPROP("Buffering", 5, "tmpcursor") 2) Либо так: =CURSORSETPROP("Buffering", 5, "tmpcursor") IF edit_new=.T. APPEND BLANK ENDIF Второй вариант предпочтительней, т.к. GetFldState четко отслеживает, что в буфер введена новая запись, НО при отказе от сохранения =TABLEREVERT(.F.,"tmpcursor") откатывает APPEND BLANK. Соответственно теряется источник ControlSource в TextBox формы. И уже ничего не введешь. По первому варианту откат замечательно работает, но при сохранении GetFldState естественно видит новую запись как редактируемую, а не новую. Когда форма простая, можно по дополнительной проверке на edit_new=.T. или edit_new=.F. завязываться, но это как-то криво. Какие будут предложения? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2011, 11:51 |
|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
Источник для TextBox.ControlSource - не теряется. Просто после отката буфера Append Blank указатель записи в таблице переходит на фиктивную запись, которую невозможно редактировать. Надо после отката изменений переместить указатель записи в курсоре на любую существующую запись (Go, Locate, Seek и т.п.) Код: plaintext 1. 2. 3. 4. 5.
Хотя, сама схема ввода/изменения записей без механизма навигации по записям выглядит довольно не удобно. Как минимум, Вы должны предоставить пользователю либо список всех записей выборки tmpcursor (Grid, ListBox), либо кнопки Вперед/Назад/Найти, чтобы пользователь имел возможность переместиться на нужную запись. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2011, 13:13 |
|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
Навигация имеет место быть. :) Все это хозяйство у меня в меню висит. Из менюшки вызывается форма с гридом, целиком эту форму заполняющая. Допустим, список банков. Пользователь может отсортировать, отфильтровать записи как ему угодно. Таких форм с гридами множество, все немодальные. А вот по двойному клику на гриде вызывается формочка для редактирования (тоже, кстати, немодальная) (либо она же по нажатию кнопки в меню "Новая"). Собственно про вот эту формочку и был вопрос. Сейчас попробую Ваш рецепт. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2011, 19:18 |
|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
Не прокатывает. Что, в принципе, логично. В курсоре до APPEND BLANK нет же ни одной строки. Поэтому и TABLEREVERT идет в никуда. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2011, 19:52 |
|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
если Вы прочтете веточку: http://www.sql.ru/forum/actualthread.aspx?tid=618865&pg=1&hl=%ea%eb%e0%f1%f1%fb и скачаете из послед.сообщения пример, то там Вы найдете некий код. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2011, 09:13 |
|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
Курсорадаптер это замечательно :) Но перелопачивать уже написанное нет времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2011, 10:42 |
|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
птичка, послушай, что я тебе скажу: лучше день потерять, затем за 5 минут долететь (С) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2011, 10:54 |
|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
miv32Не прокатывает. Что, в принципе, логично. В курсоре до APPEND BLANK нет же ни одной строки. Поэтому и TABLEREVERT идет в никуда. Если у Вас в курсоре нет ни одной строки и Вы удаляете только что созданную строку (tableRevert()), то что, собственно, Вы собираетесь редактировать? После отката Вам надо заново создать запись. Заново дать команду Append Blank. Только вот, "что-то в консерватории надо подправить". У Вас явная проблема с последовательностью и логичностью действий. 1. Открыли форму в которой нет ни одной записи 2. Создали одну новую запись 3. Решили не сохранять и сделали откат (удалили только что созданную запись) 4. ... И вот ЧТО Вы хотите здесь сделать? Что редактировать, если нет ни одной записи? Наиболее логичное решение на 4 шаге - это просто закрыть такую форму. Что Вы пытаетесь редактировать в TextBox, если нечего редактировать? Стандартная логика работы с данными совсем другая. По кнопке выполняется сохранение . Отказ от сохранения связан с закрытием формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2011, 14:59 |
|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
У меня 2 кнопки на форме - кнопка Сохранить и Выход. В случае нажатия на любую задается вопрос на сохранение. При "Выход" форма закрывается при любом раскладе. При "Сохранить" я хотел иметь возможность отката без закрытия формы. Мало ли, что юзер ввел и передумал. А так его спрашивают. При варианте, когда APPEND идет раньше CURSORSETPROP так и происходит. Добавлять APPEND после TABLEREVERT не есть хорошо. Придется при "Сохранить" не спрашивать, а откат сделать по какой-либо кнопке в меню, недоступной в режиме добавления новой записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2011, 16:56 |
|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
miv32У меня 2 кнопки на форме - кнопка Сохранить и Выход. В случае нажатия на любую задается вопрос на сохранение. При "Выход" форма закрывается при любом раскладе. При "Сохранить" я хотел иметь возможность отката без закрытия формы. Мало ли, что юзер ввел и передумал. А так его спрашивают. При варианте, когда APPEND идет раньше CURSORSETPROP так и происходит. Добавлять APPEND после TABLEREVERT не есть хорошо. Придется при "Сохранить" не спрашивать, а откат сделать по какой-либо кнопке в меню, недоступной в режиме добавления новой записи. Вот если бы использовал INSERT, проблем было бы меньше. Выход - ничего, Сохранить - Insert ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2011, 17:29 |
|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
miv32У меня 2 кнопки на форме - кнопка Сохранить и Выход. В случае нажатия на любую задается вопрос на сохранение. Зачем при нажатии на кнопку "Сохранить" спрашивать подтверждение? Вот Вы бы сами как отреагировали на подобный вопрос приложения? Думаю, самая мягкая форма была бы вроде "Он что, тупой?" miv32При "Сохранить" я хотел иметь возможность отката без закрытия формы. Мало ли, что юзер ввел и передумал. Смысл? Если пользователь "ввел и передумал", то он просто закроет форму через кнопку "Выход" без сохранения и затем откроет ее заново. miv32Придется при "Сохранить" не спрашивать Вы можете привести пример какой-нибудь программы, которая при нажатии на кнопку "Сохранить" спрашивала бы то, что Вы пытаетесь спросить у пользователя? Да и вообще запрашивала подтверждение желания сохранить? Есть простое правило: кнопка должна делать то, что на ней написано. Если написано "Сохранить", то любой пользователь предполагает, то данная кнопка и предназначена для сохранения. А если написано "Сохранить", а она вместо этого вдруг начинает отменять введенные данные, то ничего кроме, мягко говоря, недоумения подобное действие не вызывает. Не надо пытаться из СУБД сделать текстовый редактор. Ничем хорошим это не кончится. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2011, 19:01 |
|
APPEND BLANK и CURSORSETPROP
|
|||
---|---|---|---|
#18+
Логично. :) СУБД не Word. К сожалению у моих пользователей мышление именно вордовое. Поколение копипастеров. :) Под "Сохранить" повешу TABLEUPDATE, но форму убирать не буду. Полей ввода много, сам документ + спецификация. Захотел юзер покурить - нажал кнопочку, выскочило окошко - Сохранено (или не сохранено, если какие-либо траблы) Вернулся - продолжил ввод. Спасибо всем! Да, вот еще один момент. Наткнулся на вопросы по поводу селектов из буферизованных таблиц. Пишут, что невозможно сделать, если не ошибаюсь. Возможно, не открыл Америку, но кому интересно: =CURSORSETPROP("Buffering", 5, "tmptable") select * from tmptable with (buffering = .T.) прекрасно работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2011, 22:20 |
|
|
start [/forum/topic.php?fid=41&msg=37284138&tid=1584341]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
25ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
others: | 261ms |
total: | 370ms |
0 / 0 |