Page 1 of 1

In the cycle DO WHILE to open a database in the DCBROWSE

Posted: Sun Nov 25, 2012 8:43 am
by Eugene Lutsenko
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

Image

Image

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

Re: In the cycle DO WHILE to open a database in the DCBROWSE

Posted: Sun Nov 25, 2012 9:56 am
by rdonnay
Using DC* commands and DCREAD GUI in a loop has its caveats.

If you assign any object to a variable name you must set it's value to a NIL at the end of the loop.

After the DCREAD GUI add this line of code:

oBrowse := nil

Re: In the cycle DO WHILE to open a database in the DCBROWSE

Posted: Sun Nov 25, 2012 10:20 am
by Eugene Lutsenko
I added it at the end of a cycle, but the situation didn't change

Re: In the cycle DO WHILE to open a database in the DCBROWSE

Posted: Sun Nov 25, 2012 11:46 am
by rdonnay
If you can send me some code that I can compile and run, I will help you with this.

Re: In the cycle DO WHILE to open a database in the DCBROWSE

Posted: Sun Nov 25, 2012 12:10 pm
by Eugene Lutsenko
Thanks. I will try to prepare

Re: In the cycle DO WHILE to open a database in the DCBROWSE

Posted: Sun Nov 25, 2012 11:53 pm
by Eugene Lutsenko
rdonnay wrote:If you can send me some code that I can compile and run, I will help you with this.
And it is possible to send to you all system with all databases, and that is labor-consuming to allocate from it one mode?

Re: In the cycle DO WHILE to open a database in the DCBROWSE

Posted: Mon Nov 26, 2012 7:59 am
by rdonnay
Wait on that.

I just looked at your posted code again and see another variable that you need to set to NIL.

oGroup6.

Have you NILed out ALL variables that pointed to objects?

Re: In the cycle DO WHILE to open a database in the DCBROWSE

Posted: Mon Nov 26, 2012 9:01 am
by Eugene Lutsenko
I had a similar thought, but into oGroup6 account I something didn't think. I looked for variables with oBrowse type functions. Yes, in this place of the program difficult organized dialogue is used and there are many similar oGroup6 of variables: from oGroup1 to oGroup6. But in a cycle only oGroup6. I will try to make, as you advise.

Re: In the cycle DO WHILE to open a database in the DCBROWSE

Posted: Mon Nov 26, 2012 9:11 am
by Eugene Lutsenko
Added oGroup6: = nil and earned at once everything how was conceived. Thanks a lot! Other variables didn't begin to dump in NIL, thought: whether I will look play a role the variables defined out of a cycle or only in a cycle. True there was the second.