我们可以使用currentproject.connection
或使用DSN(DSN=MyDSN;UID=MyID;PWD=MyPwd
)或DSN-Less连接字符串(
DRIVER=\{SQL Server\};SERVER=
MyServer;DATABASE=pubs;
UID=MyID;PWD=MyPwd)
我的问题特别是在链接表连接到SQL Server的情况下。
我有一个连接到SQL Server后端的无DSN链接表。我使用了Microsoft提供的this代码来创建无DSN的连接。如果我这样做
debug.print currentproject.connection
我得到类似
Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Users\DAVE\Desktop\DATA.accdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database=C:\Users\DAVE\AppData\Roaming\Microsoft\Access\System3.mdw;Jet OLEDB:Registry Path=Software\Microsoft\Office\16.0\Access\Access Connectivity Engine;Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=True;Jet OLEDB:Bypass UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Validation=False
我想,上面的字符串将被转换为无dsn的连接字符串,如下所示:
DRIVER=\{SQL Server\};SERVER=
MyServer;DATABASE=pubs;
UID=MyID;PWD=MyPwd)
考虑到这种转换速度,使用连接字符串比使用currentproject.connection
更快吗?
答案 0 :(得分:2)
CurrentProject.Connection
是到当前Access数据库的预先初始化且永远存在的连接。
但是,使用ODBC连接字符串,OLEDB连接字符串或ODBC DSN的连接可以直接连接到外部数据源,从而减少开销并使用SQL方言,外部系统的选项和怪癖。
CurrentProject.Connection
可以使用链接表,但是如果使用链接表,它实际上使用将Access连接到SQL Server的DAO连接(链接表始终使用DAO,因为Access在内部使用DAO),然后使用ADO连接。到Access数据库以从Access检索数据,从而导致额外的开销。
这意味着在连接到外部源时,使用SQL Server ODBC驱动程序或OLEDB提供程序的连接在某些情况下比使用CurrentProject.Connection
的连接要快得多。另外,使用ODBC驱动程序或OLEDB提供程序的直接连接可以公开其他功能,例如从SQL Server返回信息消息。
进一步详细说明发生的情况:
如果您使用CurrentProject.Connection
打开链接表,则会发生以下情况:
但是,如果您使用直接ADODB连接,则该过程要简单得多:
Access数据库引擎100%不知道您在此处查询任何内容,因为它不涉及任何步骤。
更多说明:
如果使用CurrentProject.Connection
和服务器端游标,则即使查询SQL Server,游标还是由Access数据库引擎而不是SQL Server管理。
如果使用CurrentProject.Connection
,则必须使用与SQL Server兼容的语法的Access(JET / ACE)SQL。这意味着在LIKE语句中,您需要使用%
作为通配符,并且与普通语法相比,您具有不同的功能集,但是在定界调用时仍然必须使用八叉戟,并且SQL语句仍由访问,而不是SQL Server。
作为一般语句,与SQL Server的直接连接比使用CurrentProject.Connection
通过Access进行连接要快,但可能会出现例外情况(例如,因为Access已经有一个开放的连接,而您只是执行一条小语句,因此建立新连接的相对开销很大)