2012-06-26 4 views
11
this answer에 대한 코멘트에서

는 Remou는DoCmd.SetWarnings와 CurrentDB.Execute의 차이점은 무엇

CurrentDB.Execute "insert sql here"

더 이상

DoCmd.SetWarnings = 0
DoCmd.RunSQL "insert sql here"

인해 것을 기록하는 내장 Access에서 생성되는 경고. 차이점을 이해하려고 노력 중입니다.

둘 다 오류를 마스크하면 두 번째 오류보다 첫 번째 오류가 더 좋은 이유는 무엇입니까? 여기에 모범 사례가 있습니까?

답변

17

둘 다 오류를 마스크하지 않습니다. DoCmd.SetWarnings는 오류를 숨기고 시스템 전체에 적용되며 사용중인 단일 응용 프로그램에만 국한되지 않습니다. 대응하는 DoCmd.SetWarnings True이없는 DoCmd.SetWarnings False은 조치 쿼리가 PC의 Access 애플리케이션에서 프롬프트없이 실행된다는 것을 의미합니다.

Execute는 쿼리를 실행하는 데 필요한 경고 (예 : "이 쿼리를 실행 하시겠습니까?"와 같은 경고가 필요하지 않음)를 표시하지 않습니다.

In this thread Allen Browne, Access MVP는 Set Warnings을 사용하지 않는다고 말합니다. 이것은 당신이 레코드 수를 반환 할 수 있습니다로

여담으로

, 나는 일반적으로, 그래서 다른 것들 사이에, CurrentDB의 인스턴스를 사용하는 것이 좋습니다 것입니다 : 당신의 코멘트에서

Set db = CurrentDB 
db.Execute sSQL, dbFailOnError 
+0

'를 빼고 실행하려면 내장 된 경고, CurrentDB의 인스턴스 사용 및 SQL 문자열의 예외 처리'.Execute'가 경고를 던지지 않는다고 믿게합니다. – JimmyPena

+0

위의 수정 사항을 참조하십시오. – Fionnuala

+3

이 방법에 접근하는 또 다른 방법은'RunSql'에서 시작하는 것입니다. 먼저 사용자가 조치 조회를 실행하기를 원하는지 확인한 후, 영향을 ^는 레코드 수에 대한 메시지를 표시합니다. 사람들은'SetWarnings = False'를 사용하여 메시지를 표시하지 않습니다. 그러나'[database] .Execute'는 그 메시지들 중 하나를 제시하지 않으므로 SetWarnings을 끄려는 의도가 없습니다. 레무가 벌써 다 말했어. 내가 누군가에게 도움이 될 수있는 기회를 놓고 다른 단어를 사용하고 있으며,'SetWarnings'을 꺼 버리지 말라는 또 다른 기회를 제공합니다! – HansUp

관련 문제