powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Функция, обратная Thisform.Refresh() - есть такая ?
5 сообщений из 5, страница 1 из 1
Функция, обратная Thisform.Refresh() - есть такая ?
    #33905345
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предыстория, зачем мне это.
Есть десяток форм с большой кучей полей в каждой. Все поля имеют в качестве ControlSource колонки алиасов, обновляемых на сервере по ODBC командой tableupdate(). Поля могут быть textbox, combobox, listbox, checkbox. Соответственно, у всех полей форм в свойстве ControlSource стоит, например, myalias.code1, а всякие другие свойства определяют, что отображается на экране. Например, для combobox может отображаться или код (то, чего записано в code1), или название по коду.
Далее, юзер вводит новые значения в поля формы и сохраняет. Выдается команда tableupdate(), и если в ответ сервер СУБД возвращает ошибку (например, нарушения primary- или foreign-ключа, еще каких ограничений типа not null или срабатывания триггеров защиты на корректировку чужих записей), то выдается сообщение юзеру и команда tablerevert(). По tablerevert в alias значения становятся предыдущими (до их редактирования юзером), а в полях формы они пока остаются теми, что ввел юзер (и в каких-то значениях ошибся, к примеру).
Если выдать команду thisform.refresh(), то все поля формы отобразят состояние alias до редактирования - и юзер должен будет все начинать сначала (даже если он откорректировал 20 полей, но ошибся в одной цифре). Если не выдать thisform.refresh(), то поля combobox и listbox начинают себя вести неправильно (в this.value у них одно - то, что ввел юзер, а в источнике - другое - старое значение). Tablerevert() после ошибки не выдавать нельзя - не пройдет следующий tableupdate().
Самое логичное здесь было бы выдать функцию, обратную thisform.refresh() -
чтобы по ней в alias записались значения из полей формы с соблюдением типов данных и прочего. И тогда юзеру останется только исправить то, что он неправильно ввел и сохранить. Понятно, что можно в каждой форме писать длинные операторы
replace code1 with thisform.TCode1.value, ...
и в них заботиться о типах данных и прочей фигне. Но облом ! Ведь функция thisform.refresh() сама об этом заботится !
Так может есть такая функция (или готовая универсальная идея-реализация-подсказка) ?
...
Рейтинг: 0 / 0
Функция, обратная Thisform.Refresh() - есть такая ?
    #33905396
Roman Safronov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть идея: вызывать refresh только для комбо и листбоксов
...
Рейтинг: 0 / 0
Функция, обратная Thisform.Refresh() - есть такая ?
    #33905400
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант 1
1.Ввод делать в локальный курсор
2.Обновлять на сервере
3.Анализировать ошибку/ выдавать сообщение / исправлять
4.если все ок обновлять курсор

Вариант 2 (хотя и некрасивый)
перед обновлением на клиенте проверять правильность заполнения, и уже потом обновлять на сервере.
...
Рейтинг: 0 / 0
Функция, обратная Thisform.Refresh() - есть такая ?
    #33905420
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант:

Непосредственно перед попыткой сброа буфера сохранить текущие данные через

SCATTER MEMVAR

После неудачного сброса и TableRevert() по новой прописать все данные через

GATHER MEMVAR

Можно сделать запись не через GATHER MEMVAR, а через цикл, чтобы не "портить" буфер теми данными, которые не изменились.
...
Рейтинг: 0 / 0
Функция, обратная Thisform.Refresh() - есть такая ?
    #33906124
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем за идеи !
Как я мог забыть про scatter и gather ... :(
Реализовал идею Владимира Максимова - спасибо !
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Функция, обратная Thisform.Refresh() - есть такая ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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