2011-08-17 2 views
0

조건이 참이면 ADODB 결과 집합을 반복하고 레코드를 삭제하려고합니다. 그러나 이렇게하면 레코드의 첫 번째 필드 만 삭제되고 나머지 레코드는 그대로 유지됩니다.VBA ADODB 결과 집합을 반복하여 레코드 삭제

어떤 아이디어? 다음 코드를 가지고 있습니다 :

Set ytdRS = New ADODB.Recordset 
ytdRS.Source = SQL_YTD 
ytdRS.CursorType = adOpenStatic 
ytdRS.LockType = adLockBatchOptimistic 

rst.MoveFirst 
Do Until rst.EOF 
    if (value = 1) then 
    rst.Delete 
    rst.MoveNext 
    end if  
Loop 

답변

0

내가보기에는 ytdRS.Open 명령이 없습니다. 문제의 일부가 될 수 있습니까?

편집 : 다른 몇 가지 :

  1. 당신은이 블록 (ytdRS)에 걸쳐 동일한 레코드 이름을 사용하지 않는, 그래서 당신의 의도는 두 개의 서로 다른 레코드를 사용하는 것입니다 있는지 확실하지 않습니다 (I 'm'이 아닌 것으로 가정)
  2. "값"이 레코드 세트의 필드 값 (예 : ytdRS!FieldName.Value) 또는 변수 이름으로 의도되었는지 확실하지 않습니다. 이 문맥에서 변수 이름입니다.
  3. 어느 쪽이든 당신은 거의 당신의 레코드가 Value하지 않는 한 다음 레코드로 이동하지 않기 때문에 당신의 if 문 내에는 MoveNext를함으로써 무한 루프를 칠 거라고 보장하고 1.
  4. 같다
  5. CursorType 및 LockType을 변경하여 테스트 테이블에서 작업하도록 예제를 가져와야했습니다. adOpenStatic에서 레코드를 삭제할 수 있다고 생각하지 않습니다 (정적, 또는 변경 불가능한 커서를 제공합니다). adOpenKeyset은 일반적으로 데이터를 업데이트하는 데 문제가있을 때 갈 방법입니다. 잠금에 사용한 adLockBatchOptimistic은 일괄 처리 모드로 작동한다고 가정합니다. 일반적으로 adLockOptimistic은 정상적으로 작동합니다. 필요한 경우 Delete 메소드 및 일괄 작업에 대한 자세한 내용은 here을 참조하십시오.

아래 코드는 나를 위해 일했습니다. 특정 응용 프로그램에 맞게 편집해야합니다. 특히 ytdRS.Source, Open() 방법의 ActiveConnection:= 및 게시 한 코드 블록의 "Value"문과 일치하는 ytdRs![Order ID].Value = 36 행을 편집해야합니다.

희망이 도움이됩니다.

질문 사항이 있으면 알려주십시오.

+0

Microsoft 문서에서 일괄 처리 모드를 사용해야하는 경우 ... 일괄 업데이트 모드 인 경우 레코드가 캐시에서 삭제 대상으로 표시되고 실제 삭제는 UpdateBatch 메서드를 호출하십시오. "_ 그래서 필요한 모든 레코드를 삭제 한 후에 ytdRs.UpdateBatch를 호출해야합니다. 다시 한번 말하지만 배치 모드에 있어야하는 경우에만 해당됩니다. – transistor1