2012-01-06 4 views
-2

새로운 레코드가 추가되지 않아도 프로그램을 실행하기 시작하면 데이터베이스 테이블 (데이터 테이블에서 참조 선택)의 레코드 수가 갑자기 증가한다는 것을 알고 있습니다. SQL Studio Manager에서 쿼리를 실행하여 행 수가 증가한다는 것을 확인합니다. 즉, 데이터 테이블에서 참조를 선택합니다. 프로그램이 멈 추면; 레코드 수는 원래 수준으로 떨어집니다. 여기에 코드가 있습니다. 왜 이런 일이 생길까요? 참조는 고유하지만 테이블에는 기본 키가 없습니다.VB6 레코드 및 SQL 개수

rs.Open "select reference,value1,datefield from datetable where field1 = 'value1' " & _  
       "order by reference", objAuditCon.ActiveCon, adOpenStatic, adLockPessimistic 
Do While Not rs.EOF 
    intReadCount = intReadCount + 1 
    DoEvents 
    If Not IsNull(rs("value1")) Then 
     testArray = Split(rs("value1"), ",") 
     rs2.Open "SELECT Date FROM TBL_TestTable WHERE Record_URN = '" & testArray(1) & "'", objSystemCon.ActiveCon, adOpenStatic, adLockReadOnly 
     If rs2.EOF Then 
      End If 
     If Not rs2.EOF Then 
      rs("DateField") = Format$(rs2("Date"), "dd mmm yy h:mm:ss") 
      rs.Update 
      intWriteCount = intWriteCount + 1 
     End If 
    rs2.Close 
    Else 
     End If 
    rs.MoveNext 
Loop 
rs.Close 
+2

아래를 참조 의견이 당신이 http://stackoverflow.com/questions/8747341/vb6-recordset-update에 질문 같은 질문 아닌가? –

+0

이 질문을 다시 작성하고 기본 키가없고 테이블 레코드 개수 부분에 초점을 맞춘 테이블에 레코드 세트 업데이트를 실행할 때의 위험에 대해 알아야하며 더 나은 답변을 얻을 수 있습니다. –

+0

셰인, 고마워. 나는 이것을했다. C-Pounr 전문가, 더 이상 원래 질문을 볼 수 없습니다. 링크를 클릭하면 오류가 발생합니다. 그렇습니다. 같은 질문이지만 아마 약간 다르게 말할 것입니다. – w0051977

답변

0

그것은 조금 혼란,하지만 당신은 당신이 테이블에 얼마나 많은 행에 대해 "intReadCount"에 의해 주어진 전체를 참조하는 경우 올바르게이 값을 삭제하지 않는 것처럼 그것은 보인다. 절차를 시작할 때 시작하기 전에 "intReadCount"를 다시 0으로 설정하려면 일정한 결과를 얻어야합니다.

업데이트 :

+0

Matt, 아니요 intReadCount를 언급하지 않습니다. SQL Studio 관리자에 로그온하고 쿼리 창에 쿼리를 입력하고 있습니다. "select reference from datetable"은 프로그램이 실행 중일 때 더 많은 행을 반환합니다. 그런 다음 "select reference from datetable"을 실행하면 원래의 수로 되돌아갑니다. 이것이 기본 키가 없다는 사실 때문일 수 있습니까? 필드 '참조'는 고유합니다. – w0051977

+0

@ w0051977 이것은 PK의 존재와 관련이 없습니다. 증가 된 쿼리를 덤프 한 다음 마지막 쿼리와 비교하여 어떤 행이 추가 행인지를 비교하는 것이 좋습니다. PK가 없으므로 쿼리 순서를 제안합니다. 그래서 당신은 그 행들을 분류 할 수 있습니다. –

+0

Matt, PK를 추가 할 때 발생하지 않으므로 PK가 없다는 사실이 있어야합니다. 나는 당신이 제안한 것을 시도했다. datetable에서 reference를 선택한다. (datetablebackup에서 reference를 선택한다.) datetablebackup은 프로그램을 실행하기 전에 수행되었습니다. 쿼리를 실행할 때 반환 된 행이 없습니다. 감사. – w0051977