我有一个MS Access 2010数据库,其中的表链接到SQL Server 2008R2后端。
我需要从链接表中选择记录,并将它们插入到具有本地表的其他Access .accdb中。
这是我的代码:
Const DbPath = "L:\path\"
Const DbBaseName = "FileTransfer OnSite"
Const DbExt = ".accde"
Const LockDbExt = ".laccdb"
Const ConString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq="
Dim Con As ADODB.Connection
Dim RS As ADODB.Recordset
Dim DbOutName As String
Dim DbInName As String
Dim Overwrite As Integer
Dim PutStr As String
'do some sanity checking first, then
FileCopy DbInName, DbOutName 'make a physical copy of the blank on-site file
Set Con = New ADODB.Connection
Con.ConnectionString = ConString & DbOutName
Con.Open
PutStr = "INSERT INTO [;Database=" & DbOutName & "].[Loan] (Loan, FromFirm, ToFirm, Borrower, PropStreet, PropCity, PropState, PropZip, Judicial, Examiner) " & _
"SELECT Loan, FromFirm, ToFirm, Borrower, PropStreet, PropCity, PropState, PropZip, Judicial, Examiner " & _
" FROM Loans " & _
" WHERE FromFirm = '" & Me.cmbFrom & "' " & _
" AND ToFirm = '" & Me.cmbTo & "'"
Set RS = Con.Execute(PutStr)
请注意,[; Database = ...]。[Loan]是目标数据库的本地表,并且FROM Loans
引用源db中运行此代码的外部链接表。
PutStr决心解决:(为所涉及公司的隐私而编辑)
INSERT INTO [;Database=L:\Path\FileTransfer OnSite-E-A.accde].[Loan] (Loan, FromFirm, ToFirm, Borrower, PropStreet, PropCity, PropState, PropZip, Judicial, Examiner)
SELECT Loan, FromFirm, ToFirm, Borrower, PropStreet, PropCity, PropState, PropZip, Judicial, Examiner
FROM Loans
WHERE FromFirm = 'E'
AND ToFirm = 'A'
我Set RS =
在行上收到一条错误消息,指出:
Run-time error '-2147217865 (80040e37)':
[Microsoft][ODBC Microsoft Access Driver] The Microsoft Access
database engine cannot find the input table or query 'Loans'. Make
sure it exists and that its name is spelled correctly.
Loans
在Access中定义为到SQL Server后端的外部链接表。数据库中的其他代码可以正常访问该表。我想到的一件事是,该表Loans
不在SQL Server的默认架构中,但据我所知,Access在此刻并不在意。我可以从Loans
其他位置进行选择,因为架构信息包含在链接中-Access只是将其称为Loans
。我确实尝试引用Loans
为[schema].[Loans]
,但Access也不喜欢那样。
我不确定为什么Access无法找到Loans
运行代码的数据库中定义的表。我以为我可以将其分解成来自贷款的SELECT,然后是一个循环,以插入到外部.accdb中,但是如果可能的话,我宁愿在单个查询中进行整洁。
在我的Access数据库中,我有一个名为web_links的链接表,它是指向SQL Server表的ODBC链接。因此,此查询检索该表的所有数据:
SELECT
l.link_id,
l.date_added,
l.url,
l.notes
FROM web_links AS l;
我还有另一个Access db文件,名为database2.accdb。该数据库包含一个名为web_links的本地Access表。
因此,从当前的Access数据库(我成功运行了SELECT
上面的查询的数据库)中,我可以从SQL Server检索数据并将这些数据附加到database2.accdb中的表中。
INSERT INTO web_links
(
link_id,
date_added,
url,
notes
) IN 'C:\share\Access\database2.accdb'
SELECT
l.link_id,
l.date_added,
l.url,
l.notes
FROM web_links AS l;
关键是Access可以让我方便地指示将接收附加数据的数据库的位置:
IN 'C:\share\Access\database2.accdb'
尽我所知,此描述与您要完成的工作类似。如果我做对了,那么您就不需要操心ADO,连接字符串,对象等等。只需执行一个告诉db引擎在哪里可以找到目标数据库的查询。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句