|
Как обновить данные
|
|||
---|---|---|---|
#18+
Одна и та же таблица открыта дважды(again), под разными алиасами, и просматриваю в окне browse, меняя значение в поле первой таблицы, надо как-то обновить эти данные и во второй..., какой командой можно это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 11:46 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
q1w1e1, Извиняюсь спросить, а для каких целей открывать одновременно одну и ту же таблицу??? Чего-то ни разу не сталкивался с такой практикой. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 11:56 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
Сразу оговорюсь, что наверняка делаю не правильно..:-)), но есть грид, внизу итог, в гриде в textbox условие, если значение в нём изменилось, то вызывается функция подсчёта итога, и в этой функции, эта же таблица открывается с ключом again, но данные там обновляются если пощёлкаешь мышкой по таблице, а так не обновляются, поэтому и возник вопрос обновления данных ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 12:05 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
У грида вызови Refresh() после изменения. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 12:06 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
не, не проходит, добавил Lostfocus помимо replace, ещё строчку ThisForm.Pageframe1.Page3.Grid2.Refresh, то же самое... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 12:22 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
q1w1e1не, не проходит, добавил Lostfocus помимо replace, ещё строчку ThisForm.Pageframe1.Page3.Grid2.Refresh, то же самое... Не понятно, где данные не обновляются - в Grid или во вновь открываемой таблице? А replace откуда, если таблица напрямую редактируется? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 12:28 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
ну 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 12:33 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 12:35 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
Извиняюсь, всё, увидел ошипку...:-)) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 12:36 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
нет, не то...:-(( ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 12:37 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
q1w1e1, Здесь ошибки нет? USE dbfs\tr_zo SHARED ALIAS atr_zo AGAIN ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 13:10 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
нет... я просто не помню команды которые из буфера обновляют таблицы... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 13:15 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
в функции нет ошибки, потому что она отрабатывает без ошибок при удалении записи и при открытии вкладки этой страницы, а при изменении в таблице подсчитывает по старым данным, в трэкере смотрел... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 13:17 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
q1w1e1, а ты что устанавливал буфферизацию таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 13:31 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
нет не устанавливал, но вдруг поможет..:-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 13:36 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
q1w1e1, Если я правильно понял, ты редактируешь данные в Grid, а под ним TextBox, в котором должна отображаться сумма, посчитанная по какой-то колонке с каким-то условием. Так вот, пока ты находишься в редактируемой ячейке Grid, никаких изменений в таблице еще нет, а когда переместишься на другую строку - они появятся. И для этого совсем не обязательно снова открывать ту же таблицу. Сумму посчитать можно и по уже открытой и занести результат в TextBox. А вообще-то уже столько говорилось о вреде редактирования данных в Grid, кроме как в исключительных случаях. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 13:49 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
Да всё правильно, но у меня исключительный случай, и я сразу сделал оговорку в начале темы..:-)), да я нахожусь в поле редактирования, но по выходу из этого поля, я принудительно делаю replace, в Lostfocus, и уже после replace открываю второй раз таблицу..., да можно делать подсчёт в открытой таблицеЮ наверное так и буду делать, пока решения нет, но это надо уходить с записи, находить начало подсчёта, подсчитывать, а потом возвращаться на изменённую запись... что-то как-то становится грустно... глядя на это... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 13:59 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
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
Код: plaintext 1. 2.
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() не делает. Такое может быть если фокус на стоит на ячейке где сумма показывается. Попробуй еще фокус с грида убрать и обратно вернуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 14:02 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
Dima TМожет написать все по-человечески? 1. Это зачем? IIF(DELETED().OR.EMPTY(Tz_ID),"F","T")+STR(Tz_ID,7) у тебя SET DELETED OFF используется? Это такая причуда, со времён клиппера, этот аттавизм мне немешает и я к такому стилю привык..:-) Dima T2. проще сделать индекс просто по Tz_ID Код: plaintext
Код: plaintext 1. 2.
ну тут я просто исхожу из того, что при подсчёте суммы я не прохожу всю таблицу, как при select.. where.. и получается я думаю быстрее... Dima T я так понимаю этот код Refresh() не делает. Такое может быть если фокус на стоит на ячейке где сумма показывается. Попробуй еще фокус с грида убрать и обратно вернуть. Спасибо, завтра приеду на работу, попробую...:-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 19:01 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
q1w1e1ну тут я просто исхожу из того, что при подсчёте суммы я не прохожу всю таблицу, как при select.. where.. и получается я думаю быстрее... Вообще-то, еще быстрее будет вообще отказаться от сканирования всех записей таблицы и менять сумму только на то значение, которое изменилось. - Запоминается значение при входе в поле - Если при выходе из поля значение изменилось, то делается коррекция суммы по следующей формуле Код: plaintext
Никаких повторных открытий таблиц и никаких сканирований записей. Выполняется "мгновенно". Единственный недостаток - не видно изменений, сделанных другими пользователями. Но здесь еще надо проанализировать, а надо ли видеть эти изменения? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 19:35 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
ВладимирМ, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2011, 06:09 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
q1w1e1ну тут я просто исхожу из того, что при подсчёте суммы я не прохожу всю таблицу, как при select.. where.. и получается я думаю быстрее... Это твои домыслы, померь скорость и удивись. Только если индекс не исправишь как я выше написал, то будет проход всей таблицы, при наличии индекса по Tz_ID полного скана таблицы не будет. SCAN при активном индексе не самый быстрый способ. ВладимирМВообще-то, еще быстрее будет вообще отказаться от сканирования всех записей таблицы и менять сумму только на то значение, которое изменилось. - Запоминается значение при входе в поле - Если при выходе из поля значение изменилось, то делается коррекция суммы по следующей формуле Код: plaintext
Такой способ действительно самый быстрый, обычно им и пользуюсь, только при окончательном сохранении предпочитаю дополнительно сделать полный пересчет суммы, т.к. иногда бывает погрешность из-за округлений, ошибки/сбои программы и единожды неправильно посчитанная сумма остается навсегда неправильной. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2011, 06:39 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
Dima Tq1w1e1ну тут я просто исхожу из того, что при подсчёте суммы я не прохожу всю таблицу, как при select.. where.. и получается я думаю быстрее... Это твои домыслы, померь скорость и удивись. Только если индекс не исправишь как я выше написал, то будет проход всей таблицы, при наличии индекса по Tz_ID полного скана таблицы не будет. SCAN при активном индексе не самый быстрый способ. Я не хочу спорить, просто с вами соглашусь..:-), но такие индексы я использую давно и проходил тракером(в ранних версиях тракер и дебугер были разнесены) не раз, полного прохождения таблицы ни разу не замечал...:-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2011, 07:49 |
|
Как обновить данные
|
|||
---|---|---|---|
#18+
q1w1e1Я не хочу спорить, просто с вами соглашусь..:-), но такие индексы я использую давно и проходил тракером(в ранних версиях тракер и дебугер были разнесены) не раз, полного прохождения таблицы ни разу не замечал...:-) Похоже ты не понял о чем я писал. Я не спорю что твой код НЕ читает всю таблицу. Но select.. where.. тоже НЕ читает всю таблицу. Только это будет при наличии такого индекса: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2011, 08:20 |
|
|
start [/forum/search_topic.php?author=newoneman&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 488ms |
total: | 660ms |
0 / 0 |