0

この投稿で、Remou は次の構文を使用して、SQL Server テーブルから MS Access テーブルにデータを一括挿入する方法をうまく説明しています。

SELECT fld1, fld2 INTO accessTable FROM [sql connection string].sqltable

彼の投稿の例では、Remou は ODBC キーワードを使用しています。SQL Server Native Client 10.0 ODBC Driverの代わりにSQL Server Native Client 10.0 OLE DB Providerを使用する場合、これらの例をどのように変更できますか?

たとえば、次のことを試しましたが、うまくいきません。ExecuteNonQuery() の呼び出しで、「インストール可能な ISAM が見つかりませんでした」というエラーが表示されます。AccessConn は、Remou の ODBC の例でテストしたので、問題なく動作します。問題は、SQL Server の接続文字列にあるようです。

OleDbConnection AccessConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\\TestFolder\\Test.mdb'");
OleDbCommand AccessCmd = new OleDbCommand("INSERT INTO Table2 SELECT * FROM [OLEDB;Provider=SQLNCLI10;Server=MyServer\\SQLEXPRESS;Database=TestDb1;Uid=TestUser;Pwd=TestPassword].Table1", AccessConn);
AccessCmd.ExecuteNonQuery();
AccessConn.Close();

ありがとう。

4

1 に答える 1

0

OLEDB を使用して説明したことを行う方法はないと思います。

次の VBA コードをテストしたところ、動作しました。

Sub odbcTest()
Dim cdb As DAO.Database, sql As String
Set cdb = CurrentDb
sql = _
        "SELECT ID, LastName INTO myContacts " & _
        "FROM [ODBC;Driver={SQL Server Native Client 10.0};Server=.\SQLEXPRESS;Database=myDb;Trusted_Connection=yes;].dbo.myContacts"
cdb.Execute sql, dbFailOnError
End Sub

次に、同等の OLEDB をテストしたところ (「インストール可能な ISAM が見つかりませんでした」)、同じエラーで失敗しました。

Sub oledbTest()
Dim cdb As DAO.Database, sql As String
Set cdb = CurrentDb
sql = _
        "SELECT ID, LastName INTO myContacts " & _
        "FROM [OLEDB;Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=myDb;Trusted_Connection=yes;].dbo.myContacts"
cdb.Execute sql, dbFailOnError
End Sub

ODBC;ただし、角括弧内のおよびプレフィックスに注意してOLEDB;ください。「通常の」接続を確立する場合、これらは必要ありません。次のコードは機能します...

Sub adoTest()
Dim con As Object
Const sqlInstance = ".\SQLEXPRESS"
Set con = CreateObject("ADODB.Connection")
con.Open "Driver={SQL Server Native Client 10.0};Server=" & sqlInstance & ";Database=myDb;Trusted_Connection=yes;"
MsgBox "ODBC connection to " & sqlInstance & " established."
con.Close
Set con = Nothing
End Sub

...しかしODBC;、接続文字列の先頭に句を追加すると...

Sub adoTest()
Dim con As Object
Const sqlInstance = ".\SQLEXPRESS"
Set con = CreateObject("ADODB.Connection")
con.Open "ODBC;Driver={SQL Server Native Client 10.0};Server=" & sqlInstance & ";Database=myDb;Trusted_Connection=yes;"
MsgBox "ODBC connection to " & sqlInstance & " established."
con.Close
Set con = Nothing
End Sub

...「[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified」で失敗します。

したがって、上記の最初のコード サンプルODBC;のプレフィックスは、このメソッドがリンク テーブルを明示的に作成せずに ODBC データ ソースからデータを取得するための単なる Access ショートカットであることを示しています。(角かっこ内のものは、リンクされたテーブルのオブジェクトのプロパティになります。)Sub odbcTest()FROM [ODBC;...].ConnectTableDef

したがって、私の知る限り、Access は ODBC リンク テーブルのみをサポートする (OLEDB リンク テーブルはサポートしない) ため、OLDEB でこの方法を使用しても機能しません。

于 2013-04-11T22:07:00.120 に答える