2015-01-08 1 views
1
rcount = DCount("F1", "T1") 

Do While rcount > 0 

DoCmd.OpenQuery "q1" 

Loop 

이 코드가 작동하지 않을 때 누구에게 문의 할 수 있습니까? 루프가 진행되지만 겉으로는 무시합니다. rcount > 0Dcount 조건의 액세스 VBA 루프

+0

'rcount', 절대로 바뀌지 않습니다. 따라서 'Do While'을 눌렀을 때'rcount> 0' 조건이'True'이면'True'로 유지됩니다. 당신이 원하는 것을 설명하십시오. – HansUp

+0

코드가 반복되면 조건을 무시하지 않습니다 ...이 'rcount'의 실제 값이 무엇인지 확인하려면 Locals 창을 열고 실행 해 보셨습니까? –

+0

미안, 나는 그 부분을 나갔다. dcount가 적용되는 테이블은 루프가 중지되어야하는 dcount = 0이 될 때까지 한 번에 하나의 레코드를 삭제하여 모든 루프를 수정합니다. 루프를 깨고 dcount가 반대 인 테이블을 보면 내 코드가 모든 레코드를 삭제했다는 것을 알 수 있습니다.이 경우 dcount는 0이어야합니다. – David

답변

1

삭제 쿼리를 실행 한 후 의 값이으로 업데이트됩니다. 대신 DoCmd.OpenQueryCurrentDb.Execute를 사용하여

rcount = DCount("F1", "T1") 

Do While rcount > 0 
    'DoCmd.OpenQuery "q1" 
    CurrentDb.Execute "q1", dbFailOnError 
    rcount = DCount("F1", "T1") 
Loop 

참고 SetWarnings 전원을 끄지 않고 확인 메시지를 방지 할 수 있습니다. 또한 dbFailOnError을 사용하면 자동으로 실패하는 문제를 알려줍니다. 처음의 값을 설정 한 후 당신은 한 가지에 그들 모두를 제거 할 수 있습니다 한 번에 모든 T1 기록 하나를 삭제하려면 왜 이해가 안 그러나

...

CurrentDb.Execute "DELETE FROM T1;", dbFailOnError 
+0

완벽. 고맙습니다! 질문에 대답하기 위해서 - 내가 논박 할 수없는 입장에있는 누군가를 위해 말도 안되는 탁월한 테이블 조작을하고 있고, 내가하고있는 방식으로 한 번에 하나씩 삭제해야하기 때문이다. (기본적으로 다른 쿼리를 사용하여 top1 레코드를 결정합니다). 우리 모두 거기에 있었을거야. :) – David