2011-11-30 2 views
1

편집이다 : 나는 같은 코드와 다른 문제를 가지고 변경는 MS 액세스

2 편집 : 내가 만든

문제를 casuing 것 같다 추가 추가 코드 여러 외부 소스의 데이터를 집계하여 결과를 새로운 테이블에 기록하는 액세스의 VBA 프로그램. 이상적으로 프로그램을 실행할 때 현재 테이블에있는 모든 데이터를 지우고 새 데이터로 바꾸고 싶습니다. 나는 현재 현재 참조를 위해 다음 나의 새로운 데이터 여기

를 작성 ... 테이블에있는 코드의 모든 데이터를한다 삭제하고

Function getTestFixtures(FixtureName As String) As Recordset 
Dim db As Database 

Set db = OpenDatabase(GetDBPath & "TestFixtures.xlsx", False, False, "Excel 12.0;HDR=Yes;") 

If db Is Nothing Then 
    MsgBox "Can't find the file!", vbExclamation, ThisWorkbook.Name 
    Exit Function 
End If 

Set getTestFixtures = db.OpenRecordset("Select * from [" & FixtureName & "$]") 

End Function 
위에서 만든 레코드 수정 및 출력 데이터에 배치됩니다

사전이이 함수에 전달됩니다.

Sub Write_OTDC_Data(POlist As Dictionary) 
Dim Rst As Recordset 


DoCmd.SetWarnings False 
DoCmd.runsql "Delete * from [OTDC Results]" 
DoCmd.SetWarnings True 


Set Rst = CurrentDb.OpenRecordset("OTDC Results") 

With Rst 

    For Each key In POlist.Keys 
    .AddNew 
    For i = 0 To 9 
     .Fields(i).value = POlist(key)(i) 
    Next 
    .Update 
    Next 
.Close 
End With 
End Sub 

내 문제는 위의 두 가지 작업을 모두 실행 한 후에 아무 것도 변경하지 않으면 다음과 같은 오류가 발생합니다.

Error Message

고립 중 하나를 실행하면 오류를 생성하지 않습니다.

+1

테이블을 삭제하지 않고 삭제 쿼리를 실행하지 않으려는 이유가 있습니까? – Fionnuala

+0

@Remou 아니요 .... 중요한 위반 사항으로부터 업로드 할 데이터의 데이터 손실 문제가 있습니다. 간단한 픽스이기 때문에 시도해 보겠습니다. – Pynner

+0

데이터 업로드 테이블의 키가 좋은 생각이라고 생각하지 않습니다. 느려지는 것처럼 느려지고, 발견 한 것처럼 귀찮은 일이 될 수 있습니다. 열쇠를 내버려 둘 수 없습니까? – Fionnuala

답변

0

이 질문이 아직 해결되지 않았는지 확실하지 않습니다. 그렇지 않은 경우, 시도 할 수있는 몇 가지 제안 사항이 있지만 문제를 해결할 것이라는 확신이 없습니다.

통합 문서와 함께 OpenDatabase를 사용하지 않고 DoCmd.TransferSpreadsheet을 사용하여 시트 데이터를 스크래치 테이블로 가져 오십시오.

MsgBox에는 ThisWorkbook.Name이 Access 애플리케이션에 어떤 의미가 있는지 궁금합니다. 그 외에도 통합 문서의 존재 여부를 확인한 다음 파일이있는 경우에만 열거 나 시트를 가져옵니다. 통합 문서 파일이 존재하지 않는 경우 OpenDatabase에서 오류가 발생하지 않는 이유

If Len(Dir(GetDBPath & "TestFixtures.xlsx")) = 0 Then 
    'not found 
Else 
    'use it 
End If 

는 사실은 내가 불분명 해요. 그리고 그건 나를 의심스럽게합니다. DoCmd.SetWarnings False 결코 SetWarnings을 끄지 마십시오. 그렇게하면 중요한 정보가 표시되지 않습니다. 그리고 그것은 완전히 불필요합니다. CurrentDB()에 DAO.Database 개체 변수를 설정 한 다음이 대신 사용 :

dbObjectVariable.Execute "Delete from [OTDC Results]", dbFailOnError 

는 dbFailOnError이 노출 어떤 문제를 해결하기 위해 오류 처리기를 추가합니다.

마지막으로 이것은 매우 중요하기 때문에 반복됩니다. NEVER SetWarnings을 해제하십시오.

+0

내 코드를 살펴 줘서 고마워. 나는 그 오류가 무엇인지 정확하게 설명 할 것이다. 위의 코드는 잘 실행됩니다 (그리고 나는 경고를 해제하지 않았습니다). 어떻게 든 위의 실행 후 DB를 사용할 수없는 상태로 잠급니다. 나는 msgbox 문장에 대해 당신과 동의한다. 아마 누락 된 파일이있을 때 제대로 실행되지 않을 것이다. – Pynner