2

我有一个 Access 数据库,我正在使用传递查询从 AS400 表中返回记录。连接字符串和通过查询工作正常,但现在我试图将 pt 查询的结果填充到数据库中的本地表中,并且我的代码超时。这是我第一次尝试 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
4

1 回答 1

5

您有一个传递查询,它工作正常并返回您想要的行。现在您想将这些行存储在一个新的本地 (Jet/ACE) 表中。在我看来,一种更简单的方法是在新的“制作表”查询中使用传递作为数据源。

SELECT * INTO MyNewTable FROM YourPassThruQuery;

糟糕,您似乎打算将这些行附加到现有表中。

INSERT INTO MyNewTable
SELECT * FROM YourPassThruQuery;

如果表结构不匹配,您可以使用两个表的字段列表。

INSERT INTO MyNewTable (fld1, fld2)
SELECT first_field, second_field FROM YourPassThruQuery;
于 2012-04-18T18:28:12.240 回答