web-dev-qa-db-ja.com

MS Access呼び出しSQL Serverストアドプロシージャ

SQL Serverにリンクされたすべてのテーブルを含むMS Accessアプリケーションがあるため、MS Access VBAコードまたはクエリでは、これらのテーブルを非常に簡単に操作し、[Customers]などの名前でアクセスします。

また、SQL Serverにはsp_CopyDataというストアドプロシージャがあり、VBAコードから呼び出す必要があります。 SQL Serverへの新しい接続を作成せずにこれを行うにはどうすればよいですか(既にどこかに接続されています!?テーブルにアクセスできるためです)。

それとも不可能ですか?ヘルプを感謝します。ありがとう!

13
ihorko

正しい答えが見つかりました、それは次のようでなければなりません:

Dim qdef As DAO.QueryDef
Set qdef = CurrentDb.CreateQueryDef("")
qdef.Connect = CurrentDb.TableDefs("[ANY LINKED TABLE TO MS SQL SERVER]").Connect
qdef.SQL = "EXEC sp_CopyData"
qdef.ReturnsRecords = False  ''avoid 3065 error
qdef.Execute
19
ihorko

パススルークエリを作成すると、T-SQLを実行する必要があるときはいつでも、これをWHOLEアプリケーション全体で使用できます。

コードは次のようになります。

With CurrentDb.QueryDefs("qPass")
  .SQL = "exec sp_copydata"
  .ReturnsRecords = False  ''avoid 3065 error
  .Execute
End With
12

MS Accessのコードは私のために機能します:

Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.ActiveConnection = "Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=[DB];Data Source=[PC];Integrated Security=SSPI;"
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "sp_CopyData"
cmd.Parameters.Append cmd.CreateParameter("@param", adVarChar, adParamInput, 255, param)
cmd.Execute
6
Lubart

試してください:

CurrentProject.Connection.Execute "EXEC sp_CopyData"

参照: http://msdn.Microsoft.com/en-us/library/office/ff821478(v = office.14).aspx

4
Bogdan Sahlean