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 に答える