In the cycle DO WHILE to open a database in the DCBROWSE
Posted: Sun Nov 25, 2012 8:43 am
As in the cycle DO WHILE:
- to open a database in the DCBROWSE window for viewing;
- then it to correct by means of the program (not manually) on the basis of the parameters which have been set manually;
- then again to look through the changed database.
Repeated viewing is best of all for carrying out in the same window but if it is inconvenient, it is possible to close an old window at the end of a cycle, and at the beginning experience to open.
I in attempt of repeated viewing have an error of execution: XBP-object has wrong state for access


- to open a database in the DCBROWSE window for viewing;
- then it to correct by means of the program (not manually) on the basis of the parameters which have been set manually;
- then again to look through the changed database.
Repeated viewing is best of all for carrying out in the same window but if it is inconvenient, it is possible to close an old window at the end of a cycle, and at the beginning experience to open.
I in attempt of repeated viewing have an error of execution: XBP-object has wrong state for access


Code: Select all
// Управление перерасчетом *********************************************************************
@10, 0 DCGROUP oGroup6 CAPTION 'Задайте СУММАРНОЕ количество градаций в шкалах:' SIZE 70,3.5
PRIVATE lProcessing := .T., oStatusW, oBrowse
n=0
DO WHILE .T.
IF K_N_KlSh > 0 && Кол-во числовых классификационных шкал
@ 0, 2 DCSAY "В классификационных шкалах:" PARENT oGroup6;@0,mPosGet DCSAY "" GET N_SKGrKl PARENT oGroup6 PICTURE "#####"
ENDIF
IF K_N_OpSh > 0 && Кол-во числовых описательных шкал
@ 1, 2 DCSAY "В описательных шкалах:" PARENT oGroup6;@1,mPosGet DCSAY "" GET N_SKGrPr PARENT oGroup6 PICTURE "#####"
ENDIF
* N_SKGrKl = IF(N_SKGrKl <= 4000, N_SKGrKl, 4000)
* N_SKGrPr = IF(N_SKGrPr <= 4000, N_SKGrPr, 4000)
* 0 - выход из цикла задания размерности модели
K_N_GrKlSh = N_SKGrKl - K_C_GrKlSh
K_N_GrOpSh = N_SKGrPr - K_C_GrOpSh
********** Если нет шкал, то нет и градаций:
K_N_GrKlSh = IF(K_N_KlSh=0,0,K_N_GrKlSh)
K_N_GrOpSh = IF(K_N_OpSh=0,0,K_N_GrOpSh)
K_C_GrKlSh = IF(K_C_KlSh=0,0,K_C_GrKlSh)
K_C_GrOpSh = IF(K_C_OpSh=0,0,K_C_GrOpSh)
* СУММАРНОЕ КОЛИЧЕСТВО ШКАЛ И ГРАДАЦИЙ СИМ(кл/пр):####### x #######"
* ╔═══════════╦═════════════════════════╦═════════════════════════╗"
* ║ ║ Классификационные ║ Описательные ║"
* ║ ╟────────┬────────┬───────╫────────┬────────┬───────╢"
* ║ ║ Шкалы │Градации│ Гр/шк ║ Шкалы │Градации│ Гр/шк ║"
* ╠═══════════╬════════╪════════╪═══════╬════════╪════════╪═══════╣"
* 1 ║ Числовые ║ 2 │ 3 │ 4 ║ 5 │ 6 │ 7 ║"
* ╟───────────╫────────┼────────┼───────╫────────┼────────┼───────╢"
* 2 ║ Текстовые ║ 2 │ 3 │ 4 ║ 5 │ 6 │ 7 ║"
* ╠═══════════╬════════╪════════╪═══════╬════════╪════════╪═══════╣"
* 3 ║ ВСЕГО: ║ 2 │ 3 │ 4 ║ 5 │ 6 │ 7 ║"
* ╚═══════════╩════════╧════════╧═══════╩════════╧════════╧═══════╝"
CLOSE ALL
USE ScaleALL EXCLUSIVE NEW
SELECT ScaleALL
DBGOTOP()
// Классификационные шкалы
DBGOTO(1);FIELDPUT( 2, K_N_KlSh ) // Кол-во числовых классификационных шкал
DBGOTO(2);FIELDPUT( 2, K_C_KlSh ) // Кол-во текстовых классификационных шкал
DBGOTO(3);FIELDPUT( 2, K_N_KlSh+K_C_KlSh ) // Суммарное кол-во классификационных шкал
DBGOTO(1);FIELDPUT( 3, K_N_GrKlSh ) // Суммарное кол-во градаций числовых клас.шкал
DBGOTO(2);FIELDPUT( 3, K_C_GrKlSh ) // Суммарное кол-во градаций текстовых клас.шкал
DBGOTO(3);FIELDPUT( 3, K_N_GrKlSh+K_C_GrKlSh ) // Суммарное кол-во градаций числ.и текст.клас.шкал
DBGOTO(1);FIELDPUT( 4, INT(K_N_GrKlSh/K_N_KlSh) ) // Среднее кол-во градаций в числовых классификационных шкалах
DBGOTO(2);FIELDPUT( 4, INT(K_C_GrKlSh/K_C_KlSh) ) // Среднее кол-во градаций в текстовых классификационных шкалах
Mv = INT((K_N_GrKlSh+K_C_GrKlSh)/(K_N_KlSh+K_C_KlSh))
DBGOTO(3);FIELDPUT( 4, Mv ) // Среднее кол-во градаций в числ.и текст.клас.шкалах
// Описательные шкалы
DBGOTO(1);FIELDPUT( 5, K_N_OpSh ) // Кол-во числовых описательных шкал
DBGOTO(2);FIELDPUT( 5, K_C_OpSh ) // Кол-во текстовых описательных шкал
DBGOTO(3);FIELDPUT( 5, K_N_OpSh+K_C_OpSh ) // Суммарное кол-во описательных шкал
DBGOTO(1);FIELDPUT( 6, K_N_GrOpSh ) // Суммарное кол-во градаций числовых клас.шкал
DBGOTO(2);FIELDPUT( 6, K_C_GrOpSh ) // Суммарное кол-во градаций текстовых клас.шкал
DBGOTO(3);FIELDPUT( 6, K_N_GrOpSh+K_C_GrOpSh ) // Суммарное кол-во градаций числ.и текст.опис.шкал
DBGOTO(1);FIELDPUT( 7, INT(K_N_GrOpSh/K_N_OpSh) ) // Среднее кол-во градаций в числовых описательных шкалах
DBGOTO(2);FIELDPUT( 7, INT(K_C_GrOpSh/K_C_OpSh) ) // Среднее кол-во градаций в текстовых описательных шкалах
Mv = INT((K_N_GrOpSh+K_C_GrOpSh)/(K_N_OpSh+K_C_OpSh))
DBGOTO(3);FIELDPUT( 7, Mv ) // Среднее кол-во градаций в числ.и текст.опис.шкалах
Flag_err = .F.
IF K_N_KlSh > 0 .AND. K_N_GrKlSh <= 0 .OR.;
K_C_KlSh > 0 .AND. K_C_GrKlSh <= 0
M_Exit = 1
Flag_err = .T.
* Mess3 = "Задайте больше классификационных шкал !!!"
* @24,40-LEN(Mess3)/2 DCSAY Mess3
* INKEY(0)
ENDIF
IF K_N_OpSh > 0 .AND. K_N_GrOpSh <= 0 .OR.;
K_C_OpSh > 0 .AND. K_C_GrOpSh <= 0
M_Exit = 1
Flag_err = .T.
* Mess3 = "Задайте больше описательных шкал !!!"
* @24,40-LEN(Mess3)/2 DCSAY Mess3 COLOR "w+/rb"
* INKEY(0)
ENDIF
** K_N_KlSh // Кол-во числовых классификационных шкал
** K_C_KlSh // Кол-во текстовых классификационных шкал
IF K_N_KlSh + K_C_KlSh <= 0
M_Exit = 1
Flag_err = .T.
Mess3 = "Нет классификационных шкал!!! Для продолжения нажмите какую-нибудь клавишу"
ENDIF
** K_N_OpSh // Кол-во числовых описательных шкал
** K_C_OpSh // Кол-во текстовых описательных шкал
IF K_N_OpSh + K_C_OpSh <= 0
M_Exit = 1
Flag_err = .T.
Mess3 = "Нет описательных шкал!!! Для продолжения нажмите какую-нибудь клавишу"
ENDIF
** K_N_GrKlSh // Суммарное кол-во градаций числовых классификационных шкал
** K_C_GrKlSh // Суммарное кол-во градаций текстовых классификационных шкал
IF K_N_GrKlSh + K_C_GrKlSh <= 0
M_Exit = 1
Flag_err = .T.
Mess3 = "Нет градаций классификационных шкал!!! Для продолжения нажмите клавишу"
ENDIF
** K_N_GrOpSh // Суммарное кол-во градаций числовых описательных шкал
** K_C_GrOpSh // Суммарное кол-во градаций текстовых описательных шкал
IF K_N_GrOpSh + K_C_GrOpSh <= 0
M_Exit = 1
Flag_err = .T.
Mess3 = "Нет градаций описательных шкал!!! Для продолжения нажмите какую-нибудь клавишу"
ENDIF
/* ----- Create browse ----- */
* СУММАРНОЕ КОЛИЧЕСТВО ШКАЛ И ГРАДАЦИЙ СИМ(кл/пр):####### x #######"
* ╔═══════════╦═════════════════════════╦═════════════════════════╗"
* ║ ║ Классификационные ║ Описательные ║"
* ║ ╟────────┬────────┬───────╫────────┬────────┬───────╢"
* ║ ║ Шкалы │Градации│ Гр/шк ║ Шкалы │Градации│ Гр/шк ║"
* ╠═══════════╬════════╪════════╪═══════╬════════╪════════╪═══════╣"
* 1 ║ Числовые ║ 2 │ 3 │ 4 ║ 5 │ 6 │ 7 ║"
* ╟───────────╫────────┼────────┼───────╫────────┼────────┼───────╢"
* 2 ║ Текстовые ║ 2 │ 3 │ 4 ║ 5 │ 6 │ 7 ║"
* ╠═══════════╬════════╪════════╪═══════╬════════╪════════╪═══════╣"
* 3 ║ ВСЕГО: ║ 2 │ 3 │ 4 ║ 5 │ 6 │ 7 ║"
* ╚═══════════╩════════╧════════╧═══════╩════════╧════════╧═══════╝"
* aStructure := { { "Data_Type" , "C", 9, 0 }, ;
* { "Cl_Scale" , "N", 7, 0 }, ;
* { "GrCl_Scal" , "N", 7, 0 }, ;
* { "Gr_ClSc" , "N", 7, 2 }, ;
* { "Op_Scale" , "N", 7, 0 }, ;
* { "GrOp_Scal" , "N", 7, 0 }, ;
* { "Gr_OpSc" , "N", 7, 2 } }
// Кнопки задать здесь *******************************************************************
PushName1 = 'Повторить задание параметров'
PushName2 = 'Выйти на создание модели'
@ 14,0 DCPUSHBUTTON CAPTION PushName1 SIZE LEN(PushName1), 1.5 ;
ACTION {||lProcessing := .T., DC_ReadGuiEvent( DCGUI_EXIT_OK, GetList ) }
@ 14,LEN(PushName1)+2 DCPUSHBUTTON CAPTION PushName2 SIZE LEN(PushName2), 1.5 ;
ACTION {||lProcessing := .F., DC_ReadGuiEvent( DCGUI_EXIT_OK, GetList ) }
IF K_N_KlSh + K_N_OpSh > 0
@0,0 DCSAY "ЗАДАНИЕ В ДИАЛОГЕ РАЗМЕРНОСТИ МОДЕЛИ"
ELSE
@0,0 DCSAY "ИНФОРМАЦИЯ О РАЗМЕРНОСТИ МОДЕЛИ"
ENDIF
// Отобразить тип шкал: класс.или опис. и размерность модели
DBGOTOP()
@2, 0 DCBROWSE oBrowse ALIAS 'ScaleALL' SIZE 70,7.1 ;
PRESENTATION DC_BrowPres() ; // Только просмотр БД
HEADLINES 4 ; // Кол-во строк в заголовке
NOHSCROLL NOVSCROLL // Убрать горизонтальную и вертикальную полосы прокрутки
DCBROWSECOL FIELD ScaleALL->Data_Type HEADER "Тип шкалы" PARENT oBrowse WIDTH 7
DCBROWSECOL FIELD ScaleALL->Cl_Scale HEADER "Кол-во;класс.;шкал" PARENT oBrowse WIDTH 5
DCBROWSECOL FIELD ScaleALL->GrCl_Scal HEADER "Кол-во;градаций;класс.;шкал" PARENT oBrowse WIDTH 5
DCBROWSECOL FIELD ScaleALL->Gr_ClSc HEADER "Средн.;кол-во;градаций;на шкалу" PARENT oBrowse WIDTH 5
DCBROWSECOL FIELD ScaleALL->Op_Scale HEADER "Кол-во;опис.;шкал" PARENT oBrowse WIDTH 5
DCBROWSECOL FIELD ScaleALL->GrOp_Scal HEADER "Кол-во;градаций;опис.;шкал" PARENT oBrowse WIDTH 5
DCBROWSECOL FIELD ScaleALL->Gr_OpSc HEADER "Средн.;кол-во;градаций;на шкалу" PARENT oBrowse WIDTH 5
DCGETOPTIONS TABSTOP
DCREAD GUI ;
MODAL ;
FIT ;
TITLE '2.3.2.2. Задание размерности модели системы "ЭЙДОС-X++"'
IF lProcessing = .F.
EXIT
ENDIF
CLOSE ALL
* oBrowse:destroy()
// Файл с информацией о заданых параметрах программного интерфейса в папке приложения
PRIVATE aSoftInt[14]
aSoftInt[ 1] = Regim
aSoftInt[ 2] = Flag_zer
aSoftInt[ 3] = M_KlSh1
aSoftInt[ 4] = M_KlSh2
aSoftInt[ 5] = M_OpSh1
aSoftInt[ 6] = M_OpSh2
aSoftInt[ 7] = N_SKGrKl
aSoftInt[ 8] = N_SKGrPr
aSoftInt[ 9] = K_N_KlSh
aSoftInt[10] = K_N_OpSh
aSoftInt[11] = K_N_GrKlSh
aSoftInt[12] = K_N_GrOpSh
aSoftInt[13] = M_ObAnk
aSoftInt[14] = N_Chast
DC_ASave(aSoftInt , Disk_dir+"\_2_3_2_2.arx")
ENDDO
Code: Select all
FUNCTION Main()
LOCAL GetList[0], lProcessing := .T., oStatus, nCount := 1
DO WHILE .T.
@ 0,0 DCSAY "Current value of a variable="+ALLTRIM(STR(nCount++,15))
@ 1,0 DCSAY "Set new value of a variable: " GET nCount PICTURE "######"
// Here to insert database viewing <=====================
@ 3,0 DCPUSHBUTTON CAPTION 'Start Process' SIZE 20,1.5 ;
ACTION {||lProcessing := .T., DC_ReadGuiEvent( DCGUI_EXIT_OK, GetList ) }
@ 5,0 DCPUSHBUTTON CAPTION 'End Process' SIZE 20,1.5 ;
ACTION {||lProcessing := .F., DC_ReadGuiEvent( DCGUI_EXIT_OK, GetList ) }
DCREAD GUI FIT TITLE 'Processing Test'
IF lProcessing = .F.
EXIT
ENDIF
ENDDO
MsgBox("Final value of a variable="+ALLTRIM(STR(nCount,15)))
RETURN nil