Sql server 如何连接到Access 2016 VBA中的新数据源?

Sql server 如何连接到Access 2016 VBA中的新数据源?,sql-server,vba,ms-access,Sql Server,Vba,Ms Access,我的部门使用使用VBA和Access 2016创建的应用程序。它最初指向我们其中一台服务器上的Access数据库。将数据迁移到其他服务器后,我现在需要它指向该不同服务器上的其他SQL server数据库。但我似乎无法建立联系 我对所讨论的服务器具有dbowner权限 连接字符串的原始代码如下所示: '删除筛选器,关闭登录表单,然后打开交换机 rst.Filter=0 文档关闭acForm,“frmUserLogOn” “打开总机 DoCmd.OpenForm“frmMain”,acNormal

我的部门使用使用VBA和Access 2016创建的应用程序。它最初指向我们其中一台服务器上的Access数据库。将数据迁移到其他服务器后,我现在需要它指向该不同服务器上的其他SQL server数据库。但我似乎无法建立联系

我对所讨论的服务器具有dbowner权限

连接字符串的原始代码如下所示:

'删除筛选器,关闭登录表单,然后打开交换机
rst.Filter=0
文档关闭acForm,“frmUserLogOn”
“打开总机
DoCmd.OpenForm“frmMain”,acNormal
'以隐藏模式打开InactiveShutDown窗体
DoCmd.OpenForm“frmInactiveShutDown”,acNormal,,已完成
...
Set conn=CurrentProject.Connection
...
rstLog.打开“tblUserLog”,康涅狄格州,adOpenKeyset,ADLOCK
rstLog.AddNew
rstLog!UserID=rst!用户ID
rstLog!TimeIn=Now()
rstLog.Update
我的新代码如下:

“DoCmd.OpenForm”frmInactiveShutDown”,acNormal,,已完成
"他批驳了上述说法
...    
'设置连接=CurrentProject.Connection
'==================================================================
'为SQL迁移添加代码的开始
Set conn=新的ADODB.连接
与康涅狄格州
.ConnectionString=“Provider=SQLNCLI11;数据源=(我的服务器名称);初始目录=(我的数据库名称);用户ID=(用户名);密码=(密码)”
打开
如果.State=adStateClosed,则
MsgBox“连接失败。无法打开连接。”,vbInformation,“错误:”
如果结束
以
Set rst=New ADODB.Recordset
用rst
.ActiveConnection=conn
.CursorLocation=adUseClient
.CursorType=adOpenStatic
.LockType=adlockType
.打开“tbl_用户”
以
'添加的SQL迁移代码结束-请参阅第2节了解其余代码。
'==================================================================
...
"治罪法"第二节
'==================================================================
'为SQL迁移添加代码的开始
rstLog.打开“tblUserLog”,康涅狄格州,adOpenStatic,ADLOCK
rstLog.AddNew
rstLog!UserID=rst!用户ID
rstLog!TimeIn=DateTime.Now()
rstLog.Update
MsgBox“成功!连接成功”。vbInformation
'添加的SQL迁移代码结束
'===================================================================
“我的表单”有一个下拉列表,用于从表中选择用户列表。我在该表中添加了一个测试用户,但该测试用户没有显示在下拉列表中。因此,我认为这两者之间没有联系

我是否必须在引号中输入数据源名称、初始目录、用户ID和密码?所以
UserID='Admin';密码=“测试”


有人知道我做错了什么吗?

基本上,在本地Access前端数据库和后端SQL Server数据库之间存在相同命名表的版本混淆。目前,您的代码更新SQL Server后端端的tblUserLog,而Access前端端的tblUserLog可能与绑定到表单的tblUserLog不同。因此,您无法看到任何更新,因为服务器表从未显示

只需做两件事中的一件:

  • 使用SQL Server版本:删除或归档Access版本,并将tblUserLog添加为一个新版本。请确保删除dbo_u或其他模式前缀,并保留相同的名称tblUserLog。而且由于表名不会更改,所以表单和VBA代码等所有内容都不需要更改

  • 使用访问版本:保留本地访问表tblUserLog,并在VBA中更新此表,这需要添加另一个连接对象并在该连接上运行记录集更新。请参见下文,其中ADO对象的前缀为server_uu和local_uu:

    打开服务器连接和服务器表记录集 设置服务器连接=新建ADODB.Connection 与服务器连接 .ConnectionString=“Provider=SQLNCLI11;数据源=(我的服务器名称);初始目录=(我的数据库名称);用户ID=(用户名);密码=(密码)” 打开 如果.State=adStateClosed,则 MsgBox“连接失败。无法打开连接。”,vbInformation,“错误:” 如果结束 以 Set server_rst=New ADODB.Recordset 首先使用服务器 .ActiveConnection=conn .CursorLocation=adUseClient .CursorType=adOpenStatic .LockType=adlockType .打开“tbl_用户” 以 '打开本地连接并更新本地表记录集 设置本地连接=CurrentProject.Connection Set local_rstLog=New ADODB.Recordset local_rstLog.Open“tblUserLog”、local_conn、adOpenStatic、adlock local_rstLog.AddNew 本地日志!UserID=server\u rst!UserID'注意此处使用的服务器数据 本地日志!TimeIn=DateTime.Now() 本地\u rstLog.Update ... "释放资源", 设置服务器\u rst=Nothing:设置本地\u rstLog=Nothing 设置服务器连接=无:设置本地连接=无

  • 您是否给出错误消息?当您尝试时会发生什么?这不是VB.NET代码。同样,引号是正确的,但我认为用户ID应该是uid或UserID(全部加在一起)。没有错误消息。我得到一个提示,它已成功连接。当我使用这些详细信息运行搜索查询时,它不会显示在数据库中。我认为它仍然在本地存储信息。我想知道表单本身是否与其他来源有连接。您是说您添加的用户没有进入您连接的SQL数据库,但没有发生错误?