Форум » GUI » TsBrowse в Минигуи (продолжение) » Ответить

TsBrowse в Минигуи (продолжение)

Vlad04: TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру [quote] 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 [/quote] Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

SergKis: Andrey пишет 2) Как сделать заново полное считывание базы для этой программы ? можно обойтись без удаления объекта, а просто заново считать базу в готовый объект ? Сие есть тайна для меня, т.к. не понимаю о чем речь. В тсб просмотре только 1 - :nRowCount() строк

Andrey: SergKis пишет: Сие есть тайна для меня, т.к. не понимаю о чем речь. Базу открывать по сети SHARED. Открываем БЕЗ индексов. Первый юзер открыл базу - допустим 10 записей в ней. Другой добавил ещё пару записей и что-то откорректировал. Вот по кнопке Refresh хочу перечитать заново базу и получить все записи для 1-го юзера. У себя в задаче у меня есть такая кнопка, но там у меня условный индекс, рисуется всё автоматом.

SergKis: Andrey :DrawLine(...), :DrawSelect(...) рисуют строку из буфера записи, так что, если 2-ая прога делает commit, то твоя при перемещении по базе должна показать изменения или по кнопке :Refresh(.T.)\Display(). Пробуй


Andrey: SergKis пишет: или по кнопке :Refresh(.T.)\Display(). Пробуй Блин, так просто... Не догадался сразу. Заработало !

Andrey: Базу открывать по сети SHARED. Открываем БЕЗ индексов. А как сделать пересчёт в 1-ом столбце, который я создаю сам ?[pre2] ADD COLUMN TO TBROWSE oBrw DATA {|| 0 } ; //oBrw:nAt } ; HEADER CRLF + "NN" SIZE 40 ; COLORS {CLR_BLACK, WHITE} ALIGN DT_CENTER ; NAME NN [/pre2] Так как индексов нет, то перестройку нумерации нежно только при вставки/удалении записи. Добавил в эти функции - пересчёт ItogoNN( oBrw ) Вот сама функция: [pre2]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[/pre2] Но нет вообще пересчёта. Почему ? Проект положил на fpt и - https://cloud.mail.ru/public/KRRJ/2WvDwnz2a

Haz: Andrey пишет: Но нет вообще пересчёта. Почему ? А чего ты ожидаешь от этого ? Andrey пишет: DATA {|| 0 } PS и не надо портить хороший пример

SergKis: Andrey А что ты считаешь таким "хитрым" способом ?

Andrey: SergKis пишет: А что ты считаешь таким "хитрым" способ Ставил [pre2]ADD COLUMN TO TBROWSE oBrw DATA {|| oBrw:nAt } ;[/pre2] Первый раз показывает правильно. После удаления/вставки или колёсиком покрутить нумерация слетает.... Может и неправильно так делать, тогда подскажите как ? База открывается без индексов ! Можно было бы через массив, там вроде проще, но нужна база. Haz пишет: PS и не надо портить хороший пример Я его до рабочей таблицы довожу. Как в жизни юзера требуют.

SergKis: Andrey Тебе что пишешь, что не пишешь - результат один .... Если ON и без индекса, то сам управляй переменной :nLen, т.е. уст. блок :bLogicLen для "правильного" счета записей в просмотре. плюс свой skipper нужен, может еще что понадобится. А для NN колонки пиши ADD COLUMN TO TBROWSE oBrw DATA {|| (oBrw:cAlias)->( OrdKeyNo() ) } ; но без индекса с SET DELETED ON хз что будет

SergKis: в работе тсб. не ту кнопку нажал, сори.

SergKis: Andrey пишет Я его до рабочей таблицы довожу. Как в жизни юзера требуют. Делай команду выборки в др. таблицу ( COPY TO ..., APPEND FROM ... FOR ! deleted ) Поля бери только ключ для связки или recno + поля по которым построить рабочие индексы для тек. просмотра, если надо. Таблица будет "узкая" и быстрая. Связываешь с основной базой и работаешь SET DELETED OFF, отображая удаленные цветом (вдруг передумают удалять). Все модификации переносишь на основную базу. По refresh можешь сделать ZAP и снова APPEND FROM ... или новый COPY TO ... с переоткрытием.

Andrey: SergKis пишет: ADD COLUMN TO TBROWSE oBrw DATA {|| (oBrw:cAlias)->( OrdKeyNo() ) } ; но без индекса с SET DELETED ON хз что будет Ставил и так, только индекса нет и высвечивается RECNO() Из-за этого и подумал, что можно первую колонку сделать "виртуальной" и нумерацию туда самому переписывать при вставке/добавлении записи. Удалённые записи не нужны, юзер просит только рабочие записи. SergKis пишет: По refresh можешь сделать ZAP и снова APPEND FROM ... или новый COPY TO ... с переоткрытием. Нужно тогда закрывать базу, открывать её монопольно и т.д. Более сложный вариант получается....

Haz: Andrey пишет: Может и неправильно так делать, тогда подскажите как Правильно по индексу. Для таблицы которая целиком на экране , сойдет и ADD COLUMN TO TBROWSE oBrw DATA {|| oBrw:nPaintRow }

Haz: в SHARED и по сети оптимально только индекс. Неоптимально - написать что то типа [pre2] ADD COLUMN TO TBROWSE oBrw DATA {|| GetNum( oBrw ) } [/pre2] где GetNum() [pre2] 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 [/pre2] НО это костыль по сравнению с индексом

SergKis: Andrey пишет Нужно тогда закрывать базу, открывать её монопольно и т.д. Более сложный вариант получается.... Это таблица отобранная, может состоять из одного поля (ключ или RecNo для связи с базой), находится в mem:, открыта сразу монопольно - твой тсб единственный пользователь, многое упрощается. Это общий случай для всех отборов (типа команда select) ведения, отчетов, ....

SergKis: PS Можешь иметь на нее тэг с FOR ! deleted(), тогда удаленные будут исчезать при set deleted on, OrdKeyNo(), OrdKeyCount() будут ok

Haz: SergKis пишет: Делай команду выборки в др. таблицу ( COPY TO ..., APPEND FROM ... FOR ! deleted ) Сергей, привет! В сети будет сюрприз. Если коллега удалит или вставит запись , то RDD это отработает при скроле по таблице и запись либо появится, либо исчезнет, а вот нумерация слетит т.к. Refresh() не вызывался и временная таблица не пересчитана

SergKis: Игорь, привет ! Сюрприза не будет, т.к. работаем (тсб) совсем с др. таблицей с конкретным числом записей. Под командами copy to ..., append from ... понимаю условное обозначение выборки с уст. scope, filter (это скорее do while ...) На время работы их, если это под тсб, блокируем тсб :lEnable := .T., потом :Reset(), :Display() ... Таблица для тсб может иметь поля для индексов, тогда делаем сначала reindex. То что в базе запись удалена, а у нас нет - будет пустая запись на экране новой не будет совсем, но это временно до след. нажатия refresh, допустимое время появления данных на сервере оно субъективно, но существует

Haz: SergKis пишет: Сюрприза не будет проще индекс держать с !Deleterd() и дергать номер ключа. Но легкий путь , не наш метод

SergKis: PS Для тсб (человека) вполне может не важны те добавления\удаления в данный момент он свое крыжит для важных выборок делаем locktable на время выборки и "чудес" не будет



полная версия страницы