:: Архив конференции по VFP до 2005 года
Не обновляются поля в форме
СергейМ
Автор

Сообщений: 6
Дата регистрации: 27.09.2000
Win98, FoxPro 6.0+SP2
Имеется основная таблица и много главных таблиц связанных с ней по соответствующим ключевым полям. В форме множество TextBox-ов, которые присоединены к значениям главных таблиц.
Делаю Replace одного из полей основной таблицы новым значением, Refresh (конкретного поля или формы - результат один), а значение не обновляется. Только при насильственном переходе Skip 1, -1.
Забавно, что некоторые из TextBox-ов обновляются при получении фокуса, хотя никаких отличий от других у них нет.
В чем грабли? А?
Ratings: 0 negative/0 positive
RE: Не обновляются поля в форме
Mazay
Граблей похоже нет (хотя не совсем уверен). В examples TasTraders разработчики постоянно "насильно" обновляют форму дополнительным методом RefreshForm , а в нем все тот же GO ( RECNO() ). Если раскопаешь что-либо на эту тему поделись пожайлусто по МЫЛУ.
Удачи!
Ratings: 0 negative/0 positive
RE: Не обновляются поля в форме
Барыга

Сообщений: 757
Откуда: Иркутск
Дата регистрации: 04.09.2000
Ага
Косяк
Я скипаю туда сюда
А что делать
Ratings: 0 negative/0 positive
RE: Не обновляются поля в форме
ВладимирМ

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
А у тебя случайно не связь один-ко-многим и ты на первой записи главной таблицы у которой есть несколько подчиненных записей?
В этом случае возможны самые неожиданные чудеса!
Ratings: 0 negative/0 positive
RE: Не обновляются поля в форме
СергейМ
Автор

Сообщений: 6
Дата регистрации: 27.09.2000
Нет, связь один-к-одному.
Кажется, наиболее подходящим выходом является Go (RecNo()).
А вообще, такое ощущение, что DataEnvironment нехватает метода Requery
Ratings: 0 negative/0 positive
RE: Не обновляются поля в форме
Vlad

Сообщений: 850
Откуда: Запорожье
Дата регистрации: 28.09.2000
По моему это потому , что датаэнвиромент - это объект в памяти , а пишешь ты как я понимаю собственно в таблицу, ну ты хоть дай как то фоксу знать что поменял данные и ему надо "перетряхнуть" все связи , иногда помогает пробежать фокусом по элементам или "пошевелить " все RELATION.
Ratings: 0 negative/0 positive
RE: Не обновляются поля в форме
ВладимирМ

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
А нет ли зависимости от КОЛИЧЕСТВА объектов. Может какой предел. Попробуй поудалять с формы десяток-другой TextBox-ов
Ratings: 0 negative/0 positive
to vlad или всем, дополнительный вопрос к теме
св

Сообщений: 25
Дата регистрации: 04.09.2000
vlad или кто-нибудь, если не трудно, объясни пожалуста подробнее, про "...датаэнвиромент - это объект в памяти ..." , в смысле, чем там является объект "cursor"(это "настоящий" курсор?, как он формируется?, как обновление проходит...), его поведение действительно иногда удивляет .

чем длиннее объяснение, тем приятнее мне будет его читать.
можно почтой.
Ratings: 0 negative/0 positive
Про dataenvironment
Sergey Titow

Сообщений: 2242
Дата регистрации: 12.09.2000
dataenvironment - это контейнер для объектов cursor и relation, которые фактически являются только описаниями - какую таблицу, с каким алиасом, буферизацией, активным индексом, фильтром открывать (cursor) и какие relation установить после открытия. Он просто избавляет от необходимости вручную прописывать все use и set relation и за счет этого таблицы открываются и связи устанавливаются немного быстрее. А в дальнейшем вся работа с таблицами идет обычным порядком:
select (thisform.dataenvironment.cursor1.alias)
replace ..... in (thisform.dataenvironment.cursor1.alias) и т.д.
За исключением того, что с его помощью можно установить фильтр:
thisform.dataenvironment.cursor1.filter = "name = [Вася]"
или активный тэг:
thisform.dataenvironment.cursor1.order = "name"
Изменение любых других пропертей вызовет ошибку, если таблицы, входящие в него, открыты. Чтобы их менять надо сделать thisform.dataenvironment.closetables()
поменять, потом
thisform.dataenvironment.opentables()
Правда это может плохо сказаться на контролах

Несколько советов:
1. По умолчанию он каждой новой таблице присваивает алиас cursorN. Если формы имеют Default Data Session, могут быть конфликты с одинаковыми именами алиасов. Так что лучше сделать Private Data Session для всех форм
2. Если сделана Private Data Session для формы, то все SETы установлены по умолчанию, т.е. их надо вручную восстанавливать, причем это надо сделать в dataenvironment.beforeopentables, так как он выполняется ДО form.load и даже ДО dataenvironment.init
3. Как изменить database в run-time
в beforeopentables каждой формы

SET ECHO OFF
SET TALK OFF

LOCAL cptr, i
LOCAL ARRAY atm(1,1)
FOR i = 1 TO AMEMB(atm, THIS, 2)
m.cptr = EVAL("THIS." + atm(i))
IF UPPER(cptr.BASECLASS) = "CURSOR" AND !EMPTY(cptr.DATABASE)
cptr.DATABASE = m.fulldbname
ENDIF
ENDFOR

m.fulldbname - полный путь к базе (c:\data\data.dbc)
!EMPTY(cptr.DATABASE) - на тот случай, если это free table, тогда DATABASE не должен изменяться, даже если туда записать пустую строку, он начнет ругаться, что файл ".dbc" не найден
Ratings: 0 negative/0 positive
to Sergey Titow Про dataenvironment
св
спасиба башое
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 5 (Гостей: 5)

© 2000-2024 Fox Club 
Яндекс.Метрика