Автор | Сообщение |
Vlad04
|
| постоянный участник
|
Пост N: 420
Зарегистрирован: 13.10.05
|
|
Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)
TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру цитата: | DEFINE TBROWSE oBrw2 ; AT 60,450 ; ALIAS cAlias ; OF Form1 ; WIDTH 330 ; HEIGHT 340 ; FONT "Verdana" ; SIZE 9 ; ON DBLCLICK CopyRec(); ON GOTFOCUS fModelo_Hab(2) ; AUTOFILTER ; CELLED EDIT; VALUE nRec; GRID |
| Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
SergKis
|
| постоянный участник
|
Пост N: 2003
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.09.18 08:54. Заголовок: Andrey пишет 2) Как ..
Andrey пишет цитата: | 2) Как сделать заново полное считывание базы для этой программы ? можно обойтись без удаления объекта, а просто заново считать базу в готовый объект ? |
| Сие есть тайна для меня, т.к. не понимаю о чем речь. В тсб просмотре только 1 - :nRowCount() строк
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6032
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.09.18 09:21. Заголовок: SergKis пишет: Сие ..
SergKis пишет: цитата: | Сие есть тайна для меня, т.к. не понимаю о чем речь. |
| Базу открывать по сети SHARED. Открываем БЕЗ индексов. Первый юзер открыл базу - допустим 10 записей в ней. Другой добавил ещё пару записей и что-то откорректировал. Вот по кнопке Refresh хочу перечитать заново базу и получить все записи для 1-го юзера. У себя в задаче у меня есть такая кнопка, но там у меня условный индекс, рисуется всё автоматом.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2004
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.09.18 09:31. Заголовок: Andrey :DrawLine(....
Andrey :DrawLine(...), :DrawSelect(...) рисуют строку из буфера записи, так что, если 2-ая прога делает commit, то твоя при перемещении по базе должна показать изменения или по кнопке :Refresh(.T.)\Display(). Пробуй
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6033
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.09.18 09:39. Заголовок: SergKis пишет: или ..
SergKis пишет: цитата: | или по кнопке :Refresh(.T.)\Display(). Пробуй |
| Блин, так просто... Не догадался сразу. Заработало !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6034
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.09.18 10:04. Заголовок: Базу открывать по се..
Базу открывать по сети SHARED. Открываем БЕЗ индексов. А как сделать пересчёт в 1-ом столбце, который я создаю сам ? ADD COLUMN TO TBROWSE oBrw DATA {|| 0 } ; //oBrw:nAt } ; HEADER CRLF + "NN" SIZE 40 ; COLORS {CLR_BLACK, WHITE} ALIGN DT_CENTER ; NAME NN Так как индексов нет, то перестройку нумерации нежно только при вставки/удалении записи. Добавил в эти функции - пересчёт ItogoNN( oBrw ) Вот сама функция: Скрытый текст
FUNCTION ItogoNN( oBrw ) LOCAL nI, cAlias := oBrw:cAlias, nRec := ( cAlias )->( RecNo() ) Eval( oBrw:bGoTop ) // переход на начало таблицы FOR nI := 1 TO oBrw:nLen Eval( oBrw:GetColumn("NN"):bData, nI ) oBrw:Skip(1) NEXT ( cAlias )->( DbGoTo( nRec ) ) RETURN NIL
| Но нет вообще пересчёта. Почему ? Проект положил на fpt и - https://cloud.mail.ru/public/KRRJ/2WvDwnz2a
|
|
|
Haz
|
| |
Пост N: 1305
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.09.18 11:47. Заголовок: Andrey пишет: Но не..
Andrey пишет: цитата: | Но нет вообще пересчёта. Почему ? |
| А чего ты ожидаешь от этого ? Andrey пишет: PS и не надо портить хороший пример
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2005
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.09.18 11:54. Заголовок: Andrey А что ты счи..
Andrey А что ты считаешь таким "хитрым" способом ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6035
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.09.18 12:00. Заголовок: SergKis пишет: А чт..
SergKis пишет: цитата: | А что ты считаешь таким "хитрым" способ |
| Ставил ADD COLUMN TO TBROWSE oBrw DATA {|| oBrw:nAt } ; Первый раз показывает правильно. После удаления/вставки или колёсиком покрутить нумерация слетает.... Может и неправильно так делать, тогда подскажите как ? База открывается без индексов ! Можно было бы через массив, там вроде проще, но нужна база. Haz пишет: цитата: | PS и не надо портить хороший пример |
| Я его до рабочей таблицы довожу. Как в жизни юзера требуют.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2006
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.09.18 12:12. Заголовок: Andrey Тебе что пиш..
Andrey Тебе что пишешь, что не пишешь - результат один .... цитата: | Если ON и без индекса, то сам управляй переменной :nLen, т.е. уст. блок :bLogicLen для "правильного" счета записей в просмотре. |
| плюс свой skipper нужен, может еще что понадобится. А для NN колонки пиши ADD COLUMN TO TBROWSE oBrw DATA {|| (oBrw:cAlias)->( OrdKeyNo() ) } ; но без индекса с SET DELETED ON хз что будет
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2007
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.09.18 12:14. Заголовок: в работе тсб. не ту ..
в работе тсб. не ту кнопку нажал, сори.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2008
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.09.18 12:52. Заголовок: Andrey пишет Я его д..
Andrey пишет цитата: | Я его до рабочей таблицы довожу. Как в жизни юзера требуют. |
| Делай команду выборки в др. таблицу ( COPY TO ..., APPEND FROM ... FOR ! deleted ) Поля бери только ключ для связки или recno + поля по которым построить рабочие индексы для тек. просмотра, если надо. Таблица будет "узкая" и быстрая. Связываешь с основной базой и работаешь SET DELETED OFF, отображая удаленные цветом (вдруг передумают удалять). Все модификации переносишь на основную базу. По refresh можешь сделать ZAP и снова APPEND FROM ... или новый COPY TO ... с переоткрытием.
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6036
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.09.18 13:35. Заголовок: SergKis пишет: ADD ..
SergKis пишет: цитата: | ADD COLUMN TO TBROWSE oBrw DATA {|| (oBrw:cAlias)->( OrdKeyNo() ) } ; но без индекса с SET DELETED ON хз что будет |
| Ставил и так, только индекса нет и высвечивается RECNO() Из-за этого и подумал, что можно первую колонку сделать "виртуальной" и нумерацию туда самому переписывать при вставке/добавлении записи. Удалённые записи не нужны, юзер просит только рабочие записи. SergKis пишет: цитата: | По refresh можешь сделать ZAP и снова APPEND FROM ... или новый COPY TO ... с переоткрытием. |
| Нужно тогда закрывать базу, открывать её монопольно и т.д. Более сложный вариант получается....
|
|
|
Haz
|
| |
Пост N: 1306
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.09.18 13:38. Заголовок: Andrey пишет: Может..
Andrey пишет: цитата: | Может и неправильно так делать, тогда подскажите как |
| Правильно по индексу. Для таблицы которая целиком на экране , сойдет и ADD COLUMN TO TBROWSE oBrw DATA {|| oBrw:nPaintRow }
|
|
|
Haz
|
| |
Пост N: 1307
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.09.18 14:10. Заголовок: в др. таблицу ( COP..
в SHARED и по сети оптимально только индекс. Неоптимально - написать что то типа ADD COLUMN TO TBROWSE oBrw DATA {|| GetNum( oBrw ) } где GetNum() Func GetNum( oBrw ) local cAlias := oBrw:cAlias local nRec := (cAlias)->(RecNo()) LOcal n := 0 (cAlias)->(dbEval({|| ++n }, {|| !Deleted() .and. RecNo() <= nRec } )) (cAlias)->( dbGoTo(nRec)) Return n НО это костыль по сравнению с индексом
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2009
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.09.18 14:24. Заголовок: Andrey пишет Нужно т..
Andrey пишет цитата: | Нужно тогда закрывать базу, открывать её монопольно и т.д. Более сложный вариант получается.... |
| Это таблица отобранная, может состоять из одного поля (ключ или RecNo для связи с базой), находится в mem:, открыта сразу монопольно - твой тсб единственный пользователь, многое упрощается. Это общий случай для всех отборов (типа команда select) ведения, отчетов, ....
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2010
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.09.18 14:30. Заголовок: PS Можешь иметь на н..
PS Можешь иметь на нее тэг с FOR ! deleted(), тогда удаленные будут исчезать при set deleted on, OrdKeyNo(), OrdKeyCount() будут ok
|
|
|
Haz
|
| |
Пост N: 1309
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.09.18 14:45. Заголовок: SergKis пишет: Дела..
SergKis пишет: цитата: | Делай команду выборки в др. таблицу ( COPY TO ..., APPEND FROM ... FOR ! deleted ) |
| Сергей, привет! В сети будет сюрприз. Если коллега удалит или вставит запись , то RDD это отработает при скроле по таблице и запись либо появится, либо исчезнет, а вот нумерация слетит т.к. Refresh() не вызывался и временная таблица не пересчитана
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2011
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.09.18 15:04. Заголовок: Игорь, привет ! Сюрп..
Игорь, привет ! Сюрприза не будет, т.к. работаем (тсб) совсем с др. таблицей с конкретным числом записей. Под командами copy to ..., append from ... понимаю условное обозначение выборки с уст. scope, filter (это скорее do while ...) На время работы их, если это под тсб, блокируем тсб :lEnable := .T., потом :Reset(), :Display() ... Таблица для тсб может иметь поля для индексов, тогда делаем сначала reindex. То что в базе запись удалена, а у нас нет - будет пустая запись на экране новой не будет совсем, но это временно до след. нажатия refresh, допустимое время появления данных на сервере оно субъективно, но существует
|
|
|
Haz
|
| |
Пост N: 1310
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.09.18 15:10. Заголовок: SergKis пишет: Сюрп..
SergKis пишет: проще индекс держать с !Deleterd() и дергать номер ключа. Но легкий путь , не наш метод
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2012
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.09.18 15:14. Заголовок: PS Для тсб (человека..
PS Для тсб (человека) вполне может не важны те добавления\удаления в данный момент он свое крыжит для важных выборок делаем locktable на время выборки и "чудес" не будет
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|