форма окна идет не отвечая стадии - PullRequest
1 голос
/ 10 апреля 2020

Я новичок в прогрессе 4GL. В своей программе я пытался создать форму, используя прогресс 4GL. Форма имеет два поля: одно - имя БД, другое - описание БД. Область действия этой формы по умолчанию должна содержать одно имя и описание БД, и если пользователь вводит или оставляет пустым поле «Имя БД», в окне предупреждения должно появиться сообщение. Я разработал форму, но когда я ее запускаю, программа продолжает работать постоянно, и форма окна перестает отвечать на запросы. У меня нет возможности ввести или оставить пустым имя поля БД. Позвольте мне поделиться своим кодом и, пожалуйста, помогите выяснить, в чем проблема и почему он работает постоянно.

define variable cArcDB      as character   no-undo format "x(20)" INIT "qadb".
define variable cArcDBDesc  as character   no-undo format "x(25)" INIT "archive database".
define variable cTmp  as character   NO-UNDO.

form
cArcDB     colon 25
cArcDBDesc colon 25
with frame frArchiveDB width 80 side-labels.

MAIN-LOOP:
REPEAT:

display
     cArcDB
     cArcDBDesc
  with frame frArchiveDB.

  set
     cArcDB
  with frame frArchiveDB editing:
     if frame-field = "cArcDB" then do:
        /* Find next/prev record from ttAppDB */
        cTmp = cArcDB:input-value in frame frArchiveDB.

           display
              cArcDB
              cArcDBDesc
           with frame frArchiveDB.
        end.
  end. /* editing */
  cArcDB = trim(cArcDB).

  if cArcDB = "" then do:
     /* Blank not allowed */
   /*  {us/bbi/pxmsg.i &MSGNUM=40 &ERRORLEVEL=3} */
     next-prompt cArcDB with frame frArchiveDB.
     undo MAIN-LOOP,retry MAIN-LOOP.
  end.
  END.

1 Ответ

2 голосов
/ 10 апреля 2020

Пожалуйста, ознакомьтесь с онлайн-ссылкой "Фраза для редактирования". Для меня это выглядит так, как будто вам не хватает READKEY после начала блока РЕДАКТИРОВАНИЯ, и вам также нужно «ПРИМЕНИТЬ LASTKEY» в какой-то момент. Смотрите образец там:

/* Update Customer fields, monitoring each keystroke during the UPDATE */
UPDATE Customer.Name Customer.Address Customer.City Customer.State SKIP
  Customer.SalesRep HELP "Use the space bar to select a SalesRep" 
  WITH 2 COLUMNS EDITING:  /* Read a keystroke */
  READKEY.
  /* If the cursor is in any field except SalesRep, execute the last key
     pressed and go on to the next iteration of this EDITING phrase to check
     the next key */
  IF FRAME-FIELD <> "SalesRep" THEN DO:
    APPLY LASTKEY.
    IF GO-PENDING THEN LEAVE.
    ELSE NEXT.
  END.
  /* When in the SalesRep field, if the last key pressed was the space bar
     then cycle through the sales reps */
  IF LASTKEY = KEYCODE(" ") THEN DO:
    FIND NEXT SalesRep NO-ERROR.
    IF NOT AVAILABLE SalesRep THEN FIND FIRST SalesRep.
    DISPLAY SalesRep.SalesRep @ Customer.SalesRep.
    NEXT.
  END.
  /* If the user presses any one of a set of keys while in the SalesRep field,
     immediately execute that key */
  IF LOOKUP(KEYFUNCTION(LASTKEY), 
    "TAB,BACK-TAB,GO,RETURN,END-ERROR") > 0 THEN APPLY LASTKEY.
  ELSE BELL.
END.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...