2011-01-10 3 views
0

Access 데이터베이스 프런트 엔드가 있으며 현재 레코드를 삭제하기 위해 양식에 단추를 넣으려고합니다. 내가 기록을 삭제하려면 다음 VBA 코드를 사용 : 나는 형태로 데이터베이스에 삽입 기록에서이 작업을 실행하면레코드를 삭제하는 동안 2501 오류가 발생했습니다.

If Me.NewRecord Then 
    Me.Undo 
    Exit Sub 
End If 

DoCmd.RunCommand acCmdDeleteRecord 

Me.Requery 
Me.Refresh 

을, 그것은 DoCmd에 런타임 오류 '2501'를 반환합니다. 그러나 데이터베이스에 이미 있던 레코드에서 실행하면 코드가 의도 한대로 완료됩니다.

또한이 데이터베이스 테이블에 아직 액세스하지 않은 사람이 하나뿐이므로 열린 양식이 하나뿐입니다.

액세스 할 때 수동으로 연결된 테이블에서 삭제하려고하면 같은 오류가 발생하지만 SQL Server Management Studio를 사용하여 데이터베이스에서 해당 테이블을 삭제할 수있었습니다.

어떤 일이 발생합니까?

편집은 내가 조사를 좀 더했고, 나도 액세스를 사용하여 기본 테이블에 새로운 레코드를 편집 할 수없는 나는 것을 발견했다. 다른 사용자가 변경 한 레코드에 대해 오류가 발생합니다.

+0

고유 키가 있습니까? 링크를 삭제하고 다시 만들면 같은 문제가 발생합니까? – Fionnuala

+0

테이블은 좋은 기본 키로 완전히 정의됩니다. 테이블을 다시 연결하려고했지만 여전히 동일한 문제가 있습니다. – Rister

+0

테이블에 타임 스탬프 필드가 있습니까? –

답변

1

테이블에 타임 스탬프 필드가있는 것이 좋습니다 (SSMA 도우미가 Access에서 업 사이즈로 사용할 때 모든 테이블에이 테이블을 추가합니다. 분명히 권하고 싶습니다). 코드에 대한 비판이 있습니다. . 나는이 방법으로 이것을 쓸 것이다 :

새로 고침은 이미 최신 데이터를 가지고 있기 때문에 재 작성 후에 중복된다.

Exit Sub 사용은 상호 배타적이지 않은 항목의 보호 조항에 유용하지만이 경우 기존 레코드를 삭제하거나 새 레코드를 취소 할 수 있습니다. 하나의 If/Then/Else 블록 내에서 처리 할 수 ​​있으며 서브 루틴에 대한 단일 종료 점이 있습니다. 이는 나중에 코드가 복잡해질 경우에 매우 유용합니다.

+0

타임 스탬프를 추가하고 문제가 해결되었습니다. 이전에이 문제가 발생하지 않은 이유는 무엇입니까? – Rister

+0

Access/Jet/ACE 테이블을 SQL Server로 업 사이즈 한 동안 업 사이징에 대한 권장 사항의 일부였습니다. Jet/ACE는 업데이트 된 항목과없는 항목 (Null이있을 때 신뢰할 수없는 모든 필드를 비교하는 것만 큼)을 추적 할 수있는 유일한 방법이기 때문에 바운드 양식 때문에 필요합니다. –

관련 문제