※ http://lightbox.matrix.jp/ginpro/patio.cgi?mode=view2&f=249&no=12&type=ref&opt=text-align:left;margin-left:5px;&xml=y(この記事は、こちらの続きとして書かれています)
@DIV
この方法は、ADO の Microsoft.Jet.OLEDB.4.0 にテーブルをコピーさせる方法です。
@END
まず、SQL の窓のツールバーより「A」ボタンをクリックして以下の場所の MDB を開いて下さい
@DIV
(winofsql.exeがあるディレクトリ)\Tool\parts\販売管理B.mdb
@END
( MDB ならばなんでも良いです )
そして、以下のようなコピー用のSQLを作成して、テキストエリアにセットし、テキストエリアの
左下にある実行ボタンで実行して下さい。
@DIV
select *
into [ODBC;DSN=COPY_OUT;UID=ora01;PWD=ora01].[社員マスタ]
from
[ODBC;DSN=COPY_IN;UID=lightbox;PWD=lightbox].[社員マスタ]
@END
ここで、注意するべきは、実行前に COPY_OUT 側で社員マスタが存在しない事です。
存在している場合はエラーになります。もし、追加処理を行いたい場合は
[[insert into 〜 select * from 〜 ]] の構文を使います。
また、当然ですが、作成されたテーブルに主キーは存在しません。
@DIV
最も重要なのは、二つの DSN を使用しなければならない事と、
ユーザが SELECT ANY TABLE 権限を持たない事です
@END
では、もし片方の( ここでは、lightbox )が、SELECT ANY TABLE 権限を持っているとした場合、
上記記述が以下のように変化します。
@DIV
select *
into [ODBC;DSN=COPY_OUT;UID=ora01;PWD=ora01].[社員マスタ]
from
[ODBC;DSN=COPY_IN;UID=lightbox;PWD=lightbox].[lightbox.社員マスタ]
@END
こうしなければならない理由は、Microsoft にまかせると、SELECT ANY TABLE 権限を持った
ユーザーでは、Oracle 全体で同名のテーブルがあると、テーブルを特定できずにエラー
となるからです。その場合は上記のようにスキーマで修飾しなければなりません。
ですから、上記処理で lightbox. をつけなくても「たまたま」うまくいく場合がありますが、
それは、たまたま他のスキーマに同名のテーブルが無かったからという事になります
@DIV
いずれにしても、Microsoft.Jet.OLEDB.4.0 を使った MDB 接続上では、
いろいろな他の RDBMS と同時接続して、あたかも MDB 内に全てあるかのように
結合したりする事もできます。( SQLServer と Oracle のテーブルを結合等 )
また、当然ですが、Microsoft.Jet.OLEDB.4.0 は Microsoft の 製品と親和性が高いので
Excel や MDB へのデータエクスポートは容易です
@END
[[Oracle のデータを Excel へ出力]]
@DIV
select *
into [Excel 8.0;DATABASE=C:\TMP\EXPORT001.xls].[社員マスタ]
from
[ODBC;DSN=COPY_IN;UID=lightbox;PWD=lightbox].[lightbox.社員マスタ]
@END
|