다음 코드는 제안 된 코드로 업데이트되었습니다.이 코드는 테스트를 거쳤으며 잘 작동합니다. 당신이 요청받을 것 같은 나는 기본 키를 지정할 수 있습니다 어떻게 각 사용자에 대한 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의 인덱스 생성을 수동으로 또는 위의 방법으로 지정하지 않으면 읽기 전용 뷰만 나타나고 잘못된 데이터가 반환 될 수 있습니다. 예제는 아래 주석을 참조하십시오.
(내 대답은, 다른 대답에 따라 내 의견을 읽고) 기본 ('tdf.Indexes (0) .Primary')입니다. 적합한 색인이있는 표를 링크하면 해당 표가 사용됩니다. – Fionnuala
다릅니다. 내가 연결할 서버 테이블/뷰 목록이 들어있는 로컬 테이블을 사용하고 있으며 해당 목록을 반복하고 각 테이블을 삭제하고 다시 링크하는 기능이 있습니다. 그래서 나는 그 표가 이미 색인을 가지고 있지 않다는 것을 안다. –
내가 만들려고하는 요점은 SQL 서버에 기본 키가 설정되어 있고 OP에서와 같이 TableDef를 통해 연결된 SQL Server 테이블이 더 이상 개입하지 않고도 기본 키가 자동으로 설정된다는 것입니다. SQL Server 이름과 동일해야합니다. – Fionnuala