2016-12-14 4 views
0

Excelファイルのデータベースへの接続を多数作成したので、問題はこの特定のシナリオと直接関係しています。私は、文字列とテストしているExcel接続経由でストアドプロシージャを実行する - SSMSで動作しますが、VBAマクロでは動作しません

With ActiveWorkbook.Connections("usp_LockUnlockCustomer").OLEDBConnection 
    .CommandText = "EXECUTE dbo.usp_LockUnlockCustomer '" & bLock & "','" & Id & "','" & LockedBy & "'" 
End With 

次のように上記のSPは、いくつかのVBA経由で呼び出され

IF OBJECT_ID('usp_LockUnlockCustomer', 'P') IS NOT NULL 
    DROP PROCEDURE usp_LockUnlockCustomer 
GO 
CREATE PROCEDURE usp_LockUnlockCustomer 
    @Lock AS CHAR(10), @Id AS nvarchar(50), @LockedBy AS nvarchar(50)=null 
AS BEGIN 
SET NOCOUNT ON; 
IF @Lock = 'Lock' 
    INSERT INTO IO_Call_DB..IdLock (Id, LockedBy, LockedDtTm) 
    VALUES(@Id,@LockedBy,GETDATE()) 
; 
IF @Lock = 'Unlock' 
    DELETE FROM IO_Call_DB..IdLock 
    WHERE Id = @Id 
; 
END; 
--EXEC usp_LockUnlockCustomer 'Lock','123456789', 'Test User' 

:サーバーは、Excelは、私は、次のSPを持っている2013年

で、2012年です文字列は正しい形式になります&にはすべての必要なデータが含まれています。

ExcelとSQL間の接続は、「データ>他のソースから> SQL Serverから」によって作成されますが、これは他のすべてのSPおよび一般クエリに対して有効なかなり標準的なプロセスです。

この接続ではExcelにデータが返されないため(Excelにデータを返すように指定するのではなく、接続を設定するだけです)、これが問題である可能性があります。

誰もこの問題を経験したことがありますか?

EDIT1:私は問題を解決しましたが、それは特に大きな結果ではありません。助けていただければ幸いです。 この問題を解決するには、ストアドプロシージャの最後に「select * from」プロセスをインクルードし、Excelにブック内の範囲にデータを出力するよう指示する必要があります。これにより、VBAの.Refresh部分は、&がSPにSQLを送信することを何でもすることができます。

基本的に、データテーブルを作成する必要がありますが、データは必要ありません。コマンドを送信するだけです。

コマンドを送信するにはどうすればよいですか?1)データの配置場所を明示します。2)データが返される必要がない場合は、ストアドプロシージャ内にSELECTステートメントを含めます。 。

私の修正はテーブルから「トップ0を選択する」ことでした。少なくともExcelに出力されるデータテーブルは増加しません。

答えて

0

問題は、データを返すセルを指定せずに接続を作成するだけで、何も起こりません。

さらに、データを返すセルを指定すると、SPの末尾に空のテーブルを作成する '修正'を使用しない限り何も起こりません。

0

私の経験では、既存のブック接続に頼るのではなく、VBAでデータベース接続を作成すると(これについてはmultiple previous questions)、ストアドプロシージャは返される内容に関係なく実行されます。

関連する問題