将直通查询中的记录附加到本地表
Posted
技术标签:
【中文标题】将直通查询中的记录附加到本地表【英文标题】:Append Records From Passthrough Query to Local Table 【发布时间】:2012-04-18 18:01:32 【问题描述】:我有一个 Access 数据库,我正在使用传递查询从 AS400 表中返回记录。连接字符串和通过查询工作正常,但现在我试图将 p-t 查询的结果填充到数据库中的本地表中,并且我的代码超时。这是我第一次尝试 ADO,所以我用“我不是 100% 确定我在做什么!”来否认我的代码。你能看看这个,看看我做错了什么明显的事情吗?任何方向将不胜感激。提前谢谢你。
Sub mod_ADODBConnect()
Const NewTableName = "MyNewTable"
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim db As DAO.Database
Dim sSQL1 As String
Dim sSQL2 As String
sSQL1 = "SELECT ITMNUM, ITMDS, ITPKDS, MJCMCD, SBCMCD, STATUS, PRITIN, OGEXDT from PDBLLIB007.BLPMST07"
sSQL2 = "INSERT INTO ' & NewTableName & ' SELECT [" & sSQL1 & "].* from [" & sSQL1 & "]"
Set cn = New ADODB.Connection
cn.Open "Driver=Client Access ODBC Driver (32-bit);" & _
"System=DC007; Uid=XXXXX; Pwd=XXXXXX; MgDSN=0; ConnType=2;" & _
"BlockSize=512; MaxFieldLen=2048; LazyClose=1; Prefetch=1; QueryTimeOut=0; Translate=1"
Set rs = New ADODB.Recordset
rs.Open sSQL1, cn, adOpenDynamic, adLockOptimistic
Do While Not rs.EOF
rs.MoveNext
Loop
Set db = CurrentDb
db.Execute ("sSQL2")
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
Set db = Nothing
End Sub
【问题讨论】:
你考虑过链接表(itknowledgeexchange.techtarget.com/itanswers/…)吗? 【参考方案1】:您有一个传递查询,它可以正常工作并返回您想要的行。现在您想将这些行存储在一个新的本地 (Jet/ACE) 表中。在我看来,一种更简单的方法是在新的“make table”查询中使用传递作为数据源。
SELECT * INTO MyNewTable FROM YourPassThruQuery;
糟糕,您似乎打算将这些行附加到现有表中。
INSERT INTO MyNewTable
SELECT * FROM YourPassThruQuery;
如果表结构不匹配,您可以为两个表使用字段列表。
INSERT INTO MyNewTable (fld1, fld2)
SELECT first_field, second_field FROM YourPassThruQuery;
【讨论】:
这可能是我最终会这样做的方式,但有可能是我尝试的方式吗? 我不这么认为。它使用CurrentDb
执行sSQL2
。我认为Access的数据库引擎会抱怨“来自PDBLLIB007.BLPMST07”并且可能还有其他问题。我不明白打开记录集的意义。
Remou 建议在 Access 中创建指向远程数据源的链接也应该有效。也许通过链接表,您将不需要将其数据冗余存储在本机 Access 表中。
我想我不明白打开记录集的意义。我可能需要备份几个步骤并阅读 W3 上的 ADO 教程。链接表的问题在于我们有 22 个系统,并且我已经在我的 PC 上创建了文件 DSN,但是我们有将近 20 个用户,我试图避免必须在每个用户 PC 上设置 DSN。汉斯,谢谢你的帮助! Remou 一如既往地感谢您的帮助!
不客气。将链接表转换为无 DSN 连接时,分发更容易。使用无 DSN 连接:accessmvp.com/djsteele/DSNLessLinks.html以上是关于将直通查询中的记录附加到本地表的主要内容,如果未能解决你的问题,请参考以下文章
使用云功能将数据加载到大查询表中,它是附加到表中的,我需要它来替换
Access 中的 T-SQL 直通查询是不是可以包含本地 Access 表?