Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Функция, обратная Thisform.Refresh() - есть такая ? / 5 сообщений из 5, страница 1 из 1
08.08.2006, 13:23
    #33905345
strizh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция, обратная Thisform.Refresh() - есть такая ?
Предыстория, зачем мне это.
Есть десяток форм с большой кучей полей в каждой. Все поля имеют в качестве 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
08.08.2006, 13:38
    #33905396
Roman Safronov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция, обратная Thisform.Refresh() - есть такая ?
Есть идея: вызывать refresh только для комбо и листбоксов
...
Рейтинг: 0 / 0
08.08.2006, 13:40
    #33905400
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция, обратная Thisform.Refresh() - есть такая ?
Вариант 1
1.Ввод делать в локальный курсор
2.Обновлять на сервере
3.Анализировать ошибку/ выдавать сообщение / исправлять
4.если все ок обновлять курсор

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

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

SCATTER MEMVAR

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

GATHER MEMVAR

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


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