当我们使用currentproject.execute这样的代码时:
CurrentProject.connection.Execute "INSERT INTO Books (Name, Type) VALUES ('Book Name', 'STRING');"
同时操作本地表和链接表。在这两种情况下,如果我debug.print currentproject.connection,我都会得到相同的字符串,如下所示:
Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Users\David\Desktop\Comp - Copy.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database=C:\Users\David\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=5;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
由于两种情况下的连接字符串相同,Jet Engine如何确定哪个是本地表和哪个链接了?
答案 0 :(得分:2)
如果表已链接,则Access实际上会查看每个表,并每次提取该信息。
如果要查看实际使用的连接,请在调试窗口中执行以下操作:
? currentdb.TableDefs(“ local table”)。Connection
<blank returned>
或
? currentdb.TableDefs(“某些链接表”).connection
ODBC;Description=My cool conneciton;DRIVER=SQL Server;
SERVER=localhost\SQLEXPRESS;
UID=AlbertKallal;Trusted_Connection=Yes;
APP=Microsoft Office 2010;DATABASE=test3
即使您拥有“几个”不同的Access后端或链接到sql server的表,您也可以自由地使用currentconnetion。
我想我可以声明并建议Access最终使用表链接中的信息来解析sql,而不是CurrentProject.Connection。
currentProject.Connection将“解析”并告知访问该表的位置-包括链接表。但是一旦访问权获取并触摸了基于CurrentProject.Connection的链接表,它就会使用链接表中的信息。
因此,从Access的角度来看,此设置使您可以使用任何本地表或链接表,就好像它只是平面简表一样。 所以
第一步:CurrentProject.Connection(表或链接在哪里)
第二步:从该表def获取信息-本地或链接
第三步:执行sql肮脏的工作。