Не обновляются поля в форме | |
---|---|
СергейМ Автор Сообщений: 6 Дата регистрации: 27.09.2000 |
Win98, FoxPro 6.0+SP2
Имеется основная таблица и много главных таблиц связанных с ней по соответствующим ключевым полям. В форме множество TextBox-ов, которые присоединены к значениям главных таблиц. Делаю Replace одного из полей основной таблицы новым значением, Refresh (конкретного поля или формы - результат один), а значение не обновляется. Только при насильственном переходе Skip 1, -1. Забавно, что некоторые из TextBox-ов обновляются при получении фокуса, хотя никаких отличий от других у них нет. В чем грабли? А? |
RE: Не обновляются поля в форме | |
---|---|
Mazay |
Граблей похоже нет (хотя не совсем уверен). В examples TasTraders разработчики постоянно "насильно" обновляют форму дополнительным методом RefreshForm , а в нем все тот же GO ( RECNO() ). Если раскопаешь что-либо на эту тему поделись пожайлусто по МЫЛУ.
Удачи! |
RE: Не обновляются поля в форме | |
---|---|
Барыга Сообщений: 757 Откуда: Иркутск Дата регистрации: 04.09.2000 |
Ага
Косяк Я скипаю туда сюда А что делать |
RE: Не обновляются поля в форме | |
---|---|
ВладимирМ Сообщений: 14098 Откуда: Москва Дата регистрации: 02.09.2000 |
А у тебя случайно не связь один-ко-многим и ты на первой записи главной таблицы у которой есть несколько подчиненных записей?
В этом случае возможны самые неожиданные чудеса! |
RE: Не обновляются поля в форме | |
---|---|
СергейМ Автор Сообщений: 6 Дата регистрации: 27.09.2000 |
Нет, связь один-к-одному.
Кажется, наиболее подходящим выходом является Go (RecNo()). А вообще, такое ощущение, что DataEnvironment нехватает метода Requery |
RE: Не обновляются поля в форме | |
---|---|
Vlad Сообщений: 850 Откуда: Запорожье Дата регистрации: 28.09.2000 |
По моему это потому , что датаэнвиромент - это объект в памяти , а пишешь ты как я понимаю собственно в таблицу, ну ты хоть дай как то фоксу знать что поменял данные и ему надо "перетряхнуть" все связи , иногда помогает пробежать фокусом по элементам или "пошевелить " все RELATION.
|
RE: Не обновляются поля в форме | |
---|---|
ВладимирМ Сообщений: 14098 Откуда: Москва Дата регистрации: 02.09.2000 |
А нет ли зависимости от КОЛИЧЕСТВА объектов. Может какой предел. Попробуй поудалять с формы десяток-другой TextBox-ов
|
to vlad или всем, дополнительный вопрос к теме | |
---|---|
св Сообщений: 25 Дата регистрации: 04.09.2000 |
vlad или кто-нибудь, если не трудно, объясни пожалуста подробнее, про "...датаэнвиромент - это объект в памяти ..." , в смысле, чем там является объект "cursor"(это "настоящий" курсор?, как он формируется?, как обновление проходит...), его поведение действительно иногда удивляет .
чем длиннее объяснение, тем приятнее мне будет его читать. можно почтой. |
Про 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" не найден |
to Sergey Titow Про dataenvironment | |
---|---|
св |
спасиба башое
|
© 2000-2024 Fox Club  |