2017-10-31 10 views
0

다음 코드 블록을 실행하면 오류 138이 발생하고 실제로 작성에 실패합니다. 어떤 도움을 주시면 감사하겠습니다.찾기를 수행하고 찾을 때마다 오류 138이 발생하는 이유는 무엇입니까?

FIND PSESCDel EXCLUSIVE-LOCK 
      WHERE PSESCDel.EmployeeCode = PSESC.EmployeeCode 
       AND PSESCDel.ServiceCoverRef = PSESC.ServiceCoverRef NO-ERROR. 


     IF NOT AVAILABLE PSESCDel THEN 
     DO: 
      IF PSESC.EmployeeCode = "0358" THEN 
        MESSAGE "RM NOT AV" PSESC.ServiceCoverRef. 

      CREATE PSESCDel. 
      ASSIGN PSESCDel.EmployeeCode = PSESC.EmployeeCode 
        PSESCDel.ServiceCoverRef = PSESC.ServiceCoverRef 
        PSESCDel.DeletedDate  = TODAY. 

      IF PSESC.EmployeeCode = "0350" THEN 
      DO: 
        MESSAGE "RM IT CAME TO CREATE". 
        IF ERROR-STATUS:ERROR OR ERROR-STATUS:NUM-MESSAGES > 0 THEN DO: 
          MESSAGE "RM ERROR NUMBER" STRING(ERROR-STATUS:GET-NUMBER(1)). 
          MESSAGE "RM ERROR MESSAGE" ERROR-STATUS:GET-MESSAGE(1). 
        END. 
      END. 



     END. 
+0

이것은 해결책이 아니지만 트랜잭션 범위 지정은 잠재적으로 문제가 될 수 있습니다. 독점 검색은 트랜잭션 블록을 시작합니다. 레코드를 업데이트하지 않으므로 코드 스 니펫에서 무의미한 트랜잭션 블록이 시작됩니다. 나중에 잘 할 수도 있지만 여전히 나쁜 습관입니다. 최상위 레벨 찾기는 잠금이 없어야합니다. 나중에 레코드를 갱신하려면 강하게 범위가 지정된 트랜잭션 블록 내부의 명명 된 버퍼에서 레코드를 찾으십시오. (v 퍼 이름 트랜잭션의 경우). 생성은 명명 된 버퍼와 강력한 범위의 트랜잭션 블록에도 있어야합니다. 당신은 트랜스 블록에 화면 메시지를 갖고 싶지 않습니다. – jdpjamesp

+0

해당 테이블에서 작성 트리거를 점검하십시오. 사용할 수없는 일부 레코드를 참조 할 수 있습니다. – bupereira

답변

1

오류 (138)의 설명입니다 : "당신이 찾고 있던 기록이 존재하지 않거나 WHERE,의, 및 사용 어구의 당신의 조합에 의해 주어진 선택을 전달할 수 없습니다." 데이터베이스에 FIND 문에있는 EmployeeCode 및 ServiceCoverRef와 일치하는 레코드가 없습니다.

코드 스니 j의 맨 아래에있는 "RM ERROR NUMBER"메시지에서이를 볼 수 있습니다. Progress가 생성하는 오류는 FIND 문의 NO-ERROR 구에 의해 표시되지 않습니다. PSESC 레코드에서이 두 값을 표시하고 예상 한 값인지 확인하십시오.