나는 Microsoft Access 2010으로 작성된 데이터베이스 응용 프로그램을 가지고 있습니다. 다른 것들 중에서도 두 개의 관련 테이블이 있습니다. "주문"에는 주문에 대한 일반 정보에 대한 항목이 있고 "FrameOrder"에는 특정 유형의 주문에 대한 정보가 있습니다. '주문'테이블의 기본 키인 '주문 ID'로 연결됩니다.MS Access VBA Addnew가 기존 레코드를 반환합니까?
데이터베이스는 프론트 엔드와 백엔드로 분리되어 있으므로 링크 된 테이블입니다. 나는 새로운 "주문"항목을 만들 그래서 일단
Private Sub FramingQuoteButton_Click()
' Create a new Order of type Framing, then create a Framing Order linking back to it
Dim rs As DAO.Recordset
Dim frs As DAO.Recordset
Dim ThisOrderID As Long
Dim ThisFrameOrderID As Long
Set rs = CurrentDb.OpenRecordset("Orders")
rs.AddNew
rs!OrderType = "FRAME"
rs!CustomerID = DefaultCustomerID()
rs.Update
rs.Bookmark = rs.LastModified
ThisOrderID = rs!OrderID
rs.Close
Set frs = CurrentDb.OpenRecordset("FrameOrder")
frs.AddNew
frs!OrderID = ThisOrderID
frs.Update <<<< This is where the problem shows up
frs.Bookmark = frs.LastModified
ThisFrameOrderID = frs!FrameOrderID
frs.Close
DoCmd.OpenForm "FrameOrder", , , "OrderID = " & ThisOrderID, , , "NEW"
Set rs = Nothing
Set frs = Nothing
End Sub
:
는 여기 FrameOrder가 다시 연결하여 새로운 주문을 연상하는 데 사용되는 코드입니다. 그런 다음 "FrameOrder"항목을 만들고 방금 만든 "Order"의 기본 키로 "OrderID"를 설정합니다.여기에 문제가 있습니다. 가끔 이렇게하면 업데이트 라인에 키 오류가 발생합니다. 디버거에서 볼 때, frs.AddNew 호출이 테이블의 중간에있는 기존 레코드의 키를 가진 레코드를 생성 한 것처럼 보입니다! 백엔드에서 "Compact And Repair Database"를 수행하면 문제가 사라집니다.
이 응용 프로그램은 아직 개발 중이므로 전 프론트 엔드 및 백엔드 파일을 개발 시스템에 복사하고 작업 한 다음 다시 프로덕션 시스템으로 복사합니다. 이러한 복사본을 작성한 후에이 문제가 가장 자주 나타납니다 (예, 복사하기 전에 데이터베이스가 닫혀 있는지 확인합니다).
어떤 아이디어가 계속 될 수 있습니까?
감사합니다.
Access에서 양식 및 하위 형식 설정으로 처리 할 때 왜 이런 모든 문제가 발생합니까? – Fionnuala