【发布时间】:2014-02-14 18:34:33
【问题描述】:
我有一个 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 引用源数据库(运行此代码的数据库)中的外部链接表。
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。我想我可以把它分解成一个来自 Loans 的 SELECT,然后是一个循环插入到外部 .accdb 中,但如果可能的话,我宁愿在一个查询中干净地完成它。
【问题讨论】:
标签: ms-access sql-server-2008-r2 vba ms-access-2010