【问题标题】:Connect to a linked table连接到链接表
【发布时间】:2009-11-25 12:57:48
【问题描述】:

使用代码连接到链接表。 我有一些来自 SQL 服务器的链接表;它们通过 ODBC 连接链接。密码不与连接一起保存。当我在 Access table-view 中双击表时,会提示输入用户名和密码。输入密码后,我可以查看表中的数据。

我的问题是,在以这种方式打开表格之前,我尝试使用代码访问表格。我尝试做的是使用 ADODB 打开包含链接表中数据的记录集,例如:

Dim rst as new ADODB.Recordset
Dim sql as string
Sql = “SELECT * FROM LinkedTable”
rst.Open sql, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly

在之前没有访问该表的情况下运行此代码将生成此错误:错误# -2147467259, ODBC: connection to dns-name failed。

所以,我的问题是,有没有什么方法可以使用打开数据库时可以运行的代码连接到数据库?这也将有助于用户,因为他们不必记住 SQL 服务器的密码。

【问题讨论】:

  • 请输入代码? “我总是记得在尝试...之前打开桌子”是什么意思? “在...之前打开表”是什么意思?
  • “我总是记得在尝试...之前先打开表格” 那是我从 Access 中的常规表格视图打开表格的时候。使用 ODBC 连接,密码未保存在 ODBC 连接的设置中。因此,当我双击链接表时,我会得到一个登录提示,我需要在其中输入密码。当我忘记这样做并尝试使用 vba 访问表时,我得到了错误。我正在使用 ADOB.Recordset 来访问代码中的表。

标签: vba ms-access


【解决方案1】:

您似乎混合了两种可能无法一起工作的技术,即通过 ODBC 和 ADODB 记录集链接表。您是否尝试在链接表上打开 DAO 记录集?

Dim rst as DAO.Recordset
Dim sql as string
Sql = “SELECT * FROM LinkedTable”
set rst = currentDb.openRecordset(sql,<your parameters>)

您当然可以通过 2 个 ADODB 连接来使用 ADODB 记录集,一个连接到您的访问文件,另一个连接到您的 SQL 服务器:

Dim rsSQL as ADODB.recordset, _
    rsACCESS as ADODB.recordset, _
    connectionSQL as ADODB.connection, _
    connectionACCESS as ADODB.connection

set connectionSQL = New ADODB.connection
set connectionACCESS = New ADODB.connection

connectionSQL.properties(...) = enumerate your SQL parameters
connectionACCESS.properties(...) = enumerate your ACCESS parameters (use currentproject.accessConnection if your access tables are local tables only)

set rsSQl = New ADODB.recordset
set rsACCESS = New ADODB.recordset

rsSQL.open "SELECT * FROM ...", connectionSQL, <other parameters>
rsACCESS.open "SELECT * FROM ...", connectionACCESS, <other parameters>

可以将 ADO 记录集链接到 Access 中的表单和组合框。但是,在创建表单时,该技术必须主要通过 VBA 代码进行管理(您必须编写“打开”事件,例如set me.recorset = ...),而标准的“链接表”技术可以通过用户轻松使用 -友好的“表单设计”界面。

【讨论】:

  • 嗯,是的,我认为你是正确的。我会看看我将如何解决它。
【解决方案2】:

您可以在代码中使用连接字符串,这很简单,因为您已经在使用 ADO:http://www.connectionstrings.com/

您需要找出您要链接到的 SQL Server 版本。

【讨论】:

  • 但这也适用于我在表单中使用表格作为源的时代吗?我说的是那些我不使用代码访问表格的时候。可以说,如果我可以在无需用户输入密码的情况下打开表格,那就太好了。
  • 作为一般规则,不应授予用户访问表的权限,除非通过表单和报告。表单可以绑定到 ADO 记录集 (support.microsoft.com/kb/281998/EN-US)。如果您希望在没有密码的情况下打开表格,您可能最好以这种方式设置 DSN。您不妨阅读:support.microsoft.com/kb/892490
  • 我同意您的观点,即用户永远不应访问这些表。我将不得不检查如何使用 ADO 将记录集绑定到窗体、报表、列表框、组合框等。也许这是一个可行的解决方案。
  • 您可能想使用 adp(项目),如果您还没有这样做,它可以更快。
  • 不能使用adp,因为只有两个表来自sql-server,其余的都是常规访问表。
猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 2019-07-21
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
相关资源
最近更新 更多