powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / APPEND BLANK и CURSORSETPROP
12 сообщений из 12, страница 1 из 1
APPEND BLANK и CURSORSETPROP
    #37284138
miv32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Народ, кто как выходит из следующей ситуатии.
Есть форма для редактирования и она же для ввода новых данных из буферизованного курсора.
На форме есть кнопка "Сохранить". Под "Сохранить" стоит проверка по 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
APPEND BLANK и CURSORSETPROP
    #37284203
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Источник для 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
APPEND BLANK и CURSORSETPROP
    #37284412
miv32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Навигация имеет место быть. :)
Все это хозяйство у меня в меню висит. Из менюшки вызывается форма с гридом, целиком эту форму заполняющая. Допустим, список банков. Пользователь может отсортировать, отфильтровать записи как ему угодно.
Таких форм с гридами множество, все немодальные.
А вот по двойному клику на гриде вызывается формочка для редактирования (тоже, кстати, немодальная) (либо она же по нажатию кнопки в меню "Новая"). Собственно про вот эту формочку и был вопрос.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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