2017-07-31 8 views
0

私はODBC接続を持つSQLサーバデータベースを持っています。私はsqlserverからアクセスデータベースにテーブルをインポートできるようにしたいと思います。ODBCから別のアクセスファイルにテーブルをエクスポートする

私はアクセスにテーブルをインポートし、別のアクセスファイルにエクスポートすることができました。そのよう

DoCmd.TransferDatabase acImport, "ODBC Database", _ 
    "ODBC connectionstring" _ 
    , acTable, "SOURCE1", "DEST1", False, True 

DoCmd.TransferDatabase acExport, "Microsoft Access", _ 
    "P:\Main-Copy.accdb" _ 
    , acTable, "DEST1", "DEST2" 

1つのステップの代わりに、2でそれを行うことは可能でしょうか?

答えて

1

同じアクションクエリでSQL ServerデータベースとリモートAccessデータベースに接続する純粋なSQLソリューションも検討してください。以下の例では、MSSQLとMS OfficeがDAO経由で適切に接続するために同じビットバージョン(32ビット/ 64ビット)にインストールされていると仮定しています。

追加クエリ(特定の列を選択し、さもなければ、すべてのフィールドが両方のテーブルの間に整列仮定)

INSERT INTO [P:\Main-Copy.accdb].DEST2 
SELECT * 
FROM [ODBC;DRIVER={SQL Server};Server=INSTANCE\myServer;database=dbName;UID=XX;PWD=***].SOURCE1; 

テーブル作成クエリ(そうでない場合に必要とする、事前テーブルが存在しないと仮定DROP TABLE ...

SELECT * 
INTO [P:\Main-Copy.accdb].DEST2 
FROM [ODBC;DRIVER={SQL Server};Server=INSTANCE\myServer;database=dbName;UID=XX;PWD=***].SOURCE1; 
+0

ありがとうございました100%私が望むもの –

0

ロバート、

データのコピーを作成しますか?そうでない場合は、単にテーブルを2番目のデータベース(例では)にオプションで追加しますか?このシナリオでは、データはAccessデータベースに移動されず、要求されたときにフェッチされます(つまり、データベースコンテナ内のテーブルをダブルクリックします)。テーブルが2番目のDBに接続されている場合、テーブル作成クエリを実行してデータをローカルにすることができます。これはシングルステップです。

SQL Serverが正しいDBパスにアクセスできると仮定して、SQL ServerからDBにデータをプッシュすることもできます。

+0

はい、データが必要です –

0

私は、最初のデータベースでは、このとの双方向

程度ラウンドのビットでこれを働きました。外部データベースのsubを呼び出します。

Set appAccess = CreateObject("Access.Application")  
appAccess.OpenCurrentDatabase "DATABASE PATH", False  
appAccess.Run "ImportTableToExternalDB", "Clients"  
Set appAccess = Nothing 

このメソッドは外部データベースにあります。これは実際の転送

Public Sub ImportTableToExternalDB(TableName As String) 

    DoCmd.TransferDatabase acImport, "ODBC Database", _ 
     "ODBC Connection String" _ 
     , acTable, TableName, TableName, False, True 

End Sub 

助け

のために皆にEDITをいただき、ありがとうございますん:私は、それはあらゆる方法で、より簡単で効率的であったとしてパフェの答えで行くことにしました。

+0

これは2つのステップ、おそらくCOM経由でAccessオブジェクトを呼び出すオーバーヘッドのように感じます。 – Parfait

+0

これは、私が理想的に思っている以上に丸みを帯びていますが、これは私の最終目標であるI/Oを低下させます。 –

+0

再度、別のAccessオブジェクトを起動し、実行時例外の可能性のあるマクロを呼び出し、メモリからオブジェクトを解放します。これは、元々のように、1行の 'DoCmd.TransferDatabase'ステップで完了します。 – Parfait

関連する問題