- PR -

ADO接続(INSERT INTO LOCAL_TBL SELECT * FROM SVR_TBL)

投稿者投稿内容
にぃにぃ
ベテラン
会議室デビュー日: 2006/10/19
投稿数: 70
投稿日時: 2008-11-12 11:51
ADOを使用してDBから取得したデータをローカルテーブルに挿入したいのですが、
どうも、やり方が良くないようで、エラーが発生します。
<VBA>
Set cn = CreateObject("adodb.Connection")
cn.Open "Provider=MSDAORA;Data Source=***;User ID=***;Password=***;"
Set crrCn = Application.CurrentProject.Connection
sql = "INSERT INTO LOCAL_TBL SELECT * FROM SVR_TBL"
crrCn.Execute(sql)←????

ちなみにsqlをサーバからSELECTしてrs.Open sql, cnでレコードセットを取得して
そのレコードセットからINSERTをcrrCn.Execute(sql)とすると正常に実行できるの
ですが。その場合INSERTする時に膨大な数の項目を明示的に設定しないといけない
ため、INSERT INTO LOCAL_TBL SELECT * FROM SVR_TBLを使用したいのですが、
どのようにして実行するのかちょっと悩んでいます。
ご教授お願いできますでしょうか。
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-11-12 12:16
ORACLEでしょうか?バージョンは?
エラーメッセージも書いてください。
あと、SQL Plusで実行してみたらどうなりますか?
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2008-11-12 12:35
cnで接続するコードの提示があって(=ADODB.Connectionを作成して)
Set crrCn = Application.CurrentProject.Connection
sql = "INSERT INTO LOCAL_TBL SELECT * FROM SVR_TBL"
crrCn.Execute(sql)←????

crrCn.Execute で エラーが起きると言われても・・・?
crrCnは、当のご本人しかわからない謎の物体(オブジェクト)です。

エラーが発生します も どんなエラーが起きているか
(Err.Descriptionなどで取得)書けば、
より的確な回答が速く来ると思いますよ。

LOCAL_TBL と SVR_TBL も
列順や型などを含めて、
同型とみなせるテーブルではないかもしれませんし。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-11-12 12:50
SVR_TBL って、サーバ側のDBにあるテーブルですか?
LOCAL_TBL って、ローカル側のDBにあるテーブルですか?

# もしかして、やりたいことはローカルDBへのインポートだったりする?
にぃにぃ
ベテラン
会議室デビュー日: 2006/10/19
投稿数: 70
投稿日時: 2008-11-12 13:21
SVR_TBL(ORACLE)-DBサーバに存在するテーブル
LOCAL_TBL-MDB内のローカルに持っているテーブル
(ローカルのテーブルはSVR_TBLの定義をそのままコピーしています)。
SQLを直で実行するとローカルテーブルに正常に挿入されるのでSQL自体の問題ではないと思います。
==========================================================================
エラー内容:'SVR_TBL'が見つかりませんでした。そのテーブルやクエリが存在して
いること、または正しいことを確認してください。

エラー内容は納得がいきます。Executする時にサーバに繋ぐコネクション(CN)を指定してないからだと思います。でもどうやってカレントコネクション(crrCn)とサーバコネクション(cn)を使って実行するのかがわかりません。。。
※ローカルのインポートではなく、ある特定の条件で絞ったコピーです。where句は
省略しています。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-11-12 18:08
引用:

にぃにぃさんの書き込み (2008-11-12 13:21) より:

SQLを直で実行するとローカルテーブルに正常に挿入されるのでSQL自体の問題ではないと思います。


この部分にどうしても納得がいかないのですが、

・あらかじめローカルのMDBに、SVR_TBL へのリンクテーブルを用意する
・ローカルのMDBに接続し、INSERT LOCAL_TBL SELECT (上で作ったリンクテーブルの名前) クエリを実行する
でできないですか?
にぃにぃ
ベテラン
会議室デビュー日: 2006/10/19
投稿数: 70
投稿日時: 2008-11-12 18:50
>・あらかじめローカルのMDBに、SVR_TBL へのリンクテーブルを用意する
リンクテーブルにはしていません。

>cn.Open "Provider=MSDAORA;Data Source=***;User ID=***;Password=***;"

のようにコネクションオープン時、文字列としてサーバ情報を設定して接続しています。
確かに、リンクテーブルを設定すれば、可能なのですが。
リンクテーブルにしていない理由は複数のクライアントに設定するため、
リンクの張替えをクライアントごとに設定するよりも、コードに書き込むほうが
容易だという考慮からです。


platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2008-11-12 20:06
次々に後出しじゃんけんで、話(要件・条件・環境・内容)が切り出されて、
じゃあ 自分で何とかするしかないでしょうと思いました。

↑ と思ったのは私だけでしょうか。

スキルアップ/キャリアアップ(JOB@IT)