내 웹 사이트에서 응용 프로그램이 SiteContent라는 모듈을 시작하면 "만든"웹 사이트가 있습니다. 이는 이전에 실행 된 함수에서 임의의 데이터가 남아있는 경우 데이터베이스에서 관련이없는 데이터를 기본적으로 삭제하는 정리 기능을 실행합니다."임의로"발생하는 오류
이 모듈에는 Manager 클래스 (즉, RangeManager, CollectionManager, DesignManager)의 인스턴스가 있습니다. 다른 것들도 있지만 이것들을 예제로 사용하겠습니다. 각 Manager 클래스는 항목 배열을 포함합니다. 항목은 Range, Collection 또는 Design 유형 중 하나 여야합니다. 각 범위의 데이터는 Range, Collection 또는 Design의 인스턴스로 읽어들입니다. 이것은 기본적으로 데이터를 복제하는 것입니다. 매우 효율적이지는 않지만 그 순간의 마지막 프로젝트입니다. 그래서 한 달 기한까지 압력을받지 않을 때 언제든지 Linq 또는 유사한 것을 사용하도록 변경할 수 있습니다.
저장 단추를 클릭하면 SiteContent.RangeManager.Create (vars) 또는 SiteContent.RangeManager.Update (Range As Range, vars)를 호출하여 데이터를 저장하는 양식이 있습니다 (또는 다른 관리자 클래스, 우연히 관련이있는 것).
이 함수는 저장 프로 시저를 호출하여 관련 테이블에 삽입하거나 업데이트합니다.
클래스 범위, 컬렉션 및 디자인에는 모두 이름, 설명, 표시 및 기타 여러 속성이 있습니다. 만들기 또는 업데이트 기능이 호출되면 Manager는 다른 모든 항목을 반복하여 동일한 이름의 항목이 이미 있는지 확인합니다. 업데이트 기능은 업데이트되는 항목을 자체와 비교하지 않도록합니다. 같은 이름을 가진 다른 항목이 발견되면 사용자 정의 예외 (ItemAlreadyExistsException)가 발생합니다.
편집 모드에서 범위, 컬렉션 또는 디자인에 들어가서 무언가를 변경하고 업데이트하려고하면 가끔 항목을 업데이트하지 않습니다. 제가 가끔씩 말할 때마다 3 ~ 4 페이지마다로드가 발생하는 경우가 있습니다. 나는 그것이 언제 또는 왜 일어나는지를 전혀 볼 수 없다. 나는 ItemAlreadyExistsException을 잡는 try-catch 문을 가지고 있는데, 잡히면 "이 이름을 가진 항목이 이미있다"라고 출력한다. 때로는 이것을 출력합니다. 그렇지 않으면 그렇지 않을 것이다.
왜 이런 일이 일어날 지 아는 사람이 있습니까? 어쩌면 누군가가 만들어서 전에 풀었던 실수일까요?
이름을 비교 한 정규 표현식을 사용했습니다. 나는 [a-zA-Z] {1, 100} (대소 문자가 1에서 100 사이)라고 생각합니다. 어떤 이유로 인해 사이트를 개발중인 고객이 올바른 형식이 아닌 오류를 표시하는 데 익숙해졌습니다. 그러나 그는 5 분 후에 동일한 문구를 시도 할 수 있었고 괜찮았다. 두 문제가 무작위로 발생하기 때문에 이것이 동일한 문제 일 수 있다고 생각합니다.
미리 감사드립니다.
감사합니다,
리처드 클라크
편집 : 많은 시간이 코드를 축소 보낸 후, 나는 더 나는 것보다 최소 8 년 동안 프로그래머로 활동했으며 내 동생까지 기다리기로 결정했다 , 부활절을 내려 와서 그를 보게하십시오. 그가 그것을 해결할 수 없다면 나는 파일을 압축하여 사람들이 접근하고 갈 수있는 어딘가에 놓을 것입니다.
필자는 말 그대로 파일의 최소 수까지 좁혔지만 여전히 발생합니다. 약 10 번 째되는 것처럼 보입니다. 그런 말로하면 관리자 클래스가 매 10 페이지로드 또는 5 분 (어느 것이 든 더 빠른 시간)마다 새로 고쳐야합니다. 나는 이것을 들여다 볼 수도 있습니다. 이것은 문제를 일으킬 수 있습니다. 기본적으로 각 Manager에는 객체 배열이 포함되어 있습니다.이 배열은 데이터베이스의 데이터를 사용하여 채워집니다. 업데이트 함수는 항목의 인스턴스와 객체에 대해 설정할 새 값을 사용합니다. 배열이 재설정 된 페이지로드 (예 : 데이터가 데이터베이스에서 새로로드 됨) 일 경우 동일한 ID를 가진 객체 인스턴스가 전달되는 인스턴스와 다를 수 있습니다. 이제 ItemAlreadyExistsException을 던집니다. 내가 생각하는 것이 많을수록 지금은 모두 의미가 있습니다. 객체 자체가 아니라 객체의 ID를 전달하면 완벽하게 작동합니다. 나는 그것을 해결하면 질문에 답할 것입니다.
거의 불가능 코드를 보지 않고 진단 할 수 있습니다. 문제를 복제하는 가장 작은 양의 코드를 게시하십시오. – womp
동의합니까, 그리고 어떤 종류의 데이터베이스를 사용하고 있습니까? 테이블은 myisam, innodb 등으로 저장된다. 폼에서 method = "post"를 사용하고 method = "get"이 아닌지 ... 브라우저가 결과를 캐시하지 않도록 ... –
hmm thats 문제 - 그 모든 데이터베이스에 연결 및 절차와 모두 저장으로는 난 그냥 컬렉션을 편집하여 그것을 시도 .. 더 작게 만들기 위해 아마 시간이 걸릴 것이며, 그것은 항목이 이미 같은 이름을 가진 나에게 말했다. 이 예외가 Throw되는 CollectionManager에는 1 개 (살)의 장소가 존재 합니다만, 다른 콜렉션의 이름은 같은 것은 없습니다. 나는 Items 컬렉션에서 Collection으로 사용하고 String.Compare (__ Collection.Name, Collection.Name, True (IgnoreCase)) = 0이면 새로운 ItemExistsException()을 던집니다. 감사 리처드 – ClarkeyBoy