ACC: 레코드 집합 다시 열 때까지 새 SQL 레코드 삭제된 나타난다

기술 자료 번역 기술 자료 번역
기술 자료: 135379 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

현상

고급: 전문적인 코드 작성, 상호 운용성 및 다중 사용자 기술이 필요합니다.

테이블의 고유 인덱스 필드 기본 값을 해당 필드에 값을 지정할 경우 응용 프로그램에 대해 Visual Basic을 사용하여 SQL 테이블에 레코드를 추가할 때 SQL 테이블을 다시 열 때까지 새 레코드가 삭제된 나타납니다. 새 레코드에서 값을 구하는 하면 다음 오류 메시지가 나타날 수 있습니다.
런타임 오류 '3167'
레코드가 삭제됩니다.

해결 방법

Visual Basic 코드를 사용하여 SQL 테이블을 열 때 다음 예제와 같이 dbSeeChanges 옵션은 다음과 같습니다.
   Set rs = db.OpenRecordset("TestTable", dbOpenDynaset, dbSeeChanges)
				

dbSeeChanges 옵션은 새로 고유 인덱스 필드의 기본 값을 포함하는 레코드를 현재 레코드 집합에 사용할 수 있는 추가된 것을 확인합니다.

현재 상태

이것은 의도적으로 설계된 동작입니다.

추가 정보

문제를 재현하기 위한 단계


  1. 모듈을 만들고 있이 있지 않은 경우 선언 구역에 다음 줄을 입력하십시오.
          Option Explicit
    						
  2. 다음 프로시저를 입력하십시오.
          Function TestSQLData()
    
             Dim db As Database, rs As Recordset
             Dim idx, td
             Dim cmd As String
    
             ' Delete TestTable if it exists on the SQL server.
             Set db = OpenDatabase("", False, False,ODBC;dsn=<datasource>; _
                database=<database>;uid=<user id>;pwd=<password>")
             cmd = "if exists (select * from sysobjects where _
                id = object_id('dbo.TestTable'))"
             cmd = cmd & " drop table TestTable"
             db.Execute cmd, dbSQLPassThrough
    
             ' Create TestTable with one field on SQL server.
             Set td = db.CreateTableDef("TestTable")
             td.Fields.Append td.CreateField("Int", dbInteger)
             td.Fields.Append td.CreateField("String", dbText, 50)
             db.TableDefs.Append td
    
             Set idx = td.CreateIndex("MyIdx")
             idx.Unique = True
             idx.Fields.Append idx.CreateField("Int")
             td.Indexes.Append idx
    
             cmd = "create Default TestDef3 as 100"
             db.Execute cmd, dbSQLPassThrough
    
             cmd = "sp_bindefault TestDef3, 'TestTable.Int'"
             db.Execute cmd, dbSQLPassThrough
    
             ' Open table, add a record, and then obtain values.
             Set rs = db.OpenRecordset("TestTable")
             rs.AddNew
             rs!String = "Trial"
             rs.Update
    
             Debug.Print "RecordCount = " & rs.RecordCount
             rs.MoveFirst
             Debug.Print "String is " & rs("String")
             Debug.Print "Int is " & rs("Int")
             rs.Close
    
          End Function
    						
  3. 이 함수를 테스트하기 위해 디버그 창에 다음 줄을 입력한 다음 Enter 키를 누릅니다.

    ? TestSQLData()

    참고 '3167' 런타임 오류가 발생합니다.

참조

OpenRecordset 방법에 대한 자세한 내용은 다음 "OpenRecordset" 및 "OpenRecordset 방법" 도움말 색인 검색 또는 Microsoft Access 97 Office 길잡이를 요청하십시오.

속성

기술 자료: 135379 - 마지막 검토: 2014년 2월 11일 화요일 - 수정: 3.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
키워드:?
kbnosurvey kbarchive kbmt kberrmsg kbprb kbusage KB135379 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com