Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / APPEND BLANK и CURSORSETPROP / 12 сообщений из 12, страница 1 из 1
29.05.2011, 11:51
    #37284138
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
Всем привет!
Народ, кто как выходит из следующей ситуатии.
Есть форма для редактирования и она же для ввода новых данных из буферизованного курсора.
На форме есть кнопка "Сохранить". Под "Сохранить" стоит проверка по 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. завязываться, но это как-то криво.

Какие будут предложения? :)
...
Рейтинг: 0 / 0
29.05.2011, 13:13
    #37284203
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
Источник для TextBox.ControlSource - не теряется. Просто после отката буфера Append Blank указатель записи в таблице переходит на фиктивную запись, которую невозможно редактировать. Надо после отката изменений переместить указатель записи в курсоре на любую существующую запись (Go, Locate, Seek и т.п.)

Код: plaintext
1.
2.
3.
4.
5.
select tmpcursor
=TableRevert(.F.)
if eof()
    skip - 1 
endif

Хотя, сама схема ввода/изменения записей без механизма навигации по записям выглядит довольно не удобно. Как минимум, Вы должны предоставить пользователю либо список всех записей выборки tmpcursor (Grid, ListBox), либо кнопки Вперед/Назад/Найти, чтобы пользователь имел возможность переместиться на нужную запись.
...
Рейтинг: 0 / 0
29.05.2011, 19:18
    #37284412
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
Навигация имеет место быть. :)
Все это хозяйство у меня в меню висит. Из менюшки вызывается форма с гридом, целиком эту форму заполняющая. Допустим, список банков. Пользователь может отсортировать, отфильтровать записи как ему угодно.
Таких форм с гридами множество, все немодальные.
А вот по двойному клику на гриде вызывается формочка для редактирования (тоже, кстати, немодальная) (либо она же по нажатию кнопки в меню "Новая"). Собственно про вот эту формочку и был вопрос.

Сейчас попробую Ваш рецепт.
...
Рейтинг: 0 / 0
29.05.2011, 19:52
    #37284428
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
Не прокатывает. Что, в принципе, логично. В курсоре до APPEND BLANK
нет же ни одной строки. Поэтому и TABLEREVERT идет в никуда.
...
Рейтинг: 0 / 0
30.05.2011, 09:13
    #37284786
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
если Вы прочтете веточку:
http://www.sql.ru/forum/actualthread.aspx?tid=618865&pg=1&hl=%ea%eb%e0%f1%f1%fb

и скачаете из послед.сообщения пример,
то там Вы найдете некий код.
...
Рейтинг: 0 / 0
30.05.2011, 10:42
    #37284924
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
Курсорадаптер это замечательно :)
Но перелопачивать уже написанное нет времени.
...
Рейтинг: 0 / 0
30.05.2011, 10:54
    #37284945
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
птичка, послушай, что я тебе скажу: лучше день потерять, затем за 5 минут долететь (С)
...
Рейтинг: 0 / 0
30.05.2011, 14:59
    #37285517
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
miv32Не прокатывает. Что, в принципе, логично. В курсоре до APPEND BLANK
нет же ни одной строки. Поэтому и TABLEREVERT идет в никуда.
Если у Вас в курсоре нет ни одной строки и Вы удаляете только что созданную строку (tableRevert()), то что, собственно, Вы собираетесь редактировать? После отката Вам надо заново создать запись. Заново дать команду Append Blank.

Только вот, "что-то в консерватории надо подправить". У Вас явная проблема с последовательностью и логичностью действий.

1. Открыли форму в которой нет ни одной записи
2. Создали одну новую запись
3. Решили не сохранять и сделали откат (удалили только что созданную запись)
4. ... И вот ЧТО Вы хотите здесь сделать? Что редактировать, если нет ни одной записи?

Наиболее логичное решение на 4 шаге - это просто закрыть такую форму. Что Вы пытаетесь редактировать в TextBox, если нечего редактировать?

Стандартная логика работы с данными совсем другая. По кнопке выполняется сохранение . Отказ от сохранения связан с закрытием формы.
...
Рейтинг: 0 / 0
30.05.2011, 16:56
    #37285856
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
У меня 2 кнопки на форме - кнопка Сохранить и Выход.
В случае нажатия на любую задается вопрос на сохранение. При "Выход" форма закрывается при любом раскладе.
При "Сохранить" я хотел иметь возможность отката без закрытия формы. Мало ли, что юзер ввел и передумал.
А так его спрашивают. При варианте, когда APPEND идет раньше CURSORSETPROP так и происходит.
Добавлять APPEND после TABLEREVERT не есть хорошо.
Придется при "Сохранить" не спрашивать, а откат сделать по какой-либо кнопке в меню, недоступной в режиме добавления новой записи.
...
Рейтинг: 0 / 0
30.05.2011, 17:29
    #37285941
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
miv32У меня 2 кнопки на форме - кнопка Сохранить и Выход.
В случае нажатия на любую задается вопрос на сохранение. При "Выход" форма закрывается при любом раскладе.
При "Сохранить" я хотел иметь возможность отката без закрытия формы. Мало ли, что юзер ввел и передумал.
А так его спрашивают. При варианте, когда APPEND идет раньше CURSORSETPROP так и происходит.
Добавлять APPEND после TABLEREVERT не есть хорошо.
Придется при "Сохранить" не спрашивать, а откат сделать по какой-либо кнопке в меню, недоступной в режиме добавления новой записи.
Вот если бы использовал INSERT, проблем было бы меньше. Выход - ничего, Сохранить - Insert
...
Рейтинг: 0 / 0
30.05.2011, 19:01
    #37286135
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
miv32У меня 2 кнопки на форме - кнопка Сохранить и Выход.
В случае нажатия на любую задается вопрос на сохранение.
Зачем при нажатии на кнопку "Сохранить" спрашивать подтверждение? Вот Вы бы сами как отреагировали на подобный вопрос приложения? Думаю, самая мягкая форма была бы вроде "Он что, тупой?"

miv32При "Сохранить" я хотел иметь возможность отката без закрытия формы. Мало ли, что юзер ввел и передумал.
Смысл? Если пользователь "ввел и передумал", то он просто закроет форму через кнопку "Выход" без сохранения и затем откроет ее заново.

miv32Придется при "Сохранить" не спрашивать
Вы можете привести пример какой-нибудь программы, которая при нажатии на кнопку "Сохранить" спрашивала бы то, что Вы пытаетесь спросить у пользователя? Да и вообще запрашивала подтверждение желания сохранить?

Есть простое правило: кнопка должна делать то, что на ней написано. Если написано "Сохранить", то любой пользователь предполагает, то данная кнопка и предназначена для сохранения. А если написано "Сохранить", а она вместо этого вдруг начинает отменять введенные данные, то ничего кроме, мягко говоря, недоумения подобное действие не вызывает.

Не надо пытаться из СУБД сделать текстовый редактор. Ничем хорошим это не кончится.
...
Рейтинг: 0 / 0
30.05.2011, 22:20
    #37286358
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
APPEND BLANK и CURSORSETPROP
Логично. :) СУБД не Word.
К сожалению у моих пользователей мышление именно вордовое.
Поколение копипастеров. :)
Под "Сохранить" повешу TABLEUPDATE, но форму убирать не буду.
Полей ввода много, сам документ + спецификация. Захотел юзер покурить - нажал кнопочку, выскочило окошко - Сохранено (или не сохранено, если какие-либо траблы)
Вернулся - продолжил ввод.

Спасибо всем!

Да, вот еще один момент.
Наткнулся на вопросы по поводу селектов из буферизованных таблиц. Пишут, что невозможно сделать, если не ошибаюсь.

Возможно, не открыл Америку, но кому интересно:

=CURSORSETPROP("Buffering", 5, "tmptable")

select * from tmptable with (buffering = .T.) прекрасно работает.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / APPEND BLANK и CURSORSETPROP / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]