sql - vba建表时如何指定主键

标签 sql ms-access vba recordset

我已经根据下面给出的建议更新了代码,我已经测试过并且效果很好,以供 future 用户快速引用。


我正在使用下面的代码创建链接表,而无需为每个用户设置 DSN,我如何指定一个主键,因为如果手动连接,系统会询问您:

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 创建索引,您将只会获得一个只读 View ,并且您可能会遇到返回错误数据的情况,请参阅下面的评论以获取示例。

最佳答案

将表与问题中的代码链接后,您需要执行以下操作:

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

参见 VBA Code to Add Linked Table with Primary Key一个完整的例子。

请注意,如果链接,您不需要这样做 - Access 将自动检测主键(正如 Remou 在他下面的评论中明确指出的那样)。

但是当您在 Access 中链接 SQL Server View 时,为 Access 中的 View 指定一个正确的主键非常重要
如果您指定了错误的键(= 您选择了未标识唯一记录的列)或根本没有键,Access 会将 View 链接为只读表(正如您已经注意到的那样)。

另外,它会搞砸显示的行 - 请参阅 Why does linked view give different results from MS Access vs SQL Manager?以获得更多解释。
(阅读我的答案,我在另一个答案下的评论)

关于sql - vba建表时如何指定主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526435/

相关文章:

mysql - 使用 in 命令创建 SQL View 命令

sql - 重置自动编号种子

vba - Excel VBA : clear items in pivot table

excel - 如何解锁图表并禁止切割?

python - ADODBAPI 与数据库的打开连接数

regex - 从正则表达式中排除一些单词

MySQL - 项目总和问题

mysql - 连接两个 MySQL 表,但有附加条件?

sql - WM_CONCAT 重复项删除

sql - 比较每个合约的最后记录和倒数第二个记录