投稿日 | : 2003/05/22(Thu) 09:14 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re: ADOで SQL ServerからMDBファイルへエクスポートするには |
> strSQL = "select * into MSHB100M " & _
> "IN 'C:\WINNT\Profiles\gsystem\デスクトップ\yatta.mdb' from MSHB100M"
IN句(IN演算子に非ず)は、JET SQLの構文です。
SQL Serverから mdb にエクスポートしたいのであれば、(Jet SQLの)IN句ではなく、
かわりに、(Transact-SQLの)OPENDATASOURCEを利用する事ができます。
もし、(Jet SQLの)IN句を使いたいのであれば、Jet用のOLE DBプロバイダを使って、
yatta.mdbを開き、そこに、SQL Serverから「インポート」してください。
あるいは、SQL Serverの「リンクサーバー」の機能を利用する事もできます。
これは、Enterprise Managerで[セキュリティ]-[リンク サーバー]を設定しておくか、
もしくは、sp_addlinkedserver ストアドプロシージャを使って作成することになります。
詳細は、SQL Serverの Books Online を参照してください。
> DAOでは上手く実行できましたが・・・。
もしかして、DAOでいう所の
http://homepage2.nifty.com/inform/vbdb/dao_sql2mdb.htm
のような事を、ADOで再現しようとされたのでしょうか。
上記のページでは、DAOのCreateWorkspaceの呼び出しを省略して、
既定のワークスペースを利用しています。この既定のワークスペースは
ODBC データソースではなく、Jet データベースエンジンに接続(注1)されています。
そのため、JETのSQL構文である IN句 が使える(注2)のです。
ちなみにDAOで接続した場合でも、「ODBCDirect」や「パススルークエリ」で
SQL文を実行する場合は、JET構文を使う事はできません。これらで接続した場合は、
接続先DBのSQL文法に従う必要があります(注3)。
-------------
(注1)
これは「DBEngine(0).Type」が dbUseODBC ではなく dbUseJet を返す事から確認できます。
(注2)
この場合は逆に、SQL Serverの「Transact-SQL」の文法が利用できなくなります。
(注3)
つまり、ADOであれDAOであれ、(JETの)IN句を使ったSQL文を使いたいのであれば、
SQL Serverに接続するのではなく、Jetに接続する必要がある…というわけです。