powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как обновить данные
24 сообщений из 24, страница 1 из 1
Как обновить данные
    #37506460
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одна и та же таблица открыта дважды(again), под разными алиасами, и просматриваю в окне browse, меняя значение в поле первой таблицы, надо как-то обновить эти данные и во второй..., какой командой можно это сделать?
...
Рейтинг: 0 / 0
Как обновить данные
    #37506476
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1,

Извиняюсь спросить, а для каких целей открывать одновременно одну и ту же таблицу??? Чего-то ни разу не сталкивался с такой практикой.
...
Рейтинг: 0 / 0
Как обновить данные
    #37506491
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу оговорюсь, что наверняка делаю не правильно..:-)), но есть грид, внизу итог, в гриде в textbox условие, если значение в нём изменилось, то вызывается функция подсчёта итога, и в этой функции, эта же таблица открывается с ключом again, но данные там обновляются если пощёлкаешь мышкой по таблице, а так не обновляются, поэтому и возник вопрос обновления данных
...
Рейтинг: 0 / 0
Как обновить данные
    #37506500
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У грида вызови Refresh() после изменения.
...
Рейтинг: 0 / 0
Как обновить данные
    #37506541
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, не проходит, добавил Lostfocus помимо replace, ещё строчку ThisForm.Pageframe1.Page3.Grid2.Refresh, то же самое...
...
Рейтинг: 0 / 0
Как обновить данные
    #37506564
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1не, не проходит, добавил Lostfocus помимо replace, ещё строчку ThisForm.Pageframe1.Page3.Grid2.Refresh, то же самое...

Не понятно, где данные не обновляются - в Grid или во вновь открываемой таблице? А replace откуда, если таблица напрямую редактируется?
...
Рейтинг: 0 / 0
Как обновить данные
    #37506581
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну replace поставил на всякий случай(это первое что пришло в голову, когда увидел что данные не обновляются...), а данные не обновляются во вновь открываемой таблицы в функции подсчёта итога, когда остановишь программу исделаешь в командном окне browse несколько раз, тогда обновятся...
вот этоа функция в lostfocus... textboxa.
IF STR(this.Value,12,2)<>this.Tag
SELECT tr_zo
replace tr_zo.tzo_so WITH this.Value
ThisForm.Pageframe1.Page3.Grid2.Refresh
thisform.opl_z
endif
...
Рейтинг: 0 / 0
Как обновить данные
    #37506586
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
opl_z
***********************
LOCAL _itogo
SELECT 0
USE dbfs\tr_zo SHARED ALIAS atr_zo AGAIN
SET ORDER TO Tz_ID && IIF(DELETED().OR.EMPTY(Tz_ID),"F","T")+STR(Tz_ID,7)
_itogo=0
IF SEEK("T"+STR(tur_z.Tz_ID,7))
SUM tzo_so TO _itogo WHILE Tz_ID=tur_z.Tz_ID
ENDIF
USE
thisform.pageframe1.page3.itogo.VALUE=_itogo
thisform.pageframe1.page3.itogo.Refresh
...
Рейтинг: 0 / 0
Как обновить данные
    #37506591
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, всё, увидел ошипку...:-))
...
Рейтинг: 0 / 0
Как обновить данные
    #37506596
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, не то...:-((
...
Рейтинг: 0 / 0
Как обновить данные
    #37506682
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1,

Здесь ошибки нет?
USE dbfs\tr_zo SHARED ALIAS atr_zo AGAIN
...
Рейтинг: 0 / 0
Как обновить данные
    #37506695
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет... я просто не помню команды которые из буфера обновляют таблицы...
...
Рейтинг: 0 / 0
Как обновить данные
    #37506702
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в функции нет ошибки, потому что она отрабатывает без ошибок при удалении записи и при открытии вкладки этой страницы, а при изменении в таблице подсчитывает по старым данным, в трэкере смотрел...
...
Рейтинг: 0 / 0
Как обновить данные
    #37506737
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1,

а ты что устанавливал буфферизацию таблицы?
...
Рейтинг: 0 / 0
Как обновить данные
    #37506747
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет не устанавливал, но вдруг поможет..:-)
...
Рейтинг: 0 / 0
Как обновить данные
    #37506773
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1,

Если я правильно понял, ты редактируешь данные в Grid, а под ним TextBox, в котором должна отображаться сумма, посчитанная по какой-то колонке с каким-то условием. Так вот, пока ты находишься в редактируемой ячейке Grid, никаких изменений в таблице еще нет, а когда переместишься на другую строку - они появятся. И для этого совсем не обязательно снова открывать ту же таблицу. Сумму посчитать можно и по уже открытой и занести результат в TextBox. А вообще-то уже столько говорилось о вреде редактирования данных в Grid, кроме как в исключительных случаях.
...
Рейтинг: 0 / 0
Как обновить данные
    #37506794
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да всё правильно, но у меня исключительный случай, и я сразу сделал оговорку в начале темы..:-)), да я нахожусь в поле редактирования, но по выходу из этого поля, я принудительно делаю replace, в Lostfocus, и уже после replace открываю второй раз таблицу..., да можно делать подсчёт в открытой таблицеЮ наверное так и буду делать, пока решения нет, но это надо уходить с записи, находить начало подсчёта, подсчитывать, а потом возвращаться на изменённую запись... что-то как-то становится грустно... глядя на это...
...
Рейтинг: 0 / 0
Как обновить данные
    #37506800
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1opl_z
***********************
LOCAL _itogo
SELECT 0
USE dbfs\tr_zo SHARED ALIAS atr_zo AGAIN
SET ORDER TO Tz_ID && IIF(DELETED().OR.EMPTY(Tz_ID),"F","T")+STR(Tz_ID,7)
_itogo=0
IF SEEK("T"+STR(tur_z.Tz_ID,7))
SUM tzo_so TO _itogo WHILE Tz_ID=tur_z.Tz_ID
ENDIF
USE
thisform.pageframe1.page3.itogo.VALUE=_itogo
thisform.pageframe1.page3.itogo.Refresh
Может написать все по-человечески?
1. Это зачем? IIF(DELETED().OR.EMPTY(Tz_ID),"F","T")+STR(Tz_ID,7)
у тебя SET DELETED OFF используется?
2. проще сделать индекс просто по Tz_ID
Код: plaintext
index on Tz_ID tag Tz_ID
a твой код заменить на такой
Код: plaintext
1.
2.
select sum(tzo_so) as tzo_so from tr_zo where Tz_ID=tur_z.Tz_ID into cursor curRes
_itogo = curRes.tzo_so
use in curRes
3. Не надо с подчеркивания имена переменных начинать, с подчеркивания служебные переменные фокса начинаются, во дин прекрасный день совпадет и будешь причину мистических действий программы искать.

q1w1e1IF STR(this.Value,12,2)<>this.Tag
SELECT tr_zo
replace tr_zo.tzo_so WITH this.Value
ThisForm.Pageframe1.Page3.Grid2.Refresh
thisform.opl_z
endif
я так понимаю этот код Refresh() не делает. Такое может быть если фокус на стоит на ячейке где сумма показывается. Попробуй еще фокус с грида убрать и обратно вернуть.
...
Рейтинг: 0 / 0
Как обновить данные
    #37507379
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TМожет написать все по-человечески?
1. Это зачем? IIF(DELETED().OR.EMPTY(Tz_ID),"F","T")+STR(Tz_ID,7)
у тебя SET DELETED OFF используется?
Это такая причуда, со времён клиппера, этот аттавизм мне немешает и я к такому стилю привык..:-)

Dima T2. проще сделать индекс просто по Tz_ID
Код: plaintext
index on Tz_ID tag Tz_ID
a твой код заменить на такой
Код: plaintext
1.
2.
select sum(tzo_so) as tzo_so from tr_zo where Tz_ID=tur_z.Tz_ID into cursor curRes
_itogo = curRes.tzo_so
use in curRes

ну тут я просто исхожу из того, что при подсчёте суммы я не прохожу всю таблицу, как при select.. where.. и получается я думаю быстрее...

Dima T я так понимаю этот код Refresh() не делает. Такое может быть если фокус на стоит на ячейке где сумма показывается. Попробуй еще фокус с грида убрать и обратно вернуть.
Спасибо, завтра приеду на работу, попробую...:-)
...
Рейтинг: 0 / 0
Как обновить данные
    #37507416
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1ну тут я просто исхожу из того, что при подсчёте суммы я не прохожу всю таблицу, как при select.. where.. и получается я думаю быстрее...
Вообще-то, еще быстрее будет вообще отказаться от сканирования всех записей таблицы и менять сумму только на то значение, которое изменилось.

- Запоминается значение при входе в поле
- Если при выходе из поля значение изменилось, то делается коррекция суммы по следующей формуле

Код: plaintext
"Сумма" = "Сумма" - "Значение при входе" + "Значение при выходе"

Никаких повторных открытий таблиц и никаких сканирований записей. Выполняется "мгновенно".

Единственный недостаток - не видно изменений, сделанных другими пользователями. Но здесь еще надо проанализировать, а надо ли видеть эти изменения?
...
Рейтинг: 0 / 0
Как обновить данные
    #37507791
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

спасибо
...
Рейтинг: 0 / 0
Как обновить данные
    #37507801
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1ну тут я просто исхожу из того, что при подсчёте суммы я не прохожу всю таблицу, как при select.. where.. и получается я думаю быстрее...
Это твои домыслы, померь скорость и удивись. Только если индекс не исправишь как я выше написал, то будет проход всей таблицы, при наличии индекса по Tz_ID полного скана таблицы не будет. SCAN при активном индексе не самый быстрый способ.

ВладимирМВообще-то, еще быстрее будет вообще отказаться от сканирования всех записей таблицы и менять сумму только на то значение, которое изменилось.

- Запоминается значение при входе в поле
- Если при выходе из поля значение изменилось, то делается коррекция суммы по следующей формуле

Код: plaintext
"Сумма" = "Сумма" - "Значение при входе" + "Значение при выходе"

Такой способ действительно самый быстрый, обычно им и пользуюсь, только при окончательном сохранении предпочитаю дополнительно сделать полный пересчет суммы, т.к. иногда бывает погрешность из-за округлений, ошибки/сбои программы и единожды неправильно посчитанная сумма остается навсегда неправильной.
...
Рейтинг: 0 / 0
Как обновить данные
    #37507824
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tq1w1e1ну тут я просто исхожу из того, что при подсчёте суммы я не прохожу всю таблицу, как при select.. where.. и получается я думаю быстрее...
Это твои домыслы, померь скорость и удивись. Только если индекс не исправишь как я выше написал, то будет проход всей таблицы, при наличии индекса по Tz_ID полного скана таблицы не будет. SCAN при активном индексе не самый быстрый способ.

Я не хочу спорить, просто с вами соглашусь..:-), но такие индексы я использую давно и проходил тракером(в ранних версиях тракер и дебугер были разнесены) не раз, полного прохождения таблицы ни разу не замечал...:-)
...
Рейтинг: 0 / 0
Как обновить данные
    #37507844
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1Я не хочу спорить, просто с вами соглашусь..:-), но такие индексы я использую давно и проходил тракером(в ранних версиях тракер и дебугер были разнесены) не раз, полного прохождения таблицы ни разу не замечал...:-)
Похоже ты не понял о чем я писал. Я не спорю что твой код НЕ читает всю таблицу.
Но select.. where.. тоже НЕ читает всю таблицу. Только это будет при наличии такого индекса:
Код: plaintext
index on Tz_ID tag Tz_ID
при твоих индексах типа IIF(DELETED().OR.EMPTY(Tz_ID),"F","T")+STR(Tz_ID,7) будет полный перебор всех записей т.к. оптимизатор запросов не умеет использовать такие индексы.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как обновить данные
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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