, 새로운 오래된 기본 키 값 사이의 일관된 패턴이 보인다.
? "X" & Right("RS182", 3) & Left("RS182", 2)
X182RS
그렇다면 일련의 UPDATE 문을 사용하여 이전 값을 새 것으로 바꿉니다. 그러나 먼저 보관을 위해 데이터베이스의 백업 사본을 만드십시오. 예를 들어
, YourTable에 대한 기본 키 필드의 이름은 경우 ID :
UPDATE YourTable
Set ID = "X" & Right(ID, 3) & Left(ID, 2);
YourTable가 정의 된 관계에 포함되어있는 경우, 먼저 "강제 그 관계를 드롭 (또는 적어도 선택을 취소해야합니다 참조 무결성 "옵션), 기본 키 값을 갱신 한 후 관계를 복원하십시오.
또한 ID에서 기본 키 속성을 제거하면 UPDATE를 더 빨리 완료 할 수 있습니다. 이후에 기본 키를 다시 할당하십시오.
이 변환이 필요한 82 개의 테이블이 있으므로 VBA 프로 시저를 만들어이 작업을 수행 할 수 있습니다.
Public Sub ConvertPKeyValues(ByVal pTable As String, _
ByVal pField As String)
Dim db As DAO.Database
Dim strSql As String
strSql = "UPDATE [" & pTable & "]" & vbCrLf & _
"Set [" & pField & "] = 'X' & " & _
"Right([" & pField & "], 3) & " & _
"Left([" & pField & "], 2);"
Set db = CurrentDb
db.Execute strSql, dbFailOnError
Set db = Nothing
End Sub
각 테이블 이름과 해당 테이블의 관련 필드 이름과 함께 프로 시저를 호출하십시오. 또한 dbFailOnError가 노출하는 모든 문제에 대한 오류 처리기를 추가해야합니다.
SetWarnings off == 매우 나쁨! – HansUp
@HansUp : 전에는 생각 해보지 않았습니다. 그냥 봤는데 [this] (http://www.granite.ab.ca/access/bestpractices.htm)였습니다. 이것이 유일한 이유입니까 아니면 더 많은 것이 있습니까? –
나는 그 페이지에서 Tony가 말한 것에 강력히 동의한다. 나는 SetWarnings을 끄는 것이 단순히 정보를 억압하기 때문에 나쁜 것이라고 덧붙일 것이다. SetWarnings을 끄는 것이 효율적인 문제 해결에 큰 장애물이었던이 스택 오버플로 문제를 고려하십시오. http://stackoverflow.com/questions/7115247/does-ms-access-suppress-primary-key-violations-on-inserts – HansUp