[リストへもどる]
一括表示

投稿時間:2003/05/21(Wed) 19:09
投稿者名:コウ
URL :
タイトル:
ADOで SQL ServerからMDBファイルへエクスポートするには
ADOで SQL ServerからMDBファイルへエクスポートしたいのですが、
「実行時エラー  キーワード'IN'付近に正しくない構文があります」というエラーになります。
DAOでは上手く実行できましたが・・・。
以下のように記述しております。どなたかご教授願います。

Dim adoConn As ADODB.Connection
Dim strSQL As String
Set adoConn = CreateObject("ADODB.Connection")
adoConn.ConnectionString = "Provider=SQLOLEDB;Data Source=express5800-120;" & _
                      "Database=MORIDB;User ID=MORIDB;Password=mori;"
adoConn.Open
strSQL = "select * into MSHB100M " & _
                   "IN 'C:\WINNT\Profiles\gsystem\デスクトップ\yatta.mdb' from MSHB100M"
  
adoConn.Execute strSQL
adoConn.Close
Set adoConn = Nothing

よろしくお願いします。

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

投稿時間:2003/05/22(Thu) 10:53
投稿者名:コウ
URL :
タイトル:
ありがとうございます
返信ありがとうございます。詳しく解説していただき感謝します。
まだ私はVBを始めたばかりで、分からない部分もありましたが大まかには理解できました。