こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

(サーバーのORACLEのデータベースに追加)
ACCESSのAテーブルのデータをBテーブルに追加する。追加クエリを使わずVBAで作成したいのですが、どうすればよいのでしょうか。
追加クエリだと件数が多いのか、タイムアウト、ログオーバーのような
エラーになってます。

A,Bテーブルは同じレイアウトです。
Bテーブルは空です。

また、サンプルが出ているようなサイトを探しているのでですが
どこか良いACCESS専用の質問サイトがありますか。
ACCESS CLUBはなんだか私には使いづらいので他のサイトがあれば宜しくお願いします。

投稿日時 - 2007-08-29 18:31:47

QNo.3297714

困ってます

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

>追加クエリだと件数が多いのか、タイムアウト、ログオーバー
ロールバックセグメントの拡張エラーじゃないでしょうか。
追加クエリで件数が多いとロールバック領域使い果たして拡張できない状態になりタイムアウト
オラクルのロールバック領域を追加量に合わせて拡張するというのも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

処理の主要部のみですから エラー処理も処理件数カウントもしてません。
そのところはご自身で追加ください。
構文の不明な点は、ヘルプを参照してください。
豊富なサンプルが用意されています。
まずは少ない件数のデータで試されてはいかかでしょう。

投稿日時 - 2007-08-30 00:54:16

お礼

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

投稿日時 - 2007-08-30 11:27:43

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問