Excel VBA Userform 到 SQLOLEDB 的连接在本地有效,但在远程无效 - 运行-时间错误“-2147467259 (80004005)”:[DBNETLIB]
Excel VBA Userform to SQLOLEDB Connection works Locally but not remotely - Run-time error '-2147467259 (80004005)': [DBNETLIB]
现在已经研究了一周了,我仍然无法解决这个问题。
我创建了一个 Excel VBA 用户表单,在单击命令按钮(称为 "Save")时将数据插入 SQLOLEDB 连接(SQLEXPRESS 2017) .在本地(localhost)它就像一个魅力。列中的所有数据都已成功插入到 SQL DB Table 中。没有任何错误。
但是,当任何客户端尝试执行相同的操作时,我会收到 运行 时间错误“-2147467259 (80004005)”:[DBNETLIB](ConnectionOpen (connect()).]SQL 服务器不存在或访问被拒绝。
这是我目前尝试过的方法:
- 我在 SQL Server Management Studio 中为客户端创建了一个登录名。
- 我已将客户端的插入权限授予 dbo.Table。
- 我已确保 "Allow Remote Connections to this Server" 在 SQL Server Management Studio 的服务器属性中的“连接”中选中。
- 我已经在我的 Windows 防火墙中添加了入站和出站规则,以在安装了服务器的计算机中打开端口 1433。
- 我在 Windows 防火墙中添加了入站和出站规则,以在我的客户端计算机中打开端口 1433。
- 我检查了我的 ODBC 数据源管理器(32 位和 64 位),发现我安装了 SQL Server Native Client RDA 11.0,而我的客户端没有。我研究了一下,现在不能再安装这个版本了。我还发现了 SQL Server Compact 3.5,据说它带有 RDA 的替代品,称为 ADO.NET 的同步服务。我在我的电脑和我的客户端都安装了 32 位和 64 位版本。
- 我也尝试过使用我自己的登录信息建立远程桌面连接,但是当我测试我的用户表单或 运行 我的测试仪时。 UDL 尝试连接到此服务器我收到相同的错误消息。
这是我用来建立此连接的字符串:
conn.Open "Provider=SQLOLEDB;Data Source=PCNAME\SQLEXPRESS;Initial Catalog=DATABASENAME;Integrated Security=SSPI;Trusted_Connection=Yes"
conn.Execute "INSERT INTO dbo.TABLENAME (COLUMNNAME, COLUMNNAME2) values ('" & sColumnVariable & "', '" & sColumnVariable2 & "')"
我的问题是:
我如何设法让客户端成功插入此 SQL Database/Table?
问题出在哪里?
它位于我的计算机设置中吗?
它位于我的客户计算机设置中吗?
它是否在我的 SQL Server Management Studio 中(可能 wrong/missing 权限)?
在此先感谢您的帮助!
问候,戴夫。
您必须使用IP地址进行连接,例如:
Data Source=101.101.101.101\SQLEXPRESS;
- 在 SQL Server Express 所在的机器上打开 DOS 提示符并键入 ipconfig
- 获取 IP 地址并在您的连接字符串中使用它
LocalHost 只是指给您 自己的计算机。因此,除非您在每台客户端计算机上都有 SQL Express 运行,否则它不会工作。
您需要使用正确的计算机名称或IP地址。
SQL Express 运行 在 Windows 服务器 上吗?
如果您希望其他计算机与您的 SQL Server Express 数据库通信,我很确定这是一项要求。用在本地测试是可以的,但是需要在实际是运行WindowsServer的PC上安装SQLServer才能够接受并正确路由连接。因此,虽然 SQL Server Express 如果免费,但如果您还没有 Windows 服务器,则必须付费购买。
如果没有,我很想知道如何与我的 IT 部门打交道,这样我就可以完成一些事情。
我想通了。它与IP有关。我只使用了我的本地连接 IP 地址,没有 \SQLEXPRESS 以及我在 SQL Server Management Studio 中创建的新用户在我的连接字符串中:
conn.Open "Provider=SQLOLEDB;Data Source=IPADDRESS;Initial Catalog=DATABASENAME;Integrated Security=SSPI;User ID=MySQLTest;password=myPassc0de;
我太高兴了。
现在已经研究了一周了,我仍然无法解决这个问题。 我创建了一个 Excel VBA 用户表单,在单击命令按钮(称为 "Save")时将数据插入 SQLOLEDB 连接(SQLEXPRESS 2017) .在本地(localhost)它就像一个魅力。列中的所有数据都已成功插入到 SQL DB Table 中。没有任何错误。
但是,当任何客户端尝试执行相同的操作时,我会收到 运行 时间错误“-2147467259 (80004005)”:[DBNETLIB](ConnectionOpen (connect()).]SQL 服务器不存在或访问被拒绝。
这是我目前尝试过的方法:
- 我在 SQL Server Management Studio 中为客户端创建了一个登录名。
- 我已将客户端的插入权限授予 dbo.Table。
- 我已确保 "Allow Remote Connections to this Server" 在 SQL Server Management Studio 的服务器属性中的“连接”中选中。
- 我已经在我的 Windows 防火墙中添加了入站和出站规则,以在安装了服务器的计算机中打开端口 1433。
- 我在 Windows 防火墙中添加了入站和出站规则,以在我的客户端计算机中打开端口 1433。
- 我检查了我的 ODBC 数据源管理器(32 位和 64 位),发现我安装了 SQL Server Native Client RDA 11.0,而我的客户端没有。我研究了一下,现在不能再安装这个版本了。我还发现了 SQL Server Compact 3.5,据说它带有 RDA 的替代品,称为 ADO.NET 的同步服务。我在我的电脑和我的客户端都安装了 32 位和 64 位版本。
- 我也尝试过使用我自己的登录信息建立远程桌面连接,但是当我测试我的用户表单或 运行 我的测试仪时。 UDL 尝试连接到此服务器我收到相同的错误消息。
这是我用来建立此连接的字符串:
conn.Open "Provider=SQLOLEDB;Data Source=PCNAME\SQLEXPRESS;Initial Catalog=DATABASENAME;Integrated Security=SSPI;Trusted_Connection=Yes"
conn.Execute "INSERT INTO dbo.TABLENAME (COLUMNNAME, COLUMNNAME2) values ('" & sColumnVariable & "', '" & sColumnVariable2 & "')"
我的问题是:
我如何设法让客户端成功插入此 SQL Database/Table?
问题出在哪里? 它位于我的计算机设置中吗? 它位于我的客户计算机设置中吗? 它是否在我的 SQL Server Management Studio 中(可能 wrong/missing 权限)?
在此先感谢您的帮助! 问候,戴夫。
您必须使用IP地址进行连接,例如:
Data Source=101.101.101.101\SQLEXPRESS;
- 在 SQL Server Express 所在的机器上打开 DOS 提示符并键入 ipconfig
- 获取 IP 地址并在您的连接字符串中使用它
LocalHost 只是指给您 自己的计算机。因此,除非您在每台客户端计算机上都有 SQL Express 运行,否则它不会工作。
您需要使用正确的计算机名称或IP地址。
SQL Express 运行 在 Windows 服务器 上吗?
如果您希望其他计算机与您的 SQL Server Express 数据库通信,我很确定这是一项要求。用在本地测试是可以的,但是需要在实际是运行WindowsServer的PC上安装SQLServer才能够接受并正确路由连接。因此,虽然 SQL Server Express 如果免费,但如果您还没有 Windows 服务器,则必须付费购买。
如果没有,我很想知道如何与我的 IT 部门打交道,这样我就可以完成一些事情。
我想通了。它与IP有关。我只使用了我的本地连接 IP 地址,没有 \SQLEXPRESS 以及我在 SQL Server Management Studio 中创建的新用户在我的连接字符串中:
conn.Open "Provider=SQLOLEDB;Data Source=IPADDRESS;Initial Catalog=DATABASENAME;Integrated Security=SSPI;User ID=MySQLTest;password=myPassc0de;
我太高兴了。