2011-07-25 4 views
0

쿼리에서 다음과 같은 일을하려고합니다 :MS Access에서 쿼리를 실행할 때 기본 키의 일련 번호를 유지하는 방법?

Dim rs As RecordSet 
Dim NewPrimaryKey as Long 

Set rs = Currentdb.OpenRecordset("SELECT * FROM MyTable WHERE MyPrimaryKey Is Null;") 

With rs 
     .AddNew 
     NewPrimaryKey = !MyPrimaryKey 
     !DateValue = Now() 
     ... 
     .Update 
End With 

JET 엔진을 사용하여 MS Access 2003에서 실행할 수있는 쿼리를 사용하는 방법에 대한 모든 포인터는 크게 감사하겠습니다.

+0

기본 키 필드 유형이란 무엇입니까? 자판 번호입니까? http://stackoverflow.com/questions/1628267/autonumber-value-of-last-inserted-row-ms-access-vba가 도움이됩니까? – THEn

+0

당신이 무엇을하려고하는지 명확하지 않습니다. 여기서 코드에서 "MyPrimaryKey"필드가 Null 인 모든 레코드를 가져옵니다. 그런 다음 새 기본 키 필드를 MyPrimaryKey 값으로 설정하면 모든 경우에 Null이됩니다. 그게 당신이 의도 한 것입니까? –

+0

지연된 응답을 드려 죄송합니다. NewPrimaryKey를 Null로 설정할 때까지 수정했습니다. 이것이 마치! MyPrimaryKey가 일련 번호이므로! MyPrimaryKey의 자동 증가 값을 NewPrimaryKey 필드에 채 웁니다. –

답변

2

두 개의 SQL 문을 사용하여 원하는대로 수행 할 수 있습니다. 먼저 INSERT. 마지막으로 추가 된 자 동 번호 값을 가져 오려면 "SELECT @@ Identity"를 선택하십시오. 두 SQL 문으로 데이터베이스 연결에 오브젝트 변수를 사용하십시오.

Dim db As DAO.Database 
Dim NewPrimaryKey As Long 
Dim strInsert As String 

strInsert = "INSERT INTO MyTable ([DateValue])" & vbCrLf & _ 
    "VALUES (Now());" 
Set db = CurrentDb 
db.Execute strInsert, dbFailOnError 
NewPrimaryKey = db.OpenRecordset("SELECT @@Identity")(0) 
Debug.Print NewPrimaryKey 
Set db = Nothing 

나는 예약어이기 때문에 필드 이름 DateValue를 대괄호로 묶었습니다.

편집 : 하나의 SQL 문으로 여러 레코드를 삽입하면 SELECT @@ Identity가 마지막 자동 번호를 제공합니다. 해당 연결 인스턴스를 통해 수행 된 삽입에 대한 마지막 자 동 번호입니다. 그리고 당신은 사용 된 자 동 순서를 얻지 못합니다; 마지막 하나.

strInsert = "INSERT INTO MyTable3 ([some_text])" & vbCrLf & _ 
    "SELECT TOP 3 foo_text FROM tblFoo" & vbCrLf & _ 
    "WHERE foo_text Is Not Null ORDER BY foo_text;" 
+0

INSERT가 여러 레코드에서 수행중인 경우에도이 작업을 수행 할 수 있습니까? 단일 인스턴스에서 작동하는 방식을 볼 수 있지만 한 번에 여러 레코드에서 어떻게 작동 하는지를 볼 수 없습니다. –