2012-07-17 2 views
3

다음 코드는 제안 된 코드로 업데이트되었습니다.이 코드는 테스트를 거쳤으며 잘 작동합니다. 당신이 요청받을 것 같은 나는 기본 키를 지정할 수 있습니다 어떻게 각 사용자에 대한 DSN을 설정하지 않고 연결된 테이블을 만들려면 아래의 코드를 사용하고vba를 사용하여 테이블을 만들 때 기본 키를 지정하는 방법


, 수동으로 연결하는 경우 :

Dim sConnect As String 
Dim db   As DAO.Database 
Dim tdf   As DAO.TableDef 

Set db = CurrentDb 

Set tdf = db.CreateTableDef 
tdf.Name = "dbo_vwFeedback" ' - -- --- This is the Label that you see in Access... 
tdf.Connect = "ODBC;DRIVER=SQL Server;SERVER=server01\serverinstance;DATABASE=db_name;Trusted_Connection=Yes" 
tdf.SourceTableName = "vwFeedback" ' - -- --- This is the actual name in SQL Server, minus the owner. 
db.TableDefs.Append tdf 
CurrentDb.Execute "CREATE UNIQUE INDEX PK_dbo_vwFeedback_PrimaryKey ON dbo_vwFeedback (DataSetID, FeedbackRef) WITH PRIMARY" 

참고 : 위의 내용은 SQL Server VIEW의 경우 SQL Server TABLE과 동일하지만 CurrentDB.Execute 줄이 필요하지 않습니다 (기본 키가 서버에 올바르게 설정된 경우).

코드는 테이블을 연결하고 기본 키를 수동으로 지정하는 대신 사용됩니다.

SQL Server VIEW의 인덱스 생성을 수동으로 또는 위의 방법으로 지정하지 않으면 읽기 전용 뷰만 나타나고 잘못된 데이터가 반환 될 수 있습니다. 예제는 아래 주석을 참조하십시오.

답변

5

는 질문의 코드와 테이블을 연결 한 후에는이 작업을 수행 할 필요가 :

CurrentDb.Execute "CREATE UNIQUE INDEX SomeIndex ON SomeTable (PrimaryKeyColumn) WITH PRIMARY" 

완전한 예를 들어 VBA Code to Add Linked Table with Primary Key를 참조하십시오. (Remou 아래 자신의 의견에 분명히으로) 액세스 자동으로 기본 키를 감지합니다 - 당신이 테이블 링크 경우 하지

참고이 작업을 수행해야합니다.

하지만 Access에서 SQL 서버를 보기를 연결할 때, 그것은 Access에서보기에 대한 적절한 기본 키를 지정 매우 중요 입니다.
잘못된 키 (= 고유 레코드를 식별하지 못하는 열을 선택 함) 또는 키를 전혀 지정하지 않으면 Access에서보기를 읽기 전용 테이블로 링크합니다 (이미 눈치 챘 듯이).

더하여, 표시된 행을 망칠 것입니다. 자세한 설명은 Why does linked view give different results from MS Access vs SQL Manager?을 참조하십시오.
인덱스가 이미 있는지 여부 (`tdf.Indexes.Count`를) 할당되지 않았 음을 확인하는 것이 생각 될 수

+0

(내 대답은, 다른 대답에 따라 내 의견을 읽고) 기본 ('tdf.Indexes (0) .Primary')입니다. 적합한 색인이있는 표를 링크하면 해당 표가 사용됩니다. – Fionnuala

+0

다릅니다. 내가 연결할 서버 테이블/뷰 목록이 들어있는 로컬 테이블을 사용하고 있으며 해당 목록을 반복하고 각 테이블을 삭제하고 다시 링크하는 기능이 있습니다. 그래서 나는 그 표가 이미 색인을 가지고 있지 않다는 것을 안다. –

+1

내가 만들려고하는 요점은 SQL 서버에 기본 키가 설정되어 있고 OP에서와 같이 TableDef를 통해 연결된 SQL Server 테이블이 더 이상 개입하지 않고도 기본 키가 자동으로 설정된다는 것입니다. SQL Server 이름과 동일해야합니다. – Fionnuala

관련 문제