- - PR -
ADO接続(INSERT INTO LOCAL_TBL SELECT * FROM SVR_TBL)
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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を使用したいのですが、 どのようにして実行するのかちょっと悩んでいます。 ご教授お願いできますでしょうか。 | ||||
|
投稿日時: 2008-11-12 12:16
ORACLEでしょうか?バージョンは?
エラーメッセージも書いてください。 あと、SQL Plusで実行してみたらどうなりますか? | ||||
|
投稿日時: 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 も 列順や型などを含めて、 同型とみなせるテーブルではないかもしれませんし。 | ||||
|
投稿日時: 2008-11-12 12:50
SVR_TBL って、サーバ側のDBにあるテーブルですか?
LOCAL_TBL って、ローカル側のDBにあるテーブルですか? # もしかして、やりたいことはローカルDBへのインポートだったりする? | ||||
|
投稿日時: 2008-11-12 13:21
SVR_TBL(ORACLE)-DBサーバに存在するテーブル
LOCAL_TBL-MDB内のローカルに持っているテーブル (ローカルのテーブルはSVR_TBLの定義をそのままコピーしています)。 SQLを直で実行するとローカルテーブルに正常に挿入されるのでSQL自体の問題ではないと思います。 ========================================================================== エラー内容:'SVR_TBL'が見つかりませんでした。そのテーブルやクエリが存在して いること、または正しいことを確認してください。 エラー内容は納得がいきます。Executする時にサーバに繋ぐコネクション(CN)を指定してないからだと思います。でもどうやってカレントコネクション(crrCn)とサーバコネクション(cn)を使って実行するのかがわかりません。。。 ※ローカルのインポートではなく、ある特定の条件で絞ったコピーです。where句は 省略しています。 | ||||
|
投稿日時: 2008-11-12 18:08
この部分にどうしても納得がいかないのですが、 ・あらかじめローカルのMDBに、SVR_TBL へのリンクテーブルを用意する ・ローカルのMDBに接続し、INSERT LOCAL_TBL SELECT (上で作ったリンクテーブルの名前) クエリを実行する でできないですか? | ||||
|
投稿日時: 2008-11-12 18:50
>・あらかじめローカルのMDBに、SVR_TBL へのリンクテーブルを用意する
リンクテーブルにはしていません。 >cn.Open "Provider=MSDAORA;Data Source=***;User ID=***;Password=***;" ↑ のようにコネクションオープン時、文字列としてサーバ情報を設定して接続しています。 確かに、リンクテーブルを設定すれば、可能なのですが。 リンクテーブルにしていない理由は複数のクライアントに設定するため、 リンクの張替えをクライアントごとに設定するよりも、コードに書き込むほうが 容易だという考慮からです。 | ||||
|
投稿日時: 2008-11-12 20:06
次々に後出しじゃんけんで、話(要件・条件・環境・内容)が切り出されて、
じゃあ 自分で何とかするしかないでしょうと思いました。 ↑ と思ったのは私だけでしょうか。 |