在msaccess中调用oracle存储过程,而在pass-through查询中不保存密码



我正在使用MS ACCESS 2003,我需要通过MS ACCESS调用oracle存储过程。我正在使用传递查询来调用过程。我已经用ODBC的Microsoft驱动程序创建了用户DSN,并成功地调用了该过程。ODBC;DSN=DSN_NAME;UID=用户名;PWD=*******;DBQ=MY_SERVER

但我担心的是将密码保存在直通查询中,有时密码会更改,然后我每次都必须更改直通查询的连接字符串。

当密码更改时,是否有其他方法可以通过pass-through查询调用过程而不更改连接字符串,或者vba中是否有代码可以这样做。我正在寻找一种动态的方式,在这种方式中,调用过程将很容易,而无需通过访问其属性来更改每个通过查询的密码。谢谢

是的,这是可能的,但您需要知道,或者换句话说,能够在应用程序中以某种方式检索密码。在生产线应用程序中,您将使用用户(登录)密码创建一个连接字符串来访问后端表。

结构看起来与此类似:

  1. 创建一个模块来承载与连接相关的公共函数
  2. 创建新函数GET_CONNECTION_STRING()作为字符串:它将返回包括登录用户密码在内的连接字符串
  3. 循环浏览数据库中的表定义/查询定义,并更新.connect属性
  4. 在大多数情况下,您会更改.connect属性并使用.RefreshLink手动刷新/连接
  5. 您需要添加一个新的引用来使用DAO对象。(无论您想使用哪种类型的Microsoft dao对象,或activex数据对象或ado对象)

一些启动代码:

dim db  as dao.database
set db = currentdb
dim tdf as dao.tabledef
For Each tdf In db.TableDefs
    If tdf.connect <> vbNullString Then
        tdf.connect = GET_CONNECTION_STRING & ";TABLE=" & tdf.name
        'if you want to manually refresh uncomment below line
        'tdf.refreshlink
        End If
    End If
Next tdf

将上述函数添加到启动宏将确保所有链接表(需要额外执行的查询)都使用最新的连接字符串进行更新。

当你陷入困境时,试着发布你的代码。

任何链接表以及在Access中包含"已保存"pass-the-quires的链接表都不需要在该字符串中包含密码。如果您省略了密码,那么单一登录到Oracle数据库将允许所有链接的表和pass-the-quires在没有密码的情况下运行。

第一步是将表设置为无DSN,并且不要包含密码(您可能最好删除现有的链接表)。

使用上面的链接但不包括密码意味着您必须首先执行数据库登录。完成后,您可以链接您的表并通过quires。因此,一个表的一次性链接为DSN少,你就可以参加比赛了。

完成以上操作后,任何和所有连接(包括直通查询)都将正常工作,而不必包括用户名。

因此,以上内容意味着您不必为登录到数据库的不同用户重新链接。

要运行直通查询,可以使用以下一行VBA代码:

CurrentDb.Execute.QueryDefs("MyPassQuery").Execute

如何与DNS less链接概述如下:http://www.accessmvp.com/djsteele/DSNLessLinks.html

如何"缓存"用户登录,而不需要用户+登录在链接的连接或用于传递的连接中,概述如下:

电源提示:提高数据库连接的安全性

http://blogs.office.com/b/microsoft-access/archive/2011/04/08/power-tip-improve-the-security-of-database-connections.aspx

因此,您可以在启动时执行一次登录,或提示用户登录,然后从那时起在您的应用程序上传递-=,尽管查询将在不需要密码的情况下运行。这也意味着你可以让不同的用户登录,而不必重新链接现有的表(并通过quires)。

最新更新