我有一个MS Access 2010数据库,并且链接到SQL Server 2008R2后端的表。插入到不同的Access.accdb从SQL Server链接表中选择
我需要从链接表中选择记录并将它们插入不同访问.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)
注意[;数据库= ...] [贷款]是一个本地表到目标数据库,并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
在访问定义为外部链接表到SQL Server后端。数据库中的其他代码正在正常工作访问此表。我想到的一件事是,表Loans
不在SQL Server的默认架构中,但据我所知,Access在这一点上并不在意。我可以从其他地方的Loans
中进行选择,因为模式信息包含在链接中--Access只知道它为Loans
。我确实尝试了Loans
作为[schema].[Loans]
,但是Access也不喜欢那样。
我不知道为什么Access无法找到在代码运行的数据库中定义的表Loans
。我想我可以把它分解成一个来自Loans的SELECT,然后是一个插入外部.accdb的循环,但是如果可能的话,我宁愿在一个查询中干净地做。
非常好,@HansUp!谢谢。现在,我只需要弄清楚什么原因导致Access不喜欢我正在写的文件名,并且一切都会很好。输出名称为:“L:\ Default \ Default Management \ Attorney Oversight \ Projects \公司转移\代码\ FileTransfer OnSite-Lawye R.名称,P.A.-其他&公司,P.A..accde”'。如果我将输出文件更改为“test.accde”,则您的答案完美工作,此文件名给我发出'运行时错误'3126':无效的名称包围......'无论文件是否包含用单引号('')或括号([])表示。 – FreeMan
在文件名中包含所有标点字符的情况下,我不认为我建议的方法可以工作。您必须使用该代码可以处理的其他名称,并在完成后重命名数据库。这应该有效,但不知道你会喜欢多少。 – HansUp
是的,这是诀窍。幸运的是,这是一次性写入,因为我建立了一些数据的非现场副本。谢谢,HansUp,正是我需要的指导 – FreeMan