2016-07-19 10 views
0

판매 주문 테이블 (sDetail)이 있습니다. 레코드에 대한 인덱스가 있습니다. 인덱스는 사실상 Order 참조와 STR (줄 번호)의 키가있는 후보 인덱스입니다. 이것은 특정 주문의 행을 검색하는 데 사용됩니다.VFP. 레코드 삭제 - 인덱싱 - 레코드 다시 만들기

sDetail 테이블에는 순차적 ID 인 기본 인덱스가 있습니다.

주문을 수정할 수 있습니다. 사용자가 주문 행을 삭제하면 해당 테이블에 삭제 된 것으로 기록됩니다. 처리 할 때 일반적으로 SET DELETED ON을 사용하여 실행되므로 사용자는 이러한 삭제 된 레코드를 볼 수 없습니다.

그러나 그는 회선을 다시 만들면 '색인의 고유성이 위반됩니다'라는 오류가 발생합니다. 이 기록은 실행 시간

또는에서 보이지 않도록 ')을 삭제 (FOR!'인덱스에 필터 식을 포함합니다 :

는 다음 중 하나를이 오류를 만들지 않도록하기 위해, 나는 두 가지 접근 방식을 볼 수 있습니다 때 나는 특정 라인에 대한 레코드 존재 여부를 테스트하고, SET DELETED OFF를 설정하고, 레코드의 존재 여부를 테스트하고, 필요하다면 RECALL한다. 그런 다음 SET DELETED ON으로 되돌립니다.

다른 개발자는 무엇을합니까? 아니면 더 좋은 방법이 있습니까?

고맙습니다.

+0

삭제 및 리콜이 마음에 들지 않습니다. ! dele()에 대한 색인은 일을 훨씬 더 진절머리 나게합니다. 나는 그것을 단지 후보 색인이 아닌 일반 색인으로 만들 것입니다. 일을 더 간단하게 유지합니다. – Missy

답변

1

돌에 새겨진 하나의 규칙이 없습니다. 리콜은 제가 사용하는 방법 중 하나입니다 (거의 리콜이 필요하지 않습니다). 나는 개인적으로 좋아하지 않는다! delete() 유형 인덱스 (만약 내가 사용한다면 비트 맵 인덱스로 생성한다).

세 번째 옵션은 이러한 색인을 "후보"로 만드는 것이 아닙니다. 당신이 말했듯이, 그 선은 유일한 지수는 후보 지수가 아니어야합니다.

+0

Cetin에게 감사드립니다. 예, 후보자가 아닌 색인을 만드는 옵션은 합리적인 것 같습니다. 필자는이 테이블에 기본 인덱스 (레코드 ID는 사용하지 않더라도)를 가지고 있기 때문에이 인덱스의 '후보자를 찾을 수 없음'을 알았습니다. 그리고 '독창성 위반'의 문제가 사라집니다. –