Сравнение двух незавершенных полей 4GL

У меня есть буфер bufCustomer для таблицы Customer, глобальный буфер gbufOrder для таблицы Order. Но этот код не работает. Я написал код вроде find bufCustomer, где bufCustomer.CustomerID = gbufOrder.CustomerID no-lock no-error. но если я проверю данные таблицы, данные там, но если я написал код, подобный приведенному выше, он не работает. Есть ли другой способ получить значения?


person user1204240    schedule 03.10.2012    source источник
comment
Вам нужно показать свой реальный код. Описание слишком расплывчато, чтобы делать какие-либо выводы.   -  person Tom Bascom    schedule 03.10.2012
comment
определить буфер bufCustomer для клиента. найдите bufCustomer, где bufCustomer.CustomerID = gbufOrder.CustomerID no-lock no-error   -  person user1204240    schedule 09.10.2012
comment
Я хочу получить имя клиента, поэтому я написал это, которое частично работает, т.е. получение имени клиента для некоторых записей, но я хочу получить имя клиента для всех записей. Пожалуйста, помогите.   -  person user1204240    schedule 09.10.2012
comment
попробуйте запустить свой сценарий без опции NO-ERROR в операторе FIND. тогда вы должны получить сообщение об ошибке, которое объяснит вам, что не так ...   -  person firhang    schedule 09.10.2012
comment
Это отображается как bufCustomer record not found. Как получить значения?   -  person user1204240    schedule 09.10.2012


Ответы (1)


с БУФЕРОМ:

DEFINE BUFFER gbufOrder FOR Order.
DEFINE BUFFER bufCustomer FOR Customer.

FIND FIRST gbufOrder NO-LOCK NO-ERROR.
IF AVAILABLE(gbufOrder) THEN
   DO:
      FIND bufCustomer where bufCustomer.CustNum = gbufOrder.CustNum NO-LOCK NO-ERROR.

      IF AVAILABLE(bufCustomer) THEN
         DO:
            DISP bufCustomer.name.
         END.
      ELSE
         DO:
            MESSAGE "Customer is not available!"
               VIEW-AS ALERT-BOX ERROR BUTTONS OK.
         END.
   END.
ELSE
   DO:
      MESSAGE "Order is not available!"
          VIEW-AS ALERT-BOX ERROR BUTTONS OK.
   END. 

без БУФЕРА

FIND FIRST Order NO-LOCK NO-ERROR.
IF AVAILABLE(Order) THEN
   DO:
      FIND Customer where Customer.CustNum = Order.CustNum NO-LOCK NO-ERROR.

      IF AVAILABLE(Customer) THEN
         DO:
            DISP Customer.name.
         END.
      ELSE
         DO:
            MESSAGE "Customer is not available!"
               VIEW-AS ALERT-BOX ERROR BUTTONS OK.
         END.
   END.
ELSE
   DO:
      MESSAGE "Order is not available!"
          VIEW-AS ALERT-BOX ERROR BUTTONS OK.
   END.

Эта программа работает с sports200 образцовой базой данных (она находится в каталоге установки PROGRESS / OpenEdge)

ОБНОВИТЬ:

  • проверка доступности Заказчика
  • добавить образец кода без БУФЕРА
person ksimon    schedule 09.10.2012
comment
это еще не на 100% правильно. вам следует проверить доступность bufcustomer после НАЙТИ bufCustomer - как после первого НАЙТИ заказа. иначе вы получите некоторую ошибку, например, клиент недоступен. - person firhang; 10.10.2012