powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Маленький вопрос при большой буферизации...
8 сообщений из 8, страница 1 из 1
Маленький вопрос при большой буферизации...
    #33245152
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Всем, я впервые лоб в лоб столкнулся с вопросом буферизации (я дорос до сети), и все что касается этой темы - ссылки, материалы и т.д. меня поправило бы очень сильно...

И вопрос на засыпку: Я в приложении всем базам назначил поголовно буферизацию 5, теперь у меня задача в том что -на экране чрезмерно много объектов прямого редактирования Editbox, grid и много одновременно открытых БД причем все свободные таблицы - будьте любезны, подскажите как разруливать в подобных случаях, именно как подбирать момент сбрасывания буферов, как перехватывать информацию об наличиях изменений с целью сохранения изменений
...
Рейтинг: 0 / 0
Маленький вопрос при большой буферизации...
    #33245262
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос защиты Гос. безопасности а вы так не активно отвечаете :(.
Да, я все сообщения перечитал до дыр на эту тему в форуме и здесь уже тошно об этом говорить, но тем не менее поясню вопрос:

Куча открытых БД и море объектов редактирования групповых а также отдельных записей и все происходит на прямую - без кнопок изменить, сохранить и вся сложность в автоматизации без вмешательства оператора проследить В КАКОЙ БАЗЕ - КАКИЕ ЗАПИСИ ПОДЛЕЖАЛИ ИЗМЕНЕНИЮ И С КАКИМ ПЕРИОДОМ РЕКОМЕНДУЕТЕ СБРАСЫВАТЬ БУФЕР

Спасибо.
...
Рейтинг: 0 / 0
Маленький вопрос при большой буферизации...
    #33245346
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть функция GetNextModified() -- Возвращает номер первой(или следующей) измененной строки.
GETFLDSTATE() -- статус полей в строке.
OldVal() -- старое значение поля.

Сбрасывать буфер можно при переходе на другую строку (Grid1.BeforeRowColChange())

А вообще-то, я бы тебе посоветовал поставить кнопку "Сохранить" и "Отмена"
...
Рейтинг: 0 / 0
Маленький вопрос при большой буферизации...
    #33245420
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарствую Maltsev Max

Не сочти за наглость - за советом созревает вопрос. Если мне сделать примочку "изменить" то придется в ручную перечислять дюжину полей давая или прекращая к ним доступ - как скопом в одном из Page назначить всем допустим textedit- ам одно значение для общего свойства, название всех textedit-ов начинается с "о_"
...
Рейтинг: 0 / 0
Маленький вопрос при большой буферизации...
    #33245480
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For PeaceБлагодарствую Maltsev Max

Не сочти за наглость - за советом созревает вопрос. Если мне сделать примочку "изменить" то придется в ручную перечислять дюжину полей давая или прекращая к ним доступ - как скопом в одном из Page назначить всем допустим textedit- ам одно значение для общего свойства, название всех textedit-ов начинается с "о_"

А про циклы Вы что-нибудь слышали?
Вот и пишете, что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
*In the following example, five command buttons are placed on a form. FOR EACH is *used to display the buttons on the form and specify the captions, font styles and *positions of each button.

PUBLIC oMyObject
oMyObject = CREATEOBJECT("frmTest")
oMyObject.SHOW

DEFINE CLASS frmTest AS FORM
Height =  200 
DIMENSION MyArray[ 5 ]
   PROCEDURE Init

      FOR i =  1  to  5 
         THIS.AddObject('THIS.MyArray[i]',;
            'COMMANDBUTTON')
      ENDFOR      

      ****** FOR EACH - NEXT ******
      FOR EACH oButton IN THIS.MyArray
         oButton.Visible = .T.
      NEXT
      
      ****** FOR EACH - NEXT element  ******
      FOR EACH oButton IN THIS.MyArray
         oButton.FontBold = .T.
      NEXT obutton

      j =  1 
      ****** FOR EACH - ENDFOR ******
      FOR EACH oButton IN THIS.MyArray
         oButton.top = j *  30 
         j = j +  1 
      ENDFOR   
      

      ****** FOR EACH - ENDFOR element ******
      FOR EACH oButton IN THIS.MyArray
         oButton.FontItalic = .T.
      ENDFOR obutton
      
      j =  1 
      ****** EXIT  ******
      FOR EACH oButton IN THIS.MyArray
         oButton.Caption = "test" + str(j)
         j = j+ 1 
         IF j >  3  
            EXIT
         ENDIF
      NEXT
      
      j =  1 
      ****** LOOP  ******
      FOR EACH oButton IN THIS.MyArray
         IF j >  3 
            LOOP
         ENDIF
         j = j +  1 
         oButton.Left =  25 
      NEXT
   ENDPROC
ENDDEFINE
...
Рейтинг: 0 / 0
Маленький вопрос при большой буферизации...
    #33245556
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как все у Вас сложно...

Начать можно попроще - написать для каждой открытой таблицы (опять же через цикл) что-то типа:
Код: plaintext
do chbuf
где:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
 * check for all table
PROCEDURE chbuf
IF CURSORGETPROP("Buffering")= 5 
  LOCAL llOverwrite,llChanged, lnField,lcField, lnRec
  GO TOP
  lnRec=GETNEXTMODIFIED( 0 )
  DO WHILE lnRec<> 0 
    GOTO lnRec
    llCnanged=.F.
    llOverwrite=.F.
    FOR lnField= 1  TO FCOUNT()
      lcField=FIELD(lnField)
      IF CURVAL(lcField)<>OLDVAL(lcField)
        llCnanged=.T.
        EXIT
      ENDIF
    ENDFOR
    IF llCnanged
      lnResult=MESSAGEBOX("Somebody locked your table. What we have to do?", 4 ,"Try again")
      IF lnResult= 6 
        llOverwrite=.T.
      ENDIF
    ENDIF
    IF llCnanged AND NOT llOverwrite
      =TABLEREVERT()
    ELSE
      IF m.gltransact
        BEGIN TRANSACTION
        =TABLEUPDATE(.F.,.T.)
        END TRANSACTION
      ELSE
        =TABLEUPDATE(.F.,.T.)
      ENDIF
    ENDIF
    lnRec=GETNEXTMODIFIED(lnRec)
  ENDDO
ENDIF
RETURN

сложносьт начнутся с выработкой алгоритма - что делать, если запись которую изменил данный клиент была уже изменена кем-то (пока он посещал "госбезовскую столовую" если следовать оригиналу автора топика)
...
Рейтинг: 0 / 0
Маленький вопрос при большой буферизации...
    #33245560
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав C.

У меня объекты не программно вставлены а нарисованы.
И всю эта процедуру можно провернуть одной командой и без цикла - Я ЗНАЮ ЧТО МОЖНО А КАК- ПОКА НЕ ДОТУКАЛ
...
Рейтинг: 0 / 0
Маленький вопрос при большой буферизации...
    #33247018
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For PeaceНе сочти за наглость - за советом созревает вопрос. Если мне сделать примочку "изменить" то придется в ручную перечислять дюжину полей давая или прекращая к ним доступ - как скопом в одном из Page назначить всем допустим textedit- ам одно значение для общего свойства, название всех textedit-ов начинается с "о_"

У большинства объектов-контейнеров есть метод SetAll(). Т.е. изменить свойство ReadOnly у всех объектов на конкретной странице PageFrame можно примерно так:

Код: plaintext
ThisForm.PageFrame1.Page1.SetAll("ReadOnly",.T.)

В качестве 3 параметра метода SetAll() можно указать в каких классах (точнее, в каких объектах, созданных на базе указанного класса) следует производить эту замену. Например, для TextBox это будет так

Код: plaintext
ThisForm.PageFrame1.Page1.SetAll("ReadOnly",.T.,"TextBox")

Если необходима более "тонкая" настройка, типа: вот у этого объекта надо изменить, а вот у этого не надо. То тут требуется создание собственной бибиотеки базовых классов.

Например, создаешь собственный класс на базе TexBox и в нем создаешь пропертю MODE, а на свойство ReadOnly навешиваешь метод ASSIGN, в котором на основе значения свойства MODE разрешаешь или запрещаешь изменить свойство ReadOnly.

Далее кладешь экземпляр этого класса на форму и настриваешь соответствующим образом значение свойства MODE. В результате, SetAll() по ВСЕМ объектам формы изменит свойство ReadOnly только у тех объектов, у которых такое изменение разрешено.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Маленький вопрос при большой буферизации...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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