powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с refresh
16 сообщений из 16, страница 1 из 1
Помогите с refresh
    #36606486
tim07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Мне нужно чтоб на форме, куда вводятся данные о клиенте, были пустые поля для заполнения. Но когда я запускаю форму, то у меня все время в полях значения, которые были введены в последний раз. Как это исправить?
...
Рейтинг: 0 / 0
Помогите с refresh
    #36606530
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой ControSource у этих полей?
...
Рейтинг: 0 / 0
Помогите с refresh
    #36607202
tim07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тип - текстовое поле
ControlSource - клиент.фамилия
ControlSource - клиент.имя
и т.д.
...
Рейтинг: 0 / 0
Помогите с refresh
    #36607340
З.Ы.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tim07тип - текстовое поле
ControlSource - клиент.фамилия
ControlSource - клиент.имя
и т.д.
append blank или insert (SQL)
для "клиент", затем по необходимости tableupdate,tablerevert
...
Рейтинг: 0 / 0
Помогите с refresh
    #36607818
tim07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как использовать tableupdate и tablerevert? Чтобы после добавления записей поля очищались, и во время следующего запуска были пустыми?
...
Рейтинг: 0 / 0
Помогите с refresh
    #36608504
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в качестве источника данных (ControlSource) указаны поля таблицы, то это означает, что редактирование данных напрямую изменяет содержимое текущей записи таблицы. Как следствие, всегда должна существовать запись, поля которой будут редактироваться.

Если хотите заполнять поля новой записи, то эта новая запись должна быть создана до начала редактирования. Физически. Как и было сказано, командой

APPEND BLANK

Эту команду надо дать в init-формы

Но прямое и непосредственное редактирование записей таблицы - не есть хорошо. По многим причинам. Поэтому, необходимо разделить процесс ввода/модификации данных от собственно записи внесенных изменений в таблицу. Для этой цели используется технология буферизации.

Существует 4 типа буферизации. Наложить их можно разными способами. Наиболее простой - это в форме открыть DataEnvironment, выделить нужную таблицу и в окне Properties установить свойство

BufferModeOverride = 5 -Optimistic table buffering

В результате, "поверх" табличных данных как бы накладывается прозрачная "калька". Пользователю кажется, что запись идет напрямую в таблицы, однако на практике, запись идет именно на эту прозрачную "кальку".

По окончании процесса ввода изменений пользователь либо принимает все внесенные модификации (дает команду TableUpdate()) и изменения переносятся с кальки в собственно таблицу, либо отвергает все изменения (дает команду TableRevert()) и калька просто уничтожается, ничего не перенося в исходную таблицу.

Если вы дали команду APPEND BLANK в буферизированной таблицы, то TableRevert() автоматически "откатит" создание новой записи. Т.е. физически, новая запись создана не будет.
...
Рейтинг: 0 / 0
Помогите с refresh
    #36609360
tim07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вставил append blank в инит формы, и выбрал тип буферизации в dataenvironment -5. Но все равно при запуске формы поля заполнены данными из первой записи. Может нужно создать локальное представление, и уже с ним работать?
...
Рейтинг: 0 / 0
Помогите с refresh
    #36609388
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты уверен, что Append blank кошерный? В смысле , в правильную ли таблицу вставляется запись? Сделай так
APPEND BLANK IN Моя_таблица
...
Рейтинг: 0 / 0
Помогите с refresh
    #36609475
tim07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dag, спасибо! Теперь запись добавляется при запуске формы, но вот как использовать tableupdate() и tablerevert() для меня непонятно. Попытался вот так -

IF messagebox("Ñîõðàíèòü äàííûå?",1+32+0,"Ñîõðàíåíèå")=1
TABLEUPDATE()
ELSE
TABLEREVERT()
endif

Но выдает ошибку - Function requires row or table buffering mode (Error 1586)
Хотя я в DataEnvironment добавил эту таблицу и поставил buffering mod = 5.
...
Рейтинг: 0 / 0
Помогите с refresh
    #36609502
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, эта та же ошибка - не выбрана нужная таблица в качестве текущей. Предварительно
можно дать команду

select моя_таблица
...
Рейтинг: 0 / 0
Помогите с refresh
    #36609603
tim07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, действительно! Спасибо, Dag!!!

Еще одна проблема -- есть календарь (ActiveX control), в нем нужно выбрать дату, и, нажав на определенную кнопку, проверить - существует ли такая дата в таблице и, если есть, вывести на форму в какой-нибудь контейнер? Формат даты в таблице -- datetime. "Время" выбирать не нужно, только дату.
...
Рейтинг: 0 / 0
Помогите с refresh
    #36609615
Fffffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Календарь ActiveX control не входит в число стандартных контролов FoxPro. Если со стандартными еще
работать не научился, не берись за ActiveX.
...
Рейтинг: 0 / 0
Помогите с refresh
    #36609616
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Календарь вернет дату , например m.MyDate
тогда
LOCATE FOR DTOS(моя_таблица.нужное_поле_даты_времени)==DTOS(m.MyDate)

IF FOUND()
*нашли
else
* не нашли
endif
...
Рейтинг: 0 / 0
Помогите с refresh
    #36609817
tim07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное! Dag! Все получилось без проблем!=)))
...
Рейтинг: 0 / 0
Помогите с refresh
    #36610884
tim07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Снова проблема! Значение из календаря сравнивается только с одной записью из таблицы!
Вот мой код:

a_date=ThisForm.Text1.Value
LOCATE FOR DTOS(rejs.time_otpr)==DTOS(a_date)
IF FOUND()
IF MESSAGEBOX("Åñòü ðåéñû â óêàçàííûé äåíü. Ïðîäîëæèòü îôîðìëåíèå áèëåòîâ?",1+32+0,"Óñïåøíî!")=1
thisformset.form6.Hide
thisformset.form7.Show
ENDIF
ELSE
messagebox("Íåò ðåéñîâ â óêàçàííûé äåíü!",1+32+0,"Îøèáêà!")
ENDif

text1 это значение из календаря!
Помогите пожалуйста!
...
Рейтинг: 0 / 0
Помогите с refresh
    #36610934
tim07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь, решил сам! Там надо поставить просто select!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с refresh
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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