2012-02-07 4 views
3

기존 테이블 T1에서 MAKE TABLE 쿼리 유형을 사용하여 테이블 T2를 만들고 새 테이블 T2에 기본 키로 자동 증가 필드를 추가해야합니다.MS Access 2007 : MAKE TABLE 쿼리에서 AUTOINCREMENT 필드 추가.

필요한 SQL이 궁금합니다. 예를 들면 :

SELECT AUTOINCREMENT(1, 1) AS ID, T1.*, INTO T2 FROM T1 

과정의 AUTOINCREMENT(1, 1) AS ID 코멘트가 작동하지 않습니다하지만 내가 일을 할 수 의심 만 내가 뭘하려고 오전 보여주기 위해 설명을 목적으로 사용하고 있습니다 것입니다.

ALTER TABLE 문을 사용하여 테이블을 만든 후에 테이블을 변경할 수 없다는 것을 유의하십시오. T1에서 T2가 생성되면 즉시 AUTOINCREMENT 필드를 작성하고 채울 필요가 있습니다.

+0

왜 테이블을 변경 사용할 수 없습니다? – Fionnuala

+0

사용자 입력을 위해 양식이 열릴 때 DB가 열릴 때 쿼리가 실행됩니다. MAKE TABLE 쿼리를 실행 한 다음 다른 ALTER TABLE 쿼리를 실행해야하는 경우 매크로를 빌드 할 수 있다고 가정합니다. –

+0

나는 당신이해야 할 것이라고 생각합니다. 다양한 이벤트에서 코드를 실행할 수 있습니다. – Fionnuala

답변

3

의견에서 "사용자 입력을 위해 양식이 열릴 때 DB가 열릴 때 쿼리가 실행됩니다. 필요한 경우 MAKE TABLE 쿼리를 실행하고 다른 ALTER TABLE 쿼리를 실행할 수 있다고 가정합니다."

매번 T2를 다시 생성하는 대신 T1을 한 번 작성한 다음 T1에서 추가하기 전에 매번 내용을 비워 둘 수 있습니다. T2에서 행을 삭제하려면

Dim strSql as String 
strSql = "DELETE FROM T2;" 
CurrentProject.Connection.Execute strSql 

를 사용하면 ID 컬럼 1에 일련 번호를 재설정하려는 경우, 당신은 ALTER TABLE 문을 사용할 수 있습니다.

strSql = "ALTER TABLE T2 ALTER COLUMN ID COUNTER(1, 1);" 
CurrentProject.Connection.Execute strSql 

그런 다음 T1의 내용을 T2에 추가하십시오.

strSql = "INSERT INTO T2 (field1, field2)" & vbCrLf & _ 
    "SELECT field1, field2 FROM T1;" 
CurrentProject.Connection.Execute strSql 

필드 목록에서 ID 열을 그대로두면 자동 번호 매기기가 처리됩니다. 원하는 경우 해당 명령문의 SELECT 부분에서 ORDER BY를 사용하여 T1 행이 추가되는 순서를 제어 할 수 있습니다.

ADO (CurrentProject.Connection)를 사용하여이 세 가지 문을 모두 실행했습니다. 그러나 당신이 원한다면 첫 번째와 세 번째 문장은 DAO에서 잘 실행되어야합니다. 그러나 ALTER TABLE 문은 ADO에서 실행해야합니다.

+0

+1 좋은 답변 :) –

+0

감사합니다. –

0

그것은 단순히 같다 ....

Select Name, 
    (SELECT COUNT(*) 
    FROM Person pp 
    WHERE pp.ID<=Person.ID) AS serialNo 
FROM Person 
관련 문제