VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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に接続する必要がある…というわけです。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -