2013-07-11 2 views
1

제어와 함께 두 개의 데이터 블록이있는 양식이 있습니다. A는 단일 레코드 만 지원하고 B는 다중 레코드를 지원합니다. 를 삽입 할 때, 나는 적어도 하나의 기록을 확인하고 싶은 것은 내가하고 싶은 무엇 B.데이터 블록에 하나 이상의 레코드가 있는지 확인하십시오. (양식 10g)

에 삽입 될 것입니다 것은

go_block('B') 
if record_count = 0 then 
    message('Please enter in at least one b'); 
else 
    --Other validation stuff 
end if; 

그러나의 사전 삽입 트리거에 넣어하는 것입니다, 내 지식으로는 record_count와 같은 함수가 없습니다. 그렇다면 어떻게 그러한 기능을 복제 할 수 있을까요?

P. 나는 시도했다 ...

go_block('B') 
first_record 
if :system.last_record = 'TRUE' then 
    message('Please enter in at least one b'); 
else 
    --Other validation stuff 
end if; 

그리고 그것도 작동하지 않습니다.

편집 :

이 nightfox의 제안 당, 내가 양식의 키에 커밋 다음 절을했다. 나는 또한 그 변경 사항도 저장해야 있는지 확인으로 키 종료에 무슨 일이 있었는지 변경할 필요

if :B.Value_That_Is_Required is null then 
    message('Please enter in at least one b'); 
else 
    commit_form; 
end if; 

하지만, 기본적으로 같은 형식을 따랐다 :

commit_form; 

로 대체되었다.

답변

1

키 커밋 트리거를 덮어 써야합니다. 이 트리거에서 먼저 "B"블록으로 가서 레코드가 유효한지 확인하십시오. 예를 들어 B에 성명, 이름 및 생년월일이 포함되어 있고 이름이 필요한 경우 이름이 null이 아닌지 여부 만 확인하면됩니다. 레코드가 비어 있고 레코드가 입력되지 않은 경우, 이름이 null이 아닌 경우 레코드가 입력되고 항목에 유효성 검사 트리거를 작성한 경우 B 블록에 레코드가 하나 이상 있어야합니다. validate_record 트리거를 사용하면 레코드가 유효하다는 것을 이미 확신 할 수 있습니다. 이 순간에 키 커밋 트리거에서 commit_form을 수행 할 수 있습니다. 그렇지 않으면 메시지를 제공 할 수 있습니다. 당신은 또한 블록 A의 레코드가 없기 때문에 아무도, 블록 A의 기록을 삭제하지 않고 블록 B의 레코드를 삭제할 수 있습니다 경우

당신은 또한 확인해야 할 수있는 유일한 방법은

종류는

에 관하여
+0

그냥 go_block ('b'), first_record를 사용하고 필수 입력란을 확인합니까? – Lawtonfogle

+0

예.가는 길입니다. – nightfox79

관련 문제