• ベストアンサー

ACCESSのテーブルのデータ追加VBA

(サーバーのORACLEのデータベースに追加) ACCESSのAテーブルのデータをBテーブルに追加する。追加クエリを使わずVBAで作成したいのですが、どうすればよいのでしょうか。 追加クエリだと件数が多いのか、タイムアウト、ログオーバーのような エラーになってます。 A,Bテーブルは同じレイアウトです。 Bテーブルは空です。 また、サンプルが出ているようなサイトを探しているのでですが どこか良いACCESS専用の質問サイトがありますか。 ACCESS CLUBはなんだか私には使いづらいので他のサイトがあれば宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • cocom32
  • ベストアンサー率58% (75/129)
回答No.1

>追加クエリだと件数が多いのか、タイムアウト、ログオーバー ロールバックセグメントの拡張エラーじゃないでしょうか。 追加クエリで件数が多いとロールバック領域使い果たして拡張できない状態になりタイムアウト オラクルのロールバック領域を追加量に合わせて拡張するというのも1つの手ではあります。 しかしどれだけ拡張すればいいのかもわからないという問題がでてきます。 そこでロールバック領域をほとんど使わずにするには Aテーブルから Bテーブルに1レコードずつ追加できてコミットされれば上記のエラーは回避されます。 オラクルのファンクションを記述し、実行させる方法もありますが アクセスのVBAでとおしゃっておられるのでサンプルを テーブルEMP 元テーブル テーブルEMP2 追加先テーブル 両方ともリンクテーブルで既に接続されているものとします。 項目は ID:番号 NAME:名前 AD:住所 とします。 '変数を宣言 Dim DB As Database Dim ATable As Recordset Dim BTable As Recordset Set DB = CurrentDb Set ATable = DB.OpenRecordset("emp", dbOpenSnapshot) '元テーブルを読み込み専用で開く Set BTable = DB.OpenRecordset("emp2") '追加先テーブルを追加可能で開く while Not (ATable.EOF)  '元テーブルの終りまで処理を繰り返す BTable.AddNew  '追加先テーブルに空の新規レコードを作る BTable!ID = ATable.Fields("ID").Value  '元テーブルのフィールド値を新規レコードに入れる BTable!NAME = ATable.Fields("NAME").Value BTable!AD = ATable.Fields("AD").Value BTable.UPDATE '追加先テーブルに新規レコードをデータ確定する 'このときオラクルにはODBCがオートコミットされる ATable.MoveNext '元テーブルのレコードを次レコードへ wend '追加処理が終り条件抜けたら 各オブジェクト変数をクローズする Set ATable = Nothing Set BTable = Nothing Set DB = Nothing 処理の主要部のみですから エラー処理も処理件数カウントもしてません。 そのところはご自身で追加ください。 構文の不明な点は、ヘルプを参照してください。 豊富なサンプルが用意されています。 まずは少ない件数のデータで試されてはいかかでしょう。

UKUJIMA
質問者

お礼

すばらしく丁寧にありがとうございます。 私が知りたかった以上です。 ほんとうにありがとうございました。 これから、作成いたします。

関連するQ&A