2011-03-01 4 views
0

아래 코드와 같은 VBA (MS Access 내)에서 append-query를 실행하고 있습니다. 삽입 된 레코드 수를 추적하기 위해 VBA에서 RecordsAffected 메서드를 사용하면 레코드 수가 약 90,000 개를 초과하면 오류가 발생합니다? (어떤 종류의 stackoverflow 오류가 말한다)숫자가 약 90.000 레코드를 초과하면 VBA에서 RecordsAffected-method를 사용하면 오류가 발생합니까?

재미있는 부분은 RecordsAffected-method를 사용하지 않을 때 쿼리가 올바르게 작동한다는 것입니다. 그리고 영향을받는 행 수가 90.000 미만일 때도 잘 작동합니다.

무엇이 잘못 될 수 있습니까? 이것은 VBA의 버그입니까?
.
.

Dim dbs As DAO.Database 
sql As String 
iCount As Integer 
Set dbs = CurrentDb 

sql = "INSERT INTO " & ReceiveTable_selected & " SELECT " & NavisionTable_selected & ".* " & _ 
        "FROM " & NavisionTable_selected & " " & _ 
        "WHERE ((([" & NavisionTable_selected & "].[Entry No_] ) >" & 
        Counter_selected & "))" 


dbs.Execute sql, dbFailOnError 
iCount = dbs.RecordsAffected 
+0

정확한 오류 메시지와 번호는이 문제를 해결하는 데 도움이됩니다. – mwolfe02

+0

방금 ​​큰 삽입물에 대해 테스트를 실시했지만,'RecordsAffected'가'2445045' 레코드를보고했습니다. VBA 나 DAO에서는 버그가 아닌 것 같습니다. 다른 일이 벌어지고있는 것 같아요. – mwolfe02

+0

입력 해 주셔서 감사합니다. 어쩌면 ODBC 연결 테이블에서 추가 할 수 있습니까? – MOLAP

답변

3

변경 Dim iCount As Integer 도움말 파일

Dim iCount As Long 행 :

정수 변수 -32,768에서 32,767 값에 이르기까지의 16 비트 (2 바이트) 숫자로 저장된다.

하고 :

롱 (long 정수) 변수 부호 32 비트 (4 바이트)로 저장되어 2,147,483,647 -2,147,483,648에서 값의 범위 번호.

+0

그 이유가 있어야합니다. 그러나 Integer가 더 큰 가치를 가질 수 있다고이 웹 사이트에서 어떻게 말하는가? 나는 이전 버전을 사용하고 있다고 생각한다. http://msdn.microsoft.com/en-us/library/06bkb8w2.aspx >> 값이 -2,147,483,648에서 2,147,483,647 사이 인 부호있는 32 비트 (4 바이트) 정수를 포함합니다. – MOLAP

+0

해당 웹 사이트는 VB.Net에 대한 참조입니다. Microsoft는 Visual Basic .NET을 만들었을 때 진짜 혼란을 겪었으며 간단히 'Visual Basic'이라고 지칭하기 시작했습니다. 불행히도 Visual Basic 6 (VB6) 및 Visual Basic for Applications (VBA) (그 준 전임자)는 크게 다릅니다. 명명 체계는 새롭고 경험 많은 프로그래머에게 끝없는 혼란의 근원입니다. – mwolfe02

+0

문제를 명확히 해 주셔서 감사합니다. – MOLAP